
はじめまして。
中小企業の工場で働いている者です。
一月の工場の仕事の負荷を把握したのですが、
何百部品もあり、マンパワーでは把握できそうにありません。
そこで、エクセル(2010)のリストよりVBAを使って解決したいのですが、
VBA初心者の私にはプログラムを作れそうにありません。
誰かお力添え頂けませんでしょうか。
●リスト1に部品毎に負荷(作業時間h)が分かっています。
A B C
1 部品名 注番 負荷(作業時間)
2 部品ア イ 2
3 部品ウ 0.06
4 部品 0.005
・ ・ ・
・ ・ ・
・ ・ ・
●リスト2にその月の受注部品の一覧があります。
A B C
1 部品名 注番 負荷(作業時間)
2 部品ア イ
3 部品カ キ
4 部品
・ ・
・ ・
マクロを実行すると、
リスト2の部品ア、注番イを、リスト1から検索し、その行のC列の負荷(作業時間)を
リスト2の部品ア、注番イのC列に張り付ける。
次は、3行目、次は4行目その次は・・・と繰り返すプログラムを組みたいと思っております。
新規の部品は、リスト2にあって、リスト1にない場合もありますので、
その場合は、-で表示したいと思っております。
誰か、このVBA初心者にお力添えください。
よろしくお願いいたします。
ちなみに、ここまでは、できています。
Public Sub 負荷一覧作成()
Dim sh1, sh2 As Worksheet
Dim maxRow1 As Long
Dim maxRow2 As Long
Dim row As Long
Dim dicT As Object '連想配列(部品名の記憶)
Dim key As Variant
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
Set sh1 = Worksheets("Sheet1") ' リスト1のシート名
Set sh2 = Worksheets("Sheet2") ' リスト2のシート名
maxRow1 = sh1.Cells(Rows.Count, 1).End(xlUp).row ' 最終行を求める
maxRow2 = sh2.Cells(Rows.Count, 1).End(xlUp).row ' 最終行を求める
'部品一覧を作成し、部品ごとの時間を記憶する
For row = 2 To maxRow1
key = sh1.Cells(row, 1).Value
dicT(key) = sh1.Cells(row, 2).Value
Next
'部品毎の時間を検索し設定する
For row = 2 To maxRow2
key = sh2.Cells(row, 1).Value
'部品一覧にこの部品があれば、その時間を設定
If dicT.exists(key) = True Then
sh2.Cells(row, 2).Value = dicT(key)
Else
'なければ、"-"を設定する
sh2.Cells(row, 2).Value = "-"
End If
Next
MsgBox ("処理完了")
End Sub

No.2ベストアンサー
- 回答日時:
以下のようにしてください。
--------------------------------------------------------------
Public Sub 負荷一覧作成()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim maxRow1 As Long
Dim maxRow2 As Long
Dim wrow As Long
Dim dicT As Object '連想配列(部品名の記憶)
Dim key As Variant
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
Set sh1 = Worksheets("Sheet1") ' リスト1のシート名
Set sh2 = Worksheets("Sheet2") ' リスト2のシート名
maxRow1 = sh1.Cells(Rows.Count, 1).End(xlUp).row ' 最終行を求める
maxRow2 = sh2.Cells(Rows.Count, 1).End(xlUp).row ' 最終行を求める
'部品一覧を作成し、部品名+注番毎の時間を記憶する
For wrow = 2 To maxRow1
key = sh1.Cells(wrow, 1).Value & "|" & sh1.Cells(wrow, 2).Value
dicT(key) = sh1.Cells(wrow, 3).Value
Next
'部品名+注番毎の時間を検索し設定する
For wrow = 2 To maxRow2
key = sh2.Cells(wrow, 1).Value & "|" & sh2.Cells(wrow, 2).Value
'部品一覧にこの部品があれば、その時間を設定
If dicT.exists(key) = True Then
sh2.Cells(wrow, 3).Value = dicT(key)
Else
'なければ、"-"を設定する
sh2.Cells(wrow, 3).Value = "-"
End If
Next
MsgBox ("処理完了")
End Sub
No.1
- 回答日時:
Dim ですが、確かに変数を , で繋げて宣言できますが、変数ごとに型を書かないと、variant 型での宣言になります。
Dim sh1, sh2 As Worksheet の場合は sh1 は variant 型宣言しています。
Public Sub 負荷一覧作成()
Dim sh1 as worksheet, sh2 As Worksheet
Dim maxRow1 As Long, maxRow2 As Long, RowIndex As Long, SearchIndex as Long
Dim PartsNameArray() as variant, PartNumberArray() as Variant
Set sh1 = Worksheets("Sheet1") ' リスト1のシート名
Set sh2 = Worksheets("Sheet2") ' リスト2のシート名
maxRow1 = sh1.Cells(Rows.Count, 1).End(xlUp).row ' 最終行を求める
maxRow2 = sh2.Cells(Rows.Count, 1).End(xlUp).row ' 最終行を求める
PartsNameArray() = Range(sh1.cells(2, 1), sh1.cells(maxrow1, 1))
PartsNumberArray() = Range(sh1.cells(2, 2), sh1.cells(maxrow1, 2))
For RowIndex = 2 to maxRow2
For SearchIndex = 2 to maxRw1
if sh1.cells(SearchIndex, 1) = sh2.cells(RowIndex, 1) and sh1.cells(SearchIndex, 2) = sh2.cells(RowIndex, 2) then
sh2.cells(RowIndex, 3) = sh1.cells(SearchIndex)
exit for
endif
next searchindex
next RowIndex
MsgBox ("処理完了")
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでPDFを作成する際、同じ名...
-
エクセルに張り付けた写真のフ...
-
vba 空のデータをSplitする時の...
-
【VB.NET】App.configにファイ...
-
phpのファイルがブラウザで開か...
-
VB.NET Excelを読み込んでDataT...
-
firefoxのfont sizeを変更したい
-
離れた事務所間でLAN
-
VB.NET 2017の勉強中です。 今...
-
エクセルのファイル名をコピー...
-
Excelでボタン(フォームコント...
-
連想配列を配列に格納したいで...
-
C#からvbsを実行したい
-
ffftpでファイル取得が0バイト...
-
【VB.NET】Excelの最終行までの...
-
aspxをhtmlに変換する方法について
-
asp.netにてgridviewの列を動的...
-
VBAのRegExpで後方一致/不一致...
-
PS4で、「バージョン5.05以上の...
-
Windowsで複数のファイルを同じ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAで2~4列目の3行目...
-
エクセルVBAの配列について
-
エクセルVBAでセルの値と同じシ...
-
VBAで保存しないで閉じると空の...
-
WPSOffice_マクロの有効化について
-
Excel マクロの編集がグレーに...
-
エクセル関数>参照ファイル名...
-
【Excel VBA】マクロでExcel自...
-
複数のマクロボタンをまとめて...
-
エクセル ボタンに設定したマク...
-
エクセルのvbaにて thisworkboo...
-
マクロの保存先、開いてるすべ...
-
エクセルでマクロ(Excel 4.0)...
-
エクセル マクロ名にブック名...
-
Excelのマクロでボタンを押すと...
-
エクセル;相対パスを絶対パスへ...
-
Excelマクロで、稼働中のマクロ...
-
エクセルの、記録を終了したマ...
-
エクセルで、「いいね」のよう...
-
エクセルの表を複数枚印刷した...
おすすめ情報