Excelにて、ブックから別ブックの行と列の交わった条件へ転記する際のVBAコードが分かりませんどうかご教授願います。
<詳細>
転記先のシートが、2シートから5シートヘとなり3シート追加され、現在のVBAコードの何処をどのように追加して良いのか分からず困っています。
・転記元 ブック名⇒サンプル転記4.xism シート名⇒データーリスト
・転記先 ブック名⇒PB.xls シート名⇒Aと B の二つのシートプラス C工程,D工程,E工程の3つのシートが追加となりました。
(セルには空欄あり)
転記元の基本データー表(サンプル転記4.xism)シート名(データーリスト)D列の部品番号と、別ブック(PB.xls)の、各シートのA列の部品番号と合致して、尚且つ 1行目の日付(1~31)と交差したところへ(データーリスト)F列の数量転記したい。※ 日付はH列(8列目)以降に有るとしています。
今回追加となった3つのシートを含め、5つのシートを検索し合致データーを探す。(空セル有り)
※添付写真の上が、サンプル転記4.xism シート名⇒データーリスト
※添付写真下が、PB.xls シート名⇒A,B,C工程,D工程,E工程
添付写真から例えば、日付が1日で、C43R010 の部品番号があり、(データーリスト)D列の部品番号と、別ブック(PB.xls)の、各シートのA列の部品番号と合致して、尚且つ、(PB.xls)の1行目の日付(1~31)と交差したところへ(データーリスト)F列の数量転記したい。
説明がうまくありませんが、お分かりになる方、ご教授のほどよろしくお願いします。
Sub Sample()
Dim A列 As Long
Dim B列 As Long
Dim 行 As Long
Dim 位置 As Long
Dim 終 As Long
Dim A辞書 As New Dictionary
Dim B辞書 As New Dictionary
Dim D辞書 As New Dictionary
Workbooks.Open Filename:=ThisWorkbook.Path & "\PB.xls"
Sheets("A").Select
For A列 = 8 To Cells(1, Columns.Count).End(xlToLeft).Column
If Cells(1, A列).Value = Day(Date) Then Exit For
Next
For 行 = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If A辞書.Exists(Cells(行, 1).Value) = False Then
A辞書.Add Cells(行, 1).Value, 行
End If
Next
Sheets("B").Select
For B列 = 8 To Cells(1, Columns.Count).End(xlToLeft).Column
If Cells(1, B列).Value = Day(Date) Then Exit For
Next
For 行 = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If B辞書.Exists(Cells(行, 1).Value) = False Then
B辞書.Add Cells(行, 1).Value, 行
End If
Next
Windows("サンプル転記4.xlsm").Activate
Sheets("データーリスト").Select
For 行 = 3 To Cells(Rows.Count, 4).End(xlUp).Row
If D辞書.Exists(Cells(行, 4).Value) = False Then
D辞書.Add Cells(行, 4).Value, Cells(行, 6).Value
位置 = 位置 + 1
End If
Next
終 = 位置 - 1
Windows("PB.xls").Activate
For 位置 = 0 To 終
If A辞書.Exists(D辞書.Keys(位置)) Then
Sheets("A").Cells(A辞書.Item(D辞書.Keys(位置)), A列).Value = D辞書.Items(位置)
End If
If B辞書.Exists(D辞書.Keys(位置)) Then
Sheets("B").Cells(B辞書.Item(D辞書.Keys(位置)), B列).Value = D辞書.Items(位置)
End If
Next
MsgBox ("終了しました")
End Sub
No.1ベストアンサー
- 回答日時:
良く見たわけではありませんが、今まで普通に動いていたならば以下のように追加するだけで動くような気がします。
Sub Sample()
Dim A列 As Long
Dim B列 As Long
Dim C列 As Long
Dim D列 As Long
Dim E列 As Long
Dim 行 As Long
Dim 位置 As Long
Dim 終 As Long
Dim A辞書 As New Dictionary
Dim B辞書 As New Dictionary
Dim C辞書 As New Dictionary
Dim D辞書 As New Dictionary
Dim E辞書 As New Dictionary
Dim 元辞書 As New Dictionary
Workbooks.Open Filename:=ThisWorkbook.Path & "\PB.xls"
Sheets("A").Select
For A列 = 8 To Cells(1, Columns.Count).End(xlToLeft).Column
If Cells(1, A列).Value = Day(Date) Then Exit For
Next
For 行 = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If A辞書.Exists(Cells(行, 1).Value) = False Then
A辞書.Add Cells(行, 1).Value, 行
End If
Next
Sheets("B").Select
For B列 = 8 To Cells(1, Columns.Count).End(xlToLeft).Column
If Cells(1, B列).Value = Day(Date) Then Exit For
Next
For 行 = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If B辞書.Exists(Cells(行, 1).Value) = False Then
B辞書.Add Cells(行, 1).Value, 行
End If
Next
Sheets("C工程").Select
For C列 = 8 To Cells(1, Columns.Count).End(xlToLeft).Column
If Cells(1, C列).Value = Day(Date) Then Exit For
Next
For 行 = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If C辞書.Exists(Cells(行, 1).Value) = False Then
C辞書.Add Cells(行, 1).Value, 行
End If
Next
Sheets("D工程").Select
For D列 = 8 To Cells(1, Columns.Count).End(xlToLeft).Column
If Cells(1, D列).Value = Day(Date) Then Exit For
Next
For 行 = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If D辞書.Exists(Cells(行, 1).Value) = False Then
D辞書.Add Cells(行, 1).Value, 行
End If
Next
Sheets("E工程").Select
For E列 = 8 To Cells(1, Columns.Count).End(xlToLeft).Column
If Cells(1, E列).Value = Day(Date) Then Exit For
Next
For 行 = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If E辞書.Exists(Cells(行, 1).Value) = False Then
E辞書.Add Cells(行, 1).Value, 行
End If
Next
Windows("サンプル転記4.xlsm").Activate
Sheets("データーリスト").Select
For 行 = 3 To Cells(Rows.Count, 4).End(xlUp).Row
If 元辞書.Exists(Cells(行, 4).Value) = False Then
元辞書.Add Cells(行, 4).Value, Cells(行, 6).Value
位置 = 位置 + 1
End If
Next
終 = 位置 - 1
Windows("PB.xls").Activate
For 位置 = 0 To 終
If A辞書.Exists(元辞書.Keys(位置)) Then
Sheets("A").Cells(A辞書.Item(元辞書.Keys(位置)), A列).Value = 元辞書.Items(位置)
End If
If B辞書.Exists(元辞書.Keys(位置)) Then
Sheets("B").Cells(B辞書.Item(元辞書.Keys(位置)), B列).Value = 元辞書.Items(位置)
End If
If C辞書.Exists(元辞書.Keys(位置)) Then
Sheets("C工程").Cells(C辞書.Item(元辞書.Keys(位置)), C列).Value = 元辞書.Items(位置)
End If
If D辞書.Exists(元辞書.Keys(位置)) Then
Sheets("D工程").Cells(D辞書.Item(元辞書.Keys(位置)), D列).Value = 元辞書.Items(位置)
End If
If E辞書.Exists(元辞書.Keys(位置)) Then
Sheets("E工程").Cells(E辞書.Item(元辞書.Keys(位置)), E列).Value = 元辞書.Items(位置)
End If
Next
MsgBox ("終了しました")
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
多岐にわたる、は、亘る OR ...
-
「はや」の表記
-
「等々」は「とうとう」「など...
-
「以上」と「超」の意味の違い
-
「一言一句」「一字一句」と「...
-
経験を活かす?それとも生かす
-
七面六臂(しちめんろっぴ)に...
-
「恩恵にあずかる」は「与る」...
-
「世界を周る」のまわるの漢字...
-
「拠点」と「拠店」の意味の違...
-
エクセルで「印」のしるしを書...
-
「早逝」の読み方は?
-
イタリア語の敬称
-
「できるか、できないか」を熟...
-
勝負の綾の正確な意味
-
「実行の反対は何?」について...
-
参考文献の中には辞書や文法書...
-
「選択肢」と「選択枝」どちら...
-
ラテン語で「繋ぐ」をおしえて...
-
「毎」の読み方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
多岐にわたる、は、亘る OR ...
-
「はや」の表記
-
「等々」は「とうとう」「など...
-
「以上」と「超」の意味の違い
-
「一言一句」「一字一句」と「...
-
「拠点」と「拠店」の意味の違...
-
七面六臂(しちめんろっぴ)に...
-
エクセルで「印」のしるしを書...
-
経験を活かす?それとも生かす
-
「できるか、できないか」を熟...
-
出費多難と出費多端
-
「恩恵にあずかる」は「与る」...
-
文量は正しい日本語ですか?
-
合意の上・下の使い分け
-
ラテン語で「繋ぐ」をおしえて...
-
「~より」と「~から」
-
「世界を周る」のまわるの漢字...
-
向かい入れる? 迎い入れる?
-
「たかお」「たが」の五十音順
-
「毎」の読み方
おすすめ情報