教えて下さい。現在、商品をデータベースで管理しているのですが、システム変更をしようと思っており、新しいシステムの方式にデータを書き換えなければなりません。
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.11
- 回答日時:
数百行程度ってなら出来るでしょうけど、数十万行となるとフリーズでボンが怖いですしね。
結局セル値を変数Xに、変数Xの値に+1、次のセルの値を別の変数Yに、『次のセルの値』に『変数Xの値に+1』を書き入れる。
みたいなのを商品名(?)毎に行なう感じなのかな?
無論最初に現れた連続する商品名のB列には変数にセル値をいれたら、セルに1を入れておく。
初級レベルなジジィにはこんな地味な方法しかわからないけど、超鈍行でしょうね。フリーズするかも。
No.12
- 回答日時:
No.7のお礼への返答です。
>これをどの様に数十万行に充てれば良いのかが分からなく、思考停止に陥りました(笑
C1セルなら、
=VLOOKUP(B1,D1:F5,3,TRUE)
↓
C1セルなら、
=VLOOKUP(B1,$D$1:$F$5,3,TRUE)
絶対参照にすれば良い。
さらにC1セルを選択したら、
Ctrl+Shift+↓
でC列に入力されているセル全体を選択できるので、あとは
Ctrl+D
で、選択範囲の一番上の値や数式を下のセルに複製できます。
範囲の選択は、数式バーの左に「A1」とか「C1:C10」のように表示される
”名前ボックス”
に範囲を直接入力しても良いでしょう。
C1:C500000
Enterキーを押せばその範囲を一度に選択できます。
・・・
そんなわけで実は、ほとんど一瞬で終わります。
Excelの基本操作を今一度覚えるようにしてみましょう。
今ならどうやれば効率よく作業ができるのか理解できるでしょうから、
難しいと思う事もないでしょう。
それどころか、「これ使ってみたい!!」と思う事がいっぱいだろうと思います。
銀鱗 様。
この度は本当にご協力頂きまして、ありがとうございました。
無事に解決する事ができました事を、ご報告させて頂きます。
自分の情報量の少なさとスキルの無さを、あたらめて実感しました。
>それどころか、「これ使ってみたい!!」と思う事がいっぱいだろうと思います。
私も同感であります。
難しいから、勉強し、習得した際の達成感は病みつきになりますよね(笑)
コツコツとですが、少しでもこの様な回答が出来る様に日々精進して参ります。
本当にありがとうございました
No.13
- 回答日時:
あれ?
私勘違いしているのかな?
仮に商品A・商品B・商品C・・・・・とあったとして、
・商品Aは10行
・商品Bは12行
・商品Cは8行
・・・・・
と商品毎に連続する商品名の行範囲は変化をしている。
そしてそれぞれの商品によるB列の値も変化がある。
けどB列と同行のC列はそのままで、B列を『”迄”から”開始数”に書き換えたい』。
と思ってたのですけど。
商品名欄への記載を複数にしておいたらわかりやすかったような。
ご協力頂いているにも関わらず、大変ご連絡が遅くなり申し訳ございません。
商品毎に行数はランダムです。
見る限り1行の商品から8行も商品もあります。
>そしてそれぞれの商品によるB列の値も変化がある。
けどB列と同行のC列はそのままで、B列を『”迄”から”開始数”に書き換えたい』。
その通りです。
>商品名欄への記載を複数にしておいたらわかりやすかったような。
申し訳ございません。
補足に追加いたします。
No.14
- 回答日時:
補足要求です。
1.同じ商品は必ず1つのかたまりになっていますか。
添付図の左側のようになっていれば、問題ありませんが、右側のようになってるケースは
ありませんか。
(商品A、商品Bの黄色のセルのように、元の商品のかたまりからはずれているケース)
2.B列の個数は、必ず、昇順に並んでますか。
3.数値を変換すると必ず1行が追加されますが、
追加された1行のC列の金額は、必ず0円でよろしいでしょうか。
あなたの提示した例の、
A5:商品A B5:101 C5:0
に相当する個所です。
上記以外の行は、元のC列の金額をそのまま採用します。
4.提示された例では1行目からデータが始まっていますが、
通常は1行目は見出しで、2行目からデータが始まります。
1行からデータが始まるということで間違いないでしょうか。
5.シート名が明示されていないので、
元のデータのシート名を"Sheet1"として、変換した結果を"Sheet2"に出力しますが
それで良いでしょうか。
大変、返信が遅くなり申し訳ございませんでした。
片手間で出来る内容では無いのですが、片手間な物でいちいち遅れが生じてしまいます。
回答
1.右になり、1行の商品もあれば8行の商品もあります
2.並び変えています
3.0でOKです
4.修正可能ですので、1で問題ありません
5.修正可能ですので、sheet1、sheet2で問題ありません
ご協力ありがとうございます。
No.15
- 回答日時:
No.14様へ
先日は勘違いにご指南頂きありがとうございました。
でも回答した内容として
・まず割り切れるか否かの判定
・その結果による処理の分岐
を掲げていたので、1つ余るとかはあり得ないと初級レベルは思いましたが再現処理をされた結果、きっとそう出たのでしょうね。
こちらは検証なしでの回答でしたから。
今回の件につきましてもですがシート名って具体的に必要な物なのでしょうか?と度々感じます。
特に今回はシステムが吐き出したCSVファイルをExcelで開いているので、特定のファイル名にならない可能性もあると感じますが如何でしょう?
No.16
- 回答日時:
めぐみん_様
先日の回答の件は、こちらで検証した結果、余りが出ること検証済みです。
今回の件ですが、シートが1つでたりるなら、シート名は不要かと思います。その場合は、結果をH,I,J列等に出力することになるかと思いますが。
変換後の数値をCSV形式に戻すかどうかはわかりませんが、
もし、もどすなら、変換結果は、別シートの方が良いと考えました。
そのため、入力用シートと出力用シートを指定させたほうがよいと考えた次第です。
質問者の方から、同じシート内に変換結果を出力したいという要望が出されれば、特にシート名を指定する必要はないか思います。
ただ、個人的には、シート名を指定せず、アクティブシートを直接更新するマクロは、間違って別のシートをひらいた状態で、そのマクロを実行すると、そのシートが破壊されてしまう危険があるので、なるべく避けたいと考えています。
No.17
- 回答日時:
めぐみん_様
追伸:
>特に今回はシステムが吐き出したCSVファイルをExcelで開いているので、特定のファイル名にならない可能性もあると感じますが如何でしょう?
1回きりの作業なので、マクロのあるエクセルファイルに、CSVファイルを取り込み、その取り込んだシートのシート名をSheet1に修正後、マクロを実行してもらうつもりでいます。そうすれば、特に問題ないと考えますがいかがでしょうか。
No.18
- 回答日時:
No.16様
余談ですが。
割り切れるか否かとは、確か4000だと目的とは違う回答が出るとか記憶してます。
なので割り切れたら余計な方は0を入れれば良いと書いたかな?
割り切れない(余りが1になる4001の場合)時は既に作成してたループへと進ませる。
即ち剰余が0であればループ処理の必要はないのでは?と言う意味で書いたつもりでしたがちょっと説明不足していたのかもですね。
シート名については同じ処理を予測してますが(既に取り込んで一部処理はされてる感じ?)、シート名ではなくシートインデックスで行なうと気にしなくていいかなと感じました。
余談なのでまた削除されるかもですが・・・
めぐみん様。
この度は、本当にご協力頂きまして、心より感謝致します。
また昨晩から返信が出来なった事に、お詫び申し上げます。
何とか、tatsumaru77様のご協力により解決する事ができたのも、めぐみん様が色々とお考え頂き投稿して頂いた結果だと思います。
何もかも、自分の至らなさがお恥ずかしい限りです。
余談でも、悩める私にとっては考えて頂いている十分に励みになりました。
また機会があれば、何卒宜しくお願い致します。
No.19
- 回答日時:
No14です。
補足ありがとうございました。
>1.右になり、1行の商品もあれば8行の商品もあります
>2.並び変えています
そうすると、一旦、商品名(昇順)、個数(昇順)で並び替えをしてから、
処理することになります。
並び替えはマクロで行います。
そうすると、
①Sheet1は並び替えた結果になる。したがって、並び替え前のデータを残しておきたいなら、予め、他のシート等にバックアップをしておく必要がある。
②Sheet2は、商品名が昇順に並び替えた結果で出力される。
ということになりますが、よろしいでしょうか。
No.20
- 回答日時:
めぐみん_様
前回の件については、ここで議論するのは質問者のかたに失礼になるので、
もし、きちんと議論されたいのでしたら、あらたに質問をおこしていただけませんでしょうか。その質問について、納得行くまで回答したします。
シートインデックスを使用して、入力用と出力用のシートを区別する方法もありますが、その場合は、左側から1番目が○○用、2番目が●●用
と決めておく必要があり、これを質問者に告知しておく必要があります。
今回の場合、左側から1番目が入力用、2番目が出力用としておけば、
良いことになりますが、頻度が多くないので、Sheet1,Sheet2の方がシンプルと考えました。
お探しの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
-
エクセルの列の限界は255列以上...
-
VBAで繰り返しコピーしながら下...
-
【VBA】複数のシートの指定した...
-
SUMPRODUCTにて別シートのデー...
-
VLOOKアップ関数の結果の...
-
エクセルの複数シートにあるデ...
-
Excel VBA ピボットテーブルに...
-
エクセル マクロ 標準モジュー...
-
【条件付き書式】countifsで複...
-
ある数値に対して、値を返す数...
-
Excel の複数シートの列幅を同...
-
エクセルで横並びの複数データ...
-
エクセル 日報売上を月報に展開...
-
スプレッドシートでindexとIMPO...
-
【VBA】ピボットテーブルを既存...
-
【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
大変見にくくてすみません。