はじめまして。
中小企業の工場で働いている者です。
一月の工場の仕事の負荷を把握したのですが、
何百部品もあり、マンパワーでは把握できそうにありません。
そこで、エクセル(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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAで2~4列目の3行目...
-
WPSOffice_マクロの有効化について
-
VBAで保存しないで閉じると空の...
-
エクセル関数>参照ファイル名...
-
エクセル 図形の寸法を取得したい
-
【Excel VBA】マクロでExcel自...
-
LDPlayerのマクロの編集方法を...
-
Excelでマクロ実行中に画面を固...
-
excelで直前に参照していたブッ...
-
複数のマクロボタンをまとめて...
-
Excel マクロの編集がグレーに...
-
リーグ戦(10チーム2コート)作...
-
VB.net
-
エクセルで空白行を削除する ...
-
数値に見えるものはすべて数値...
-
【マクロ】プリントスクリーン...
-
エクセル ボタンを押すと色が変...
-
エクセルを開いて文字を打つ際...
-
エクセルの、記録を終了したマ...
-
エクセル ボタンに設定したマク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAで2~4列目の3行目...
-
エクセルVBAの配列について
-
VBA初心者です。工場の仕事の負...
-
VBAで保存しないで閉じると空の...
-
WPSOffice_マクロの有効化について
-
Excel マクロの編集がグレーに...
-
エクセル ボタンに設定したマク...
-
エクセル関数>参照ファイル名...
-
エクセル マクロ名にブック名...
-
【Excel VBA】マクロでExcel自...
-
マクロの保存先、開いてるすべ...
-
Excelのマクロでボタンを押すと...
-
エクセルの表を複数枚印刷した...
-
エクセルで、「いいね」のよう...
-
【Excel】マクロの保存先について
-
Excelマクロで、稼働中のマクロ...
-
エクセル;相対パスを絶対パスへ...
-
エクセルの、記録を終了したマ...
-
複数のマクロボタンをまとめて...
-
エクセルでマクロ(Excel 4.0)...
おすすめ情報