• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:同じ名前があれば数値のみ追加、無ければ名前と数値を追加 )

VBAコマンドボタンを使用して在庫を管理する方法

このQ&Aのポイント
  • 花.xlsのシート1には、花の種類と本数が記載されています。VBAのコマンドボタンを押すと在庫.xlsのA列とB列に花の名前を1つにまとめて、合計の本数を書き出します。
  • 質問者は、花2.xlsにも同様の情報があるため、VBAのコマンドボタンをクリックすると在庫.xlsのC列に本数を追加したいと考えています。花の名前がすでに存在する場合は、C列に本数を追加し、存在しない場合はA列に花の名前を追加して本数を書き加えます。
  • 質問者は、watabe007さんのアドバイスを参考にして在庫管理機能を実装しました。具体的な詳細なコードの説明は提供されていませんが、質問者は応用することができると述べています。

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

別案 Private Sub CommandButton1_Click()   Dim sh1 As Worksheet, sh2 As Worksheet   Dim c As Range, myR As Variant   Set sh1 = Workbooks("在庫.xls").Worksheets("Sheet1")   Set sh2 = Workbooks("花2.xls").Worksheets("Sheet1")   For Each c In sh2.Range("A1", sh2.Cells(Rows.Count, "A").End(xlUp))     myR = Application.Match(c.Value, sh1.Columns(1), 0)     If Not IsError(myR) Then       sh1.Cells(myR, "C").Value = sh1.Cells(myR, "C").Value + c.Offset(, 1).Value     Else       With sh1.Cells(Rows.Count, "A").End(xlUp)         .Offset(1).Value = c.Value         .Offset(1, 2).Value = c.Offset(, 1).Value       End With     End If   Next End Sub

その他の回答 (3)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

在庫.xls A列のバラ、ひまわり、欄 と 花2.xls A列のバラ、ひまわり、欄 が違う文字列と処理されています どちらかに スペースなどが入っていませんか?

pcguard55
質問者

お礼

watabe007さん おっしゃるとおり、スペースが入っていました、 そしてスペースを取り除き同じ文字列にすることでうまく行きました。 感動しました。 watabe007さんのコードは大変シンプルでスッキリしてかっこよく見えます。 大変ありがとう御座いました、 心から感謝しています。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

補足説明 在庫.xlsのA列の品名のみ取得します ここでA列に重複する品名があると正しい結果が表示されませんので要注意!!   With Workbooks("在庫.xls").Worksheets("Sheet1")     For Each c In .Range("A1", .Cells(Rows.Count, "A").End(xlUp))       myDic(c.Value) = Empty     Next   End With 在庫.xlsで得た品名に花2.xlsの品名、数量を加算しています。   With Workbooks("花2.xls").Worksheets("Sheet1")     For Each c In .Range("A1", .Cells(Rows.Count, "A").End(xlUp))       myDic(c.Value) = myDic(c.Value) + c.Offset(, 1).Value     Next   End With   With Workbooks("在庫.xls").Worksheets("Sheet1") 在庫.xlsのA列に品名を転記     .Range("A1").Resize(myDic.Count).Value = Application.Transpose(myDic.Keys) 在庫.xlsのC列に数量を転記     .Range("C1").Resize(myDic.Count).Value = Application.Transpose(myDic.Items)   End With オブジェクトmyDicの開放   Set myDic = Nothing

pcguard55
質問者

お礼

watabe007さん 大変お世話になってます! お教え頂いたものを試しているのですが、こちらではうまく行きません。 やっていることは、 花2.xlsに以下の情報が入っています。 A列            B列 カーネーション 6 バラ       2 椿       3 カーネーション 2 欄       6 菊       2 椿       5 ひまわり    9 バラ      3 そして借用させて頂いたVBAのコマンドボタンを付け 在庫.xlsには A列     B列 バラ    7 コスモス 12 ひまわり 5 欄    3 が既に入っています。 ここでコマンドボタンを押すと以下のようになり うまく行きません。 バラ    7 コスモス 12 ひまわり 5 欄    3 カーネーション 8 バラ       2 椿       8 欄       6 菊       2 ひまわり    9 バラ      3 わたしが望んでいるのは、 A列       B列       C列 バラ        7         5 コスモス     12 ひまわり     5      9 欄         3         6  カーネーション         8 椿                  8 菊                  2  のように花の名前が重複することなく既に花xlsにある花の名前があればそのC列に数を記入し、無い名前のものはA列の末尾に花の名前を追加し、そのC列に数を記入していく感じです。 何かこちらのミスがあるのでしょうか? 何卒お付き合いの程お願い致します

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

どうぞ~ Private Sub CommandButton1_Click()   Dim myDic As Object   Dim c As Range   Set myDic = CreateObject("Scripting.Dictionary")   With Workbooks("在庫.xls").Worksheets("Sheet1")     For Each c In .Range("A1", .Cells(Rows.Count, "A").End(xlUp))       myDic(c.Value) = Empty     Next   End With   With Workbooks("花2.xls").Worksheets("Sheet1")     For Each c In .Range("A1", .Cells(Rows.Count, "A").End(xlUp))       myDic(c.Value) = myDic(c.Value) + c.Offset(, 1).Value     Next   End With   With Workbooks("在庫.xls").Worksheets("Sheet1")     .Range("A1").Resize(myDic.Count).Value = Application.Transpose(myDic.Keys)     .Range("C1").Resize(myDic.Count).Value = Application.Transpose(myDic.Items)   End With   Set myDic = Nothing End Sub

関連するQ&A

専門家に質問してみよう