プロが教える店舗&オフィスのセキュリティ対策術

教えて下さい。現在、商品をデータベースで管理しているのですが、システム変更をしようと思っており、新しいシステムの方式にデータを書き換えなければなりません。
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の使い方はわかりますが、書き込むレベルではありません。
もしコードを書くことができるのであれば、コピーさせて頂き作業をさせて頂けますでしょうか。
無茶な話かも知れませんが、何卒宜しくお願い致します。

質問者からの補足コメント

  • へこむわー

    誤字がありました。
    B5は101となり、商品Aは101個から0円設定となります。
    また全体量は数万行あり、B列の数量は1~数万の範囲でランダムで記載。
    法則性はなく、文章を読みとり、捉え方は変えてこれを数字に返す みたいな事しか、自分の頭では出てきません。

      補足日時:2021/09/30 15:35
  • スクショ画像の添付が、なぜかアップできずに、実際のデータ値だけを記載しました。
    今回の質問に関連の無い、得意先コード、名称、商品コードなどは省いております。
    シート名は変更できますので指定しません。

    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

    大変見にくくてすみません。

      補足日時:2021/10/01 18:55

A 回答 (23件中11~20件)

数百行程度ってなら出来るでしょうけど、数十万行となるとフリーズでボンが怖いですしね。


結局セル値を変数Xに、変数Xの値に+1、次のセルの値を別の変数Yに、『次のセルの値』に『変数Xの値に+1』を書き入れる。
みたいなのを商品名(?)毎に行なう感じなのかな?
無論最初に現れた連続する商品名のB列には変数にセル値をいれたら、セルに1を入れておく。

初級レベルなジジィにはこんな地味な方法しかわからないけど、超鈍行でしょうね。フリーズするかも。
    • good
    • 1

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の基本操作を今一度覚えるようにしてみましょう。
今ならどうやれば効率よく作業ができるのか理解できるでしょうから、
難しいと思う事もないでしょう。
それどころか、「これ使ってみたい!!」と思う事がいっぱいだろうと思います。
    • good
    • 1
この回答へのお礼

銀鱗 様。
この度は本当にご協力頂きまして、ありがとうございました。
無事に解決する事ができました事を、ご報告させて頂きます。
自分の情報量の少なさとスキルの無さを、あたらめて実感しました。

>それどころか、「これ使ってみたい!!」と思う事がいっぱいだろうと思います。
私も同感であります。
難しいから、勉強し、習得した際の達成感は病みつきになりますよね(笑)
コツコツとですが、少しでもこの様な回答が出来る様に日々精進して参ります。

本当にありがとうございました

お礼日時:2021/10/01 21:15

あれ?


私勘違いしているのかな?

仮に商品A・商品B・商品C・・・・・とあったとして、
・商品Aは10行
・商品Bは12行
・商品Cは8行
・・・・・
と商品毎に連続する商品名の行範囲は変化をしている。

そしてそれぞれの商品によるB列の値も変化がある。
けどB列と同行のC列はそのままで、B列を『”迄”から”開始数”に書き換えたい』。

と思ってたのですけど。
商品名欄への記載を複数にしておいたらわかりやすかったような。
    • good
    • 1
この回答へのお礼

ご協力頂いているにも関わらず、大変ご連絡が遅くなり申し訳ございません。
商品毎に行数はランダムです。
見る限り1行の商品から8行も商品もあります。

>そしてそれぞれの商品によるB列の値も変化がある。
けどB列と同行のC列はそのままで、B列を『”迄”から”開始数”に書き換えたい』。
 
その通りです。

>商品名欄への記載を複数にしておいたらわかりやすかったような。
申し訳ございません。

補足に追加いたします。

お礼日時:2021/10/01 17:15

補足要求です。



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"に出力しますが
それで良いでしょうか。
「excelで大量の数字の変換」の回答画像14
    • good
    • 1
この回答へのお礼

大変、返信が遅くなり申し訳ございませんでした。
片手間で出来る内容では無いのですが、片手間な物でいちいち遅れが生じてしまいます。
回答
1.右になり、1行の商品もあれば8行の商品もあります
2.並び変えています
3.0でOKです
4.修正可能ですので、1で問題ありません
5.修正可能ですので、sheet1、sheet2で問題ありません
ご協力ありがとうございます。

お礼日時:2021/10/01 17:10

No.14様へ



先日は勘違いにご指南頂きありがとうございました。
でも回答した内容として
・まず割り切れるか否かの判定
・その結果による処理の分岐
を掲げていたので、1つ余るとかはあり得ないと初級レベルは思いましたが再現処理をされた結果、きっとそう出たのでしょうね。
こちらは検証なしでの回答でしたから。

今回の件につきましてもですがシート名って具体的に必要な物なのでしょうか?と度々感じます。
特に今回はシステムが吐き出したCSVファイルをExcelで開いているので、特定のファイル名にならない可能性もあると感じますが如何でしょう?
    • good
    • 1

めぐみん_様


先日の回答の件は、こちらで検証した結果、余りが出ること検証済みです。

今回の件ですが、シートが1つでたりるなら、シート名は不要かと思います。その場合は、結果をH,I,J列等に出力することになるかと思いますが。

変換後の数値をCSV形式に戻すかどうかはわかりませんが、
もし、もどすなら、変換結果は、別シートの方が良いと考えました。
そのため、入力用シートと出力用シートを指定させたほうがよいと考えた次第です。

質問者の方から、同じシート内に変換結果を出力したいという要望が出されれば、特にシート名を指定する必要はないか思います。
ただ、個人的には、シート名を指定せず、アクティブシートを直接更新するマクロは、間違って別のシートをひらいた状態で、そのマクロを実行すると、そのシートが破壊されてしまう危険があるので、なるべく避けたいと考えています。
    • good
    • 1

めぐみん_様


追伸:
>特に今回はシステムが吐き出したCSVファイルをExcelで開いているので、特定のファイル名にならない可能性もあると感じますが如何でしょう?

1回きりの作業なので、マクロのあるエクセルファイルに、CSVファイルを取り込み、その取り込んだシートのシート名をSheet1に修正後、マクロを実行してもらうつもりでいます。そうすれば、特に問題ないと考えますがいかがでしょうか。
    • good
    • 1

No.16様



余談ですが。

割り切れるか否かとは、確か4000だと目的とは違う回答が出るとか記憶してます。
なので割り切れたら余計な方は0を入れれば良いと書いたかな?
割り切れない(余りが1になる4001の場合)時は既に作成してたループへと進ませる。
即ち剰余が0であればループ処理の必要はないのでは?と言う意味で書いたつもりでしたがちょっと説明不足していたのかもですね。

シート名については同じ処理を予測してますが(既に取り込んで一部処理はされてる感じ?)、シート名ではなくシートインデックスで行なうと気にしなくていいかなと感じました。

余談なのでまた削除されるかもですが・・・
    • good
    • 1
この回答へのお礼

めぐみん様。
この度は、本当にご協力頂きまして、心より感謝致します。
また昨晩から返信が出来なった事に、お詫び申し上げます。
何とか、tatsumaru77様のご協力により解決する事ができたのも、めぐみん様が色々とお考え頂き投稿して頂いた結果だと思います。
何もかも、自分の至らなさがお恥ずかしい限りです。
余談でも、悩める私にとっては考えて頂いている十分に励みになりました。
また機会があれば、何卒宜しくお願い致します。

お礼日時:2021/10/01 21:09

No14です。


補足ありがとうございました。
>1.右になり、1行の商品もあれば8行の商品もあります
>2.並び変えています

そうすると、一旦、商品名(昇順)、個数(昇順)で並び替えをしてから、
処理することになります。
並び替えはマクロで行います。
そうすると、
①Sheet1は並び替えた結果になる。したがって、並び替え前のデータを残しておきたいなら、予め、他のシート等にバックアップをしておく必要がある。
②Sheet2は、商品名が昇順に並び替えた結果で出力される。
ということになりますが、よろしいでしょうか。
    • good
    • 1

めぐみん_様


前回の件については、ここで議論するのは質問者のかたに失礼になるので、
もし、きちんと議論されたいのでしたら、あらたに質問をおこしていただけませんでしょうか。その質問について、納得行くまで回答したします。

シートインデックスを使用して、入力用と出力用のシートを区別する方法もありますが、その場合は、左側から1番目が○○用、2番目が●●用
と決めておく必要があり、これを質問者に告知しておく必要があります。
今回の場合、左側から1番目が入力用、2番目が出力用としておけば、
良いことになりますが、頻度が多くないので、Sheet1,Sheet2の方がシンプルと考えました。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!