教えて下さい。現在、商品をデータベースで管理しているのですが、システム変更をしようと思っており、新しいシステムの方式にデータを書き換えなければなりません。
excel情報
A1:商品A B1:10 C1:0
A2:商品A B2:20 C2:50
A3:商品A B3:50 C3:0
A4:商品A B4:100 C4:38
この内容を文章にすると、商品Aは10個以下は0円、11個~20個までは50円、21個~50個までは0円、51個~100個まで38円となります。
これを下記のようにしたいのです。
A1:商品A B1:1 C1:0
A2:商品A B2:11 C2:50
A3:商品A B3:21 C3:0
A4:商品A B4:51 C4:38
A5:商品A B5:100 C5:0
先の例とは違い、”迄”の考え方から"から"の考え方に変わっています。
文面にすると内容は同じなのですが、全くexcel情報が変わっています。
この様な複雑な変換を、そもそもexcelで出来る気がしないのですが、可能なのでしょうか?
もし、気になる方が居られましたら、回答をお願い致します。
基本的なVBAの使い方はわかりますが、書き込むレベルではありません。
もしコードを書くことができるのであれば、コピーさせて頂き作業をさせて頂けますでしょうか。
無茶な話かも知れませんが、何卒宜しくお願い致します。
No.1
- 回答日時:
整理しましょう。
提示された内容ではB列で10を1、20を11~~
これでいいのでしょうか?
早い話が関数云々ではなく置換でB列を選択しておいて、この場合は多分大きい方の数字から置換えを実施すればいいでしょう。
提示されただけでなく、もっと多くても、この置換で出来るように思います。
B列を選択という事は、置換の対象をB列だけにすると言う事です。
また大きい方からと言うのは、置き換えた後の数字が再度置換の対象になってしまう事を防ぐためです。(重ならないのであれば大丈夫です)
一応ファイルの元ではなく、コピーしたファイルで確かめてからの方がいいです。
https://dekiru.net/article/12053/
ご協力ありがとうございます。
B列を確認しながら、置換えで可能なのですが、これが永遠と数万行あり、且つB列の数字がランダムな為、一度理解をしないと置き換える数字が見てないのが難点です。
やはり、この様な事は不可能なのでしょうか・・・
No.4
- 回答日時:
データベースのマスタを変えたいのか、それを使った実データを変えていきたいのかよくわかりません。
マスタを変えたいなら(B1は手入力で変更)、B2以下は1を足せばいいだけですよね?形式を選択して貼り付けの加算を使えばすぐできると思います。
実データを変えたいなら上記で変換したマスタを使ってVLOOKUPとかでできるんじゃないですか?
本当ですね。
まず、使用しているデータベースはシステムソフトなので修正が効きません。
CSVで出力したものをExcelで修正し、新しいシステムソフトにインポートします。
よって実データを修正します。
確かに、20とか50とかの数字はランダムですが、上の行のセルを参照したものに対し+1になっていますね。
少しヒントが見えてきたかもしれません。
ご協力ありがとうございます。
No.5
- 回答日時:
> 法則性はなく
この時点で無理です。
Excelは魔法は使えません。
規則性があって、それを数式で解決するだけのものです。
絶望的な数量に、人をかき集めて取り組んでいるのですが、さすがに効率が悪く、excelにはいつもながら驚かされ続けてましたので、何かヒントになる物は無いかと探していたのです。
ピボットや関数、VBAを複数使って少しでも進めばと思いました。
こんな、無茶な質問にご協力ありがとうございました。
No.6
- 回答日時:
規則性はないと言うのは商品によってB列の個々の最小値(開始値)がバラバラと言う事でしょうか?
それともB・C列の関係性がバラバラなのでしょうか?
或いはB列の範囲が商品Aなら51~100個だけど、商品Bは31~80個、商品Cは61~110個と言う感じ?
その通りです。
B列は数量、C列は商品別数量単価ですので、BとCの組み合わせは無限にあります。
商品Aは10個まで0円なので販売不可ですが、商品Bは1個から120円とか、商品Cは100まで0円で101個から15円とか、本当にバラバラです。
正確には元データの最小値が0円設定なら(商品Aなら10個)は販売不可なのですが、こんなにややこしい質問なので、この際は無視して貰って、最小値は1個からを考えています。
No.7
- 回答日時:
置換するテーブルを作って、VLOOKUP関数を使って置き換える…かな。
D E F
0 10 0
11 20 50
21 50 0
51 100 38
100 ∞ デカすぎ
の表からVLOOKUP関数で値を拾う。
C1セルなら、
=VLOOKUP(B1,D1:F5,3,TRUE)
これが仕様変更前のやり方。意味をよく考えてください。
「検索値以下で一番大きい値を検出」して該当する値を拾ってくるようなっています。
じゃあ、どうすれば良いかは分かりますね。
テーブルのD列とE列の値をチョイチョイッと変えるだけです。
なんてことは無い、そんだけの話。
このやり方のもう一つのメリットは、F列も含め簡単に割り当てと返す値を変更できるという事。
・・・
なお、ここで示した数式ではVLOOKUP関数を使っていますので、
検索値がマイナスなどテーブルに存在しない値が指定されている場合のエラーは顧慮していません。
値を入力するのであれば「入力規則」で入力できる値の範囲を指定しておきましょう。
数式で求めるなら数式の中で制御してください。
なお、「入力規則」で制限してもコピー&ペーストすれば指定した範囲以外の値を入れることができたりします。
やはり入力された値を数式で判断するか、エラー処理の数式を織り交ぜましょう。
確かに変換する事が容易に出来ましたが、これをどの様に数十万行に充てれば良いのかが分からなく、思考停止に陥りました(笑
ご協力ありがとうございます!
No.9
- 回答日時:
商品毎にB列の範囲先頭値もC列の値も変動している数十万行に対し同レベルのテーブルで置換もですが、ほぼ直に修正しても変わらない気がする初級レベルなジジィなのですがやっぱ数式でカバーできるものなのですね。
⇒数式はほぼ皆無に近いので。
と言うよりも実際にエクセルを使っているのか、システムが吐き出したCSVファイルなのかと言う疑問もありますが。
そこなんですね。
思考が停止してしまい、どちらの方が速いのか分からなくなってきて、ひたすら壁を感じ続けています。
システムからデータをCSVでエクスポートし、excelで修正中。
置き換え、検索、関数も使えるので、他の膨大な変換作業に大きく貢献していますが、単価が一番の難関です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 会計ソフト・業務用ソフト Excelで売上げデータの中の任意の商品の合計を出したい 3 2023/01/18 18:19
- Excel(エクセル) エクセルでのVBA 2 2022/08/03 06:48
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) Excel 関数 vlookupなどの使い方について質問です。 シート1に品番、商品名、単価、発注条 6 2022/06/15 19:16
- Excel(エクセル) Excel での関数についての質問です。 例えばA列に商品名を、B列に個数をそれぞれ入力しています。 7 2023/05/13 10:51
- Excel(エクセル) エクセルの書式設定の表示形式で設定した文字を文字列としてコピーしたい 1 2022/12/21 10:41
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Visual Basic(VBA) vbaマクロについて 【1.csv】をもとに【商品.csv】に有るものを【有り.csv】として名前を 1 2023/05/18 07:58
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Visual Basic(VBA) vbaマクロについて 次のようなマクロを組みたいです。 自分は初心者なので全くわかりません。 詳しく 8 2023/05/18 18:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
エクセルのブック分割マクロを...
-
VBAで繰り返しコピーしながら下...
-
エクセルの保護で、列の表示や...
-
エクセルの列の限界は255列以上...
-
エクセルで横並びの複数データ...
-
【VBA】複数のシートの指定した...
-
Excelで全てのシートに一気に列...
-
【条件付き書式】countifsで複...
-
エクセルのグラフのマクロでエ...
-
EXCEL 関数を教えてください。...
-
SUMPRODUCTにて別シートのデー...
-
エクセルVBA 行追加時に自...
-
エクセルでIPマッピング表を作る
-
エクセルVBAで、ある文字を含ん...
-
シートをまたぐ条件付き書式に...
-
【Excel】ある文字列からはじま...
-
ある数値に対して、値を返す数...
-
エクセルVBA データを別シート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
オートフィルタ使用時にCOUNTIF...
-
エクセルの保護で、列の表示や...
-
VBAで繰り返しコピーしながら下...
-
エクセル関数に詳しい方、教え...
-
【条件付き書式】countifsで複...
-
Excel の複数シートの列幅を同...
-
エクセル マクロ 標準モジュー...
-
エクセルで横並びの複数データ...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
VLOOKアップ関数の結果の...
-
SUMPRODUCTにて別シートのデー...
-
エクセルで、チェックボックス...
-
Excel VBA ピボットテーブルに...
-
【エクセル】1列のデータを交...
-
エクセルVBAで、ある文字を含ん...
-
エクセルのブック分割マクロを...
-
excel 複数のシートの同じ場所...
おすすめ情報
誤字がありました。
B5は101となり、商品Aは101個から0円設定となります。
また全体量は数万行あり、B列の数量は1~数万の範囲でランダムで記載。
法則性はなく、文章を読みとり、捉え方は変えてこれを数字に返す みたいな事しか、自分の頭では出てきません。
スクショ画像の添付が、なぜかアップできずに、実際のデータ値だけを記載しました。
今回の質問に関連の無い、得意先コード、名称、商品コードなどは省いております。
シート名は変更できますので指定しません。
A B C
商品A 359 0
商品A 3240 34
商品B 47 0
商品B 2940 65
商品B 4980 63
商品B 9960 61
商品B 19980 60
商品C 2499 0
商品C 2999 63
商品C 9960 61
商品D 1999 0
商品D 2999 33
商品D 9840 31
大変見にくくてすみません。