アプリ版:「スタンプのみでお礼する」機能のリリースについて

初めて利用させて頂きます。
エクセル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件)

逆にお尋ねしたいのですがなぜシートを


行にしようと考えないのですか?
シートを切り替えての処理はすべてにおいて
面倒で時間もかかり、私なら200件くらいは
1行にして処理していました。
検索にしても1シート上なら圧倒的に簡単に
なると思うのですが。

それに列を挿入って?
一般的な処理は件数が増えるものは
行で対応するものだと思うのですけど。
視覚的にも縦には沢山並べられるから。
    • good
    • 0
この回答へのお礼

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使いこなせるよう努力したいと思います。

お礼日時:2017/06/11 08:28

帳票とか画面とか限られた表示面積で視覚的に必要な情報を


詰め込むという事と、EXCELでの表計算処理とは合致しないのが
普通です。
表計算しやすいように作るという事は、1行目に項目名があって
2行目からがデータというのがEXCELでの標準的な表形式で
当然項目名で列が決まっているから通常、列の挿入というのは
無いことなので、そういう言い方になりました。

入力をどうするかが、最も工夫のいるところですが
帳票をそのまま入力画面とする場合、セル座標とデータでの列との
対応表を別シートに作り、その表に従って転記する、読み出しと
書き込みで逆方向の転記を作っていました。

発注データと商品一覧は、どう考えても一枚で処理すべきものでは
ないとお見受けしますが。
別シート管理で商品コードか何かをキーに引き当てるのが
妥当と思います。
設計時点で1枚のシートのキー(行ごとに必ず異なる引き当てるワード)
を意識することが大事と思います。
    • good
    • 1
この回答へのお礼

yokomaya様
お忙しいところありがとうございます。
私もいろいろとトライしておりますが、おっしゃるとおり1つのファイルでは難しいと思い、処理時間がかっかっても
1クッションか2クッションおいて目的にたどり着けるように考えを変えました。
発注書にはA列に商品コードが来るように手直します。
最悪、VBAでできなければ、=IF(ISERROR(VLOOKUP(A6,sheet1!B:D,3,FALSE)),"",VLOOKUP(A6,sheet1!A:C,3,FALSE))の関数をいれこんで
処理しょうかとも思っています。
また、ご指導いただければ幸いです。

お礼日時:2017/06/13 17:49

>処理時間がかっかっても


これはおそらく逆ですね。今はそう思うかもしれませんが
シートをそれだけ準備していたら、そのうちとんでもなく重くなりますし
多数のシートにまたがって、処理なんてそれだけでもおぞましい。

商品一覧と在庫も本来分けるべきものですね。
基本 在庫は流動するものですから、それに対するINとOUTつまり
入荷と出荷(これらもそれぞれ1件1行の別シート)とで
処理するものと思います。

これが、時間経過とともにどう変動したかを、追いたくなるので
在庫は履歴を残しますね。僕なら。
(棚卸があるなら、月一締めにも貢献してくれるだろうし)

入荷出荷も別シートでそのまま使えば(縦は事実上無限に
使えますから)いつの分でも履歴とれるし。

それに対して商品一覧は新商品の発生と、品番抹消ぐらいしか
変更の機会はないのでは?
勿論入荷が新商品の発生に契機ということはあるかも知れませんが
入荷のシートに商品マスターへの照合と、なかった場合の
登録という感じで準備するものと思います。

>VBAでできなければ
VBAで出来ない事ってEXCELではほとんどないと思いますけど
実際にはEXCELに任せた方が早い事も(開発時間のみならず処理時間さえ)
少なくないので、そこはご随意にと、思います。
    • good
    • 0
この回答へのお礼

yokomaya様
ありがとうございます。
在庫管理(入庫出庫)については、業者につくっていただいたものがあります。
今、私が質問させて頂いているものは、輸入商品で、発注から入荷まで1-3か月かかる性質の商品ため、その間の注文に対する、在庫と、入荷予定からの注文対応を複数スタッフで共有できればと思っているからです。(数名手書きFAX発注の者もいるので、PCでの発注を誘導したいという思いもあります)
最初の質問にも書かしていただきましたが、「入荷待ちの発注書を「フォルダ:発注書」に保存」するのは、発注書を入荷したら入荷済みの発注書に移し、常に入荷待ちのものだけ入れておくようにして、毎日変わる在庫数は業者の作ってくれた在庫システムの在庫数の最新版を商品一覧に反映するようにしてありますので、最新在庫と商品一覧で1シート、メニューで1シート、入荷待ちの発注書が発注枚に1シートで複数を都度最新のものになるようにまでは出来ましたが、在庫数、各注文の(何を幾ついつ入荷を別欄に入力させたい)一覧でつまづいてしまいました、これまではネット検索で、似た命令文を参考にしていくつかのマクロっていうのか?を作ってきたのですが、今回はどれを参考にしてもうまくいかないので、質問させていただいた次第です。
私共は建材の販売と施工が生業なので、発注もさることながら、早朝より現場作業や打ち合わせ、施工図、提案図の作成などもあり、エクセルでのこの作業に時間をさくのは限界がありまして、妥協して関数併用でと思ったりもしています。
私のまとまりのない質問文では、無理かもしれませんが、具体的な命令文などを教えていただけたらありがたいと思っております。

お礼日時:2017/06/14 21:04

なるほど。


サブシステムなわけですね。
既存のメインシステムを補完したいと、ただ開発時間は限られる。
ありがちですねえ。

では、開発そのものよりも、要件の整理に着目しては如何でしょうか?

準備できるデータと、必要な結果(こちらは可能な限り将来を見据えて
)とを
外注できる形をちゃんと整えれば、恐らくですが、(初心者なら数週間は
かかるぐらいの事は)1~2万とかで作成の方を
他人にオークションみたいな感じで依頼できるサイトがあります。

クラウドワークスとかLansers他。そういうことをしたい方は
ごまんと居るので、そっちが得策ではないかと。

ただその時に、丸投げではなく
例えば、共有フォルダーに置くなどは、設定シートの
指定フォルダーを置くセルに記述されたセルに置くとか
自らが状況に応じて改変しやすい様に、どう発注するかが
大切です。

VBAのコードにも行ごとに注釈をつけてもらい、自らやるか
あるいは同様に外注するにしても、次の改変がスムーズに進む様に
しておくことも重要です。仕事は生き物なので、想定しないことが
起きてくるのが常なので。
    • good
    • 0
この回答へのお礼

おかげさまで、昨夜、私の目的の形でできました。
有り難うございます。

お礼日時:2017/06/15 10:51

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