初めて利用させて頂きます。
エクセルVBA初心者です、発注から入荷まで1~2ヶ月の納期の商品を扱っているため、発注書発行から、
入荷待ち一覧のフォームをエクセルVBAにて作ろうとしています。
発注書を保存して、別ファイルで入荷待ち一覧を作るところで、お手上げになっています。
詳しい方、ご教示頂けると幸いです。
(状況)
エクセル2016で作業をしております。
入荷待ちの発注書を「フォルダ:発注書」に保存してあります。
各発注書のブック名、シート名(1枚のみです)は同じ名称にしてあります、商品分類と発注年月日時間分秒でたとえば「日用品170609131545.xlsx」
とういう形で名前がつけられるようにしてあります。
これを別ブックの「入荷予定.xlsm」に「フォルダ:発注書」内の各発注書ブックの各シートをシートごと移動コピーさせて、
「シート:(例)日用品170609131545」などの発注書形式のシートが複数ある形になっております。
他に「シート:メニュー」と、取扱い全商品の商品番号と商品名、在庫数などが入力された「シート:商品一覧」があります。
この「シート:商品一覧」のA列に「商品番号」、B列に「商品名」、C列に「在庫数」、D列に「売価」が入っており、その後U列まで
予約の一覧がずらずら入っております。
複数ある発注書形式の「シート:(例)日用品170609131545」にはA列に「仕分け番号」、B列に「商品番号」、C列に「商品名」、D列に「発注数量」が入力され
各シートの発注品目は通常1から10品目程度となります。
このC列を選択し、Worksheets("商品一覧").Columns("C:C").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove などにて
1列挿入し新たなC列とし、ここにVBAで「シート:商品一覧」A列「商品番号」と「シート:(例)日用品170609131545」B列「商品番号」が一致する、
「シート:商品一覧」新たなC列に、「シート:(例)日用品170609131545」のD列「発注数量」の値を入れ込みたいと思います。
※「シート:(例)日用品170609131545」の類の複数のシートのD列「発注数量」の値を入れ込む処理の度に、
Worksheets("商品一覧").Columns("C:C").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAboveなどにて
新たなC列を追加する繰り返し処理が必要になります。
目的は『「シート:商品一覧」新たなC列に、商品番号の一致する「シート:(例)日用品170609131545」のD列「発注数量」の値を入れ込む』です。
(シート:(例)・・・シートが5シートあれば、当初のC列の「在庫数」はH列になりますがそれは問題ないのではと思っております)
For Next などで「シート:(例)日用品170609131545」などの複数のシートには(Sheet(i)などの変数を付けて繰り返し処理をする形にして
処理には関係しないと思われるシートは If w.Name <> "商品一覧" And w.Name <> "メニュー" Then は例外処理をしました。
ただ、例外処理をした、「シート:商品一覧」には前記した、各シート処理の度に新たなC列を追加しなければならず、例外処理で良いのかわかりません。
このような形で、類似したVBAの参考例を探し、いくつか試してみましたが、どうしてもうまく出来ません、どのようにしたら処理できるのかお教えいただければ幸いです。
正しいのか間違いかわかりませんが、「シート:商品一覧」新たなC列(C2以下に)に 関数=VLOOKUP(A2:A100,日用品1706072104!B:D,3,FALSE)をFXのコピーで入れ込むと、#N/Aエラーだらけ
になりますが、「シート:商品一覧」C列には商品番号の一致がある商品には希望の数値が反映されます。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
逆にお尋ねしたいのですがなぜシートを
行にしようと考えないのですか?
シートを切り替えての処理はすべてにおいて
面倒で時間もかかり、私なら200件くらいは
1行にして処理していました。
検索にしても1シート上なら圧倒的に簡単に
なると思うのですが。
それに列を挿入って?
一般的な処理は件数が増えるものは
行で対応するものだと思うのですけど。
視覚的にも縦には沢山並べられるから。
yokomaya様
早速ありがとうございます。
<シートを行にしようと考えないのですか?>ですが、
「シート:(例)日用品170609131545」の類の複数のシートを1シート1行にするということですか?
5シートあるとすると、1シートに5行に表示させるということですか?
行列を入れ替えて、日用品170609131545(仮)シートの値を
A1に「仕分け番号」、A2「商品番号」、A3「商品番号」、A4「発注数量」
B1に日用品170611102050(仮)B1に「仕分け番号」、B2「商品番号」、B3「商品番号」、C4「発注数量」
の順に行方向に並べるとすると、「シート:商品一覧」のB列の商品名と現C列の在庫数の間に、新C列として「発注数量」をの列を各発注の基づき(発注が3回の場合は
B列商品名、C~Eが各発注の各発注数、Fに在庫数となるので、HLOOK関数などで値を自動入力できますでしょうか?
VBAの経験が浅く、このあたりのバリエーションが頭に浮かんできません。
<それに列を挿入って?>ですが、
目的は『「シート:商品一覧」新たなC列に、商品番号の一致する「シート:(例)日用品170609131545」のD列「発注数量」の値を入れ込む』
(シート:(例)・・・シートが5シートあれば、当初のC列の「在庫数」はH列になりますがそれは問題ないのではと思っております)
なのでシート:商品一覧の1500種ほどある商品番号はあくまで列方向(縦方向)にしたいのです。
なのです。
シートを行にすることについては、私の目的に行きつけるかどうか、実際に試してしみます、アドバイス本当にありがとうございました。
また、他に御気付の事ありましたらご教示いただけると幸いです。
やりはじめましたエクセルVBA使いこなせるよう努力したいと思います。
No.2
- 回答日時:
帳票とか画面とか限られた表示面積で視覚的に必要な情報を
詰め込むという事と、EXCELでの表計算処理とは合致しないのが
普通です。
表計算しやすいように作るという事は、1行目に項目名があって
2行目からがデータというのがEXCELでの標準的な表形式で
当然項目名で列が決まっているから通常、列の挿入というのは
無いことなので、そういう言い方になりました。
入力をどうするかが、最も工夫のいるところですが
帳票をそのまま入力画面とする場合、セル座標とデータでの列との
対応表を別シートに作り、その表に従って転記する、読み出しと
書き込みで逆方向の転記を作っていました。
発注データと商品一覧は、どう考えても一枚で処理すべきものでは
ないとお見受けしますが。
別シート管理で商品コードか何かをキーに引き当てるのが
妥当と思います。
設計時点で1枚のシートのキー(行ごとに必ず異なる引き当てるワード)
を意識することが大事と思います。
yokomaya様
お忙しいところありがとうございます。
私もいろいろとトライしておりますが、おっしゃるとおり1つのファイルでは難しいと思い、処理時間がかっかっても
1クッションか2クッションおいて目的にたどり着けるように考えを変えました。
発注書にはA列に商品コードが来るように手直します。
最悪、VBAでできなければ、=IF(ISERROR(VLOOKUP(A6,sheet1!B:D,3,FALSE)),"",VLOOKUP(A6,sheet1!A:C,3,FALSE))の関数をいれこんで
処理しょうかとも思っています。
また、ご指導いただければ幸いです。
No.3
- 回答日時:
>処理時間がかっかっても
これはおそらく逆ですね。今はそう思うかもしれませんが
シートをそれだけ準備していたら、そのうちとんでもなく重くなりますし
多数のシートにまたがって、処理なんてそれだけでもおぞましい。
商品一覧と在庫も本来分けるべきものですね。
基本 在庫は流動するものですから、それに対するINとOUTつまり
入荷と出荷(これらもそれぞれ1件1行の別シート)とで
処理するものと思います。
これが、時間経過とともにどう変動したかを、追いたくなるので
在庫は履歴を残しますね。僕なら。
(棚卸があるなら、月一締めにも貢献してくれるだろうし)
入荷出荷も別シートでそのまま使えば(縦は事実上無限に
使えますから)いつの分でも履歴とれるし。
それに対して商品一覧は新商品の発生と、品番抹消ぐらいしか
変更の機会はないのでは?
勿論入荷が新商品の発生に契機ということはあるかも知れませんが
入荷のシートに商品マスターへの照合と、なかった場合の
登録という感じで準備するものと思います。
>VBAでできなければ
VBAで出来ない事ってEXCELではほとんどないと思いますけど
実際にはEXCELに任せた方が早い事も(開発時間のみならず処理時間さえ)
少なくないので、そこはご随意にと、思います。
yokomaya様
ありがとうございます。
在庫管理(入庫出庫)については、業者につくっていただいたものがあります。
今、私が質問させて頂いているものは、輸入商品で、発注から入荷まで1-3か月かかる性質の商品ため、その間の注文に対する、在庫と、入荷予定からの注文対応を複数スタッフで共有できればと思っているからです。(数名手書きFAX発注の者もいるので、PCでの発注を誘導したいという思いもあります)
最初の質問にも書かしていただきましたが、「入荷待ちの発注書を「フォルダ:発注書」に保存」するのは、発注書を入荷したら入荷済みの発注書に移し、常に入荷待ちのものだけ入れておくようにして、毎日変わる在庫数は業者の作ってくれた在庫システムの在庫数の最新版を商品一覧に反映するようにしてありますので、最新在庫と商品一覧で1シート、メニューで1シート、入荷待ちの発注書が発注枚に1シートで複数を都度最新のものになるようにまでは出来ましたが、在庫数、各注文の(何を幾ついつ入荷を別欄に入力させたい)一覧でつまづいてしまいました、これまではネット検索で、似た命令文を参考にしていくつかのマクロっていうのか?を作ってきたのですが、今回はどれを参考にしてもうまくいかないので、質問させていただいた次第です。
私共は建材の販売と施工が生業なので、発注もさることながら、早朝より現場作業や打ち合わせ、施工図、提案図の作成などもあり、エクセルでのこの作業に時間をさくのは限界がありまして、妥協して関数併用でと思ったりもしています。
私のまとまりのない質問文では、無理かもしれませんが、具体的な命令文などを教えていただけたらありがたいと思っております。
No.4
- 回答日時:
なるほど。
サブシステムなわけですね。
既存のメインシステムを補完したいと、ただ開発時間は限られる。
ありがちですねえ。
では、開発そのものよりも、要件の整理に着目しては如何でしょうか?
準備できるデータと、必要な結果(こちらは可能な限り将来を見据えて
)とを
外注できる形をちゃんと整えれば、恐らくですが、(初心者なら数週間は
かかるぐらいの事は)1~2万とかで作成の方を
他人にオークションみたいな感じで依頼できるサイトがあります。
クラウドワークスとかLansers他。そういうことをしたい方は
ごまんと居るので、そっちが得策ではないかと。
ただその時に、丸投げではなく
例えば、共有フォルダーに置くなどは、設定シートの
指定フォルダーを置くセルに記述されたセルに置くとか
自らが状況に応じて改変しやすい様に、どう発注するかが
大切です。
VBAのコードにも行ごとに注釈をつけてもらい、自らやるか
あるいは同様に外注するにしても、次の改変がスムーズに進む様に
しておくことも重要です。仕事は生き物なので、想定しないことが
起きてくるのが常なので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- Excel(エクセル) Excel 関数 vlookupなどの使い方について質問です。 シート1に品番、商品名、単価、発注条 6 2022/06/15 19:16
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) VBAで同フォルダ内の別ブックを開かず参照して条件の一致する行の指定セルを抽出するには? 1 2022/07/21 19:29
- Excel(エクセル) Excel関数 情報引用する方法 4 2022/07/31 20:59
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
関連するカテゴリから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 複数のシートの同じ場所...
おすすめ情報