マクロ勉強初めて1週間の初心者です。(エクセル自体あまり堪能ではないです)
正月の休みを利用して在庫管理表を作りたいのですが、困っています。ご教授お願いします。
いまやりたいことは
「発注リストシート」内の発注数を商品毎に合計して「在庫リストシート」の発注数セルに記入したい、です。
発注リストシート
発注番号 商品名 発注数・・・
27-1 A 10
27-2 B 20
27-3 C 30
27-4 A 40
27-5 A 50
在庫リストシート
商品番号 商品名 発注数・・・
1 A 100
2 B 20
3 C 30
としたいです。
自分なりにした事は、発注リストシートの商品名と発注数を変数(shouhin,hattyuusuu)にして、商品名が合致したら発注数を足してから在庫リストシートに記入しなさい、としました。
Sub 発注()
'発注数と商品名を変数にする
Dim hattyuusuu1 As Integer
hattyuusuu1 = [C3].Value
Dim shouhin1 As String
shouhin1 = [B3].Value
Dim hattyuusuu2 As Integer
hattyuusuu2 = [C4].Value
Dim shouhin2 As String
shouhin2 = [B4].Value
Dim hattyuusuu3 As Integer
hattyuusuu3 = [C5].Value
Dim shouhin3 As String
shouhin3 = [B5].Value
Dim hattyuusuu4 As Integer
hattyuusuu4 = [C6].Value
Dim shouhin4 As String
shouhin4 = [B6].Value
Dim hattyuusuu5 As Integer
hattyuusuu5 = [C7].Value
Dim shouhin5 As String
shouhin5 = [B7].Value
'カレントシートを在庫リストに変更
Worksheets("在庫リスト").Activate
'発注数削除
Range("C3:C5").Select
Selection.ClearContents
'発27-1列の実行
If shouhin1 = "A" Then
[C3].Value = hattyuusuu1 + [C3]
ElseIf shouhin1 = "B" Then
[C4].Value = hattyuusuu1+ [C4]
ElseIf shouhin1 = "C" Then
[C5].Value = hattyuusuu1 + [C5]
Else
End If
'発27-2列の実行
If shouhin2 = "A" Then
[C3].Value = hattyuusuu2 + [C3]
ElseIf shouhin2 = "B" Then
[C4].Value = hattyuusuu2+ [C4]
ElseIf shouhin2 = "C" Then
[C5].Value = hattyuusuu2 + [C5]
Else
End If
'発27-3列の実行
If shouhin3 = "A" Then
[C3].Value = hattyuusuu3 + [C3]
ElseIf shouhin1 = "B" Then
[C4].Value = hattyuusuu3+ [C4]
ElseIf shouhin1 = "C" Then
[C5].Value = hattyuusuu3 + [C5]
Else
End If 27-5列まで繰り返す...
End Sub
このように発注番号の数だけ繰り返すのは初心者とはいえ、あまりにもマクロ機能を無駄にしていると思えるので、「繰り返し処理」を利用できないかと考えているのですがどのようにしたらいいかがわかりません。
Do loop 文 あるいは For Next 文というのを見つけましたがどのように使ったらいいのでしょうか。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
こんにちは!
今回の質問に関してはワークシート関数のSUMIF関数が一番簡単だと思います。
両Sheetとも1行目が項目行でデータはA2セル以降にあるとすると
「在庫リスト」SheetのC2セルに
=SUMIF(発注リスト!B:B,B2,発注リスト!C:C)
という数式を入れフィルハンドルでダブルクリック!
これで完了です。
どうしてもVBAでやりたい!というコトであればワークシート関数がそのまま使えますので
Sub Sample1()
Dim lastRow As Long, wS As Worksheet
With Worksheets("在庫リスト")
lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
With Range(.Cells(2, "C"), .Cells(lastRow, "C"))
.Formula = "=SUMIF(発注リスト!B:B,B2,発注リスト!C:C)"
.Value = .Value
End With
End With
End Sub
でも大丈夫だと思います。
For~NextでループさせるにしてもSUMIF関数を使った方が簡単です。
Sub Sample2()
Dim i As Long, wS As Worksheet
Set wS = Worksheets("在庫リスト")
With Worksheets("発注リスト")
For i = 2 To wS.Cells(Rows.Count, "B").End(xlUp).Row
wS.Cells(i, "C") = WorksheetFunction.SumIf(.Range("B:B"), wS.Cells(i, "B"), .Range("C:C"))
Next i
End With
End Sub
こんな感じでしょうか。
※ 非効率な方法(おススメしません)
両Sheetともそれぞれを最終行までループさせる方法。
人それぞれで色んなやり方があると思います。m(_ _)m
ありがとうございます!出来ました!
第1段階突破です!
どうしてもVBA使いたいのではなく、数値が出ればいいんです。
でも関数でできると思わず、VBAの本を買ってしまいました。
エクセル関数の本を買ったほうが良さそうですね。
恥ずかしながら関数も加減剰余しかしてなくて...。
フィルハンドルでWクリックというのが、? ですがSUMIFでなんとかできました。
とりあえず発注して、納品されて、出荷する、の結果在庫数が計算されました。
これで7割出来上がりです。
あとは注文書とか納品書とか、いろいろ連動できればなぁ...と夢見てます(笑)
No.3
- 回答日時:
No.1です。
>フィルハンドルでWクリックというのが、? ですが・・・
基本的な操作なので以下のコトをやってみてください。
「在庫リスト」のC2セルに数式が入っているとすると
C2セルの右下にマウスポインタを移動させます。
小さな■のマーク(フィルハンドル)になりますので、そこで下へドラッグしてください。
これがオートフィルの操作になります。
この操作をデータが入っている両隣りの隣接する列(どちらか最大行)の最終行までオートフィルの操作を一気にやる場合は
先ほどのフィルハンドルでダブルクリックします。
これで最終行まで数式が入ります。m(_ _)m
ありがとうございます。
■マークを出してドラッグしてコピー、はやってました。
でも、それを「フィルハンドル」と呼ぶのは知りませんでしたし、Wクリックで一気にコピー!も初めて知りました。
ドラッグしながら下にコピーをたくさんするのは大変だったんです。
重ね重ねありがとうございました。
No.2
- 回答日時:
在庫に関する考え方ですが、tom04さんが仰る様に
SumIf関数を使うのが一般的です。考え方は
入荷数の合計ー出荷数の合計=現在の在庫
と考えてください。
それと、一応、VBAの勉強と云う事で
Sub Sheet3_ボタン1_Click()
With Sheets("発注リスト")
For i = 2 To .Range("B" & Rows.Count).End(xlUp).Row
shouhin = .Range("B" & i).Value
Columns("B:B").Find(What:=shouhin, LookAt:=xlWhole).Offset(0, 1).Value = Columns("B:B").Find(What:=shouhin, LookAt:=xlWhole).Offset(0, 1).Value + .Range("C" & i).Value
Next
End With
End Sub
を、在庫のシートの発注数を手動で一旦クリアしてから実行してみてください。
For i = 2 To .Range("B" & Rows.Count).End(xlUp).Row
で、発注リストの2行目から、B列のデータが入っている最後の行まで繰り返し。
Columns("B:B").Find(What:=shouhin, LookAt:=xlWhole).Offset(0, 1).Value
検索の機能を使って、商品名を検索して、一つ左へ移動したセルの値を
と云った感じで実行します。
ありがとうございます。
今の自分の能力ではちょっと理解するのが困難ですが、ひとつひとつ噛み砕きながらやってみます。
For Next文では出来ないかと思いましたが、できるんですね...。
がんばってみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) ExcelVBA No.を自動連番で設定をしながらデータ入力をしたい 2 2022/08/03 18:19
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご発注ありがとうございます...
-
中3日の意味
-
エクセル ①上下にタイトル行を...
-
見積書兼発注書の書き方
-
コリンズの登録期間に関すること
-
単価単位、発注単位、発注入数...
-
Excelで別シートへ自動入力
-
フォーキャストって何ですか?
-
Access 実行時エラー’3079’が解...
-
Excel 関数 vlookupなどの使い...
-
「お打ち合わせの件につきまし...
-
TECRISコードについて
-
パレット表記 1000×500と記載 ...
-
IP発注
-
カートンという単位
-
決算時の消費税の精算について
-
掛け率について教えて下さい
-
製造業ですが、廃棄処分(資材...
-
中国語で商品マスタはどう表現...
-
在庫月数の求め方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご発注ありがとうございます...
-
中3日の意味
-
エクセル ①上下にタイトル行を...
-
見積書兼発注書の書き方
-
単価単位、発注単位、発注入数...
-
フォーキャストって何ですか?
-
Access 実行時エラー’3079’が解...
-
IP発注
-
コリンズの登録期間に関すること
-
「お打ち合わせの件につきまし...
-
セブンイレブンの発注で ソフト...
-
セブンイレブン追加発注につい...
-
明日仕事に行くの怖いです。発...
-
Excelの式を教えてください
-
土木設計で、段切りの設計について
-
コンビニ専用の商品(OEM)って...
-
POって何の意味ですか?
-
未加工品流出→対策
-
「発注書が"浮いてる」の"浮い...
-
工場内のダンボール箱管理手法...
おすすめ情報