Excel VBA 質問スレッド №2124 (未解決)
VBAのコード作成について
投稿者 : こゆ 投稿日時 : 2025/06/05(Thu) 16:56:56 OS : Windows 11 EXCEL : Office 365
お客様名(A列)とお客様番号(B列)が100名記載されたExcelリストがあり、それを各お客様名ごとに用意した100枚のシートの所定のセル(お客様名はH29、お客様番号はH30)にそれぞれ反映させたく思っています。
この場合、どのようなコードを作成すればよろしいでしょうか。
ご回答のほど、よろしくお願いいたします。
お客様名(A列)とお客様番号(B列)が100名記載されたExcelリストがあり、それを各お客様名ごとに用意した100枚のシートの所定のセル(お客様名はH29、お客様番号はH30)にそれぞれ反映させたく思っています。
この場合、どのようなコードを作成すればよろしいでしょうか。
ご回答のほど、よろしくお願いいたします。
スポンサーリンク
[返信 1] Re : VBAのコード作成について
投稿者 : ピロリ 投稿日時 : 2025/06/05(Thu) 18:19:41
山田太郎さんのシートがどれなのか分かりませんが、シート名称がお客様番号なら、下の様な感じです。
お客様名(A列)とお客様番号(B列)リストのシート名称が「お客様リスト」の前提で・・・
参考になれば。
山田太郎さんのシートがどれなのか分かりませんが、シート名称がお客様番号なら、下の様な感じです。
お客様名(A列)とお客様番号(B列)リストのシート名称が「お客様リスト」の前提で・・・
参考になれば。
Sub Sample() Dim Cas_List As Worksheet, Cas_Sh As Worksheet, r As Long Set Cas_List = Worksheets("お客様リスト") For r = 1 To 100 If Cas_List.Cells(r, "A").Text <> "" Then On Error GoTo LABEL_ERR Set Cas_Sh = Worksheets(Cas_List.Cells(r, "B").Text) On Error GoTo 0 Cas_Sh.Range("H29") = Cas_List.Cells(r, "A").Value Cas_Sh.Range("H30") = Cas_List.Cells(r, "B").Value End If Next r Exit Sub LABEL_ERR: MsgBox Cas_List.Cells(r, "A") & "(" & _ Cas_List.Cells(r, "B") & ")のシートが存在しない!" End Sub
[返信 2] Re : VBAのコード作成について
投稿者 : こゆ 投稿日時 : 2025/06/06(Fri) 08:02:16
ご丁寧にご回答いただき、ありがとうございます。
早速いただいたコードを入れたところ、100シートほどあるお客様のシート名称と合致せずエラーになってしまいました。
反映させる先の100シートのシート名が「〇〇シート△△_お客様名」みたいな感じなのですが、この場合の対処法ありますでしょうか。
お手数ですが、よろしくお願いいたします。
■[返信 1] ピロリさん(2025-06-05 18:19:41)の記事
> 山田太郎さんのシートがどれなのか分かりませんが、シート名称がお客様番号なら、下の様な感じです。
> お客様名(A列)とお客様番号(B列)リストのシート名称が「お客様リスト」の前提で・・・
> 参考になれば。
>
> Sub Sample()
> Dim Cas_List As Worksheet, Cas_Sh As Worksheet, r As Long
> Set Cas_List = Worksheets("お客様リスト")
>
> For r = 1 To 100
> If Cas_List.Cells(r, "A").Text <> "" Then
> On Error GoTo LABEL_ERR
> Set Cas_Sh = Worksheets(Cas_List.Cells(r, "B").Text)
> On Error GoTo 0
> Cas_Sh.Range("H29") = Cas_List.Cells(r, "A").Value
> Cas_Sh.Range("H30") = Cas_List.Cells(r, "B").Value
> End If
> Next r
> Exit Sub
>
> LABEL_ERR:
> MsgBox Cas_List.Cells(r, "A") & "(" & _
> Cas_List.Cells(r, "B") & ")のシートが存在しない!"
>
> End Sub
>
ご丁寧にご回答いただき、ありがとうございます。
早速いただいたコードを入れたところ、100シートほどあるお客様のシート名称と合致せずエラーになってしまいました。
反映させる先の100シートのシート名が「〇〇シート△△_お客様名」みたいな感じなのですが、この場合の対処法ありますでしょうか。
お手数ですが、よろしくお願いいたします。
■[返信 1] ピロリさん(2025-06-05 18:19:41)の記事
> 山田太郎さんのシートがどれなのか分かりませんが、シート名称がお客様番号なら、下の様な感じです。
> お客様名(A列)とお客様番号(B列)リストのシート名称が「お客様リスト」の前提で・・・
> 参考になれば。
>
> Sub Sample()
> Dim Cas_List As Worksheet, Cas_Sh As Worksheet, r As Long
> Set Cas_List = Worksheets("お客様リスト")
>
> For r = 1 To 100
> If Cas_List.Cells(r, "A").Text <> "" Then
> On Error GoTo LABEL_ERR
> Set Cas_Sh = Worksheets(Cas_List.Cells(r, "B").Text)
> On Error GoTo 0
> Cas_Sh.Range("H29") = Cas_List.Cells(r, "A").Value
> Cas_Sh.Range("H30") = Cas_List.Cells(r, "B").Value
> End If
> Next r
> Exit Sub
>
> LABEL_ERR:
> MsgBox Cas_List.Cells(r, "A") & "(" & _
> Cas_List.Cells(r, "B") & ")のシートが存在しない!"
>
> End Sub
>
[返信 3] Re : VBAのコード作成について
投稿者 : ピロリ 投稿日時 : 2025/06/06(Fri) 18:24:39
シート名は、お客様番号ではなくお客様名ですか。「同姓同名は?」は一旦置いておくとして、
当然、シート名「〇〇シート△△_お客様名」のお客様名は、お客様リスト(A列)のお客様名と
同一の文字列ですよね。
もし「〇〇シート△△」が固定文字列(全シート一緒)なのであれば、[返信 1]のサンプルの
8step目を修正すれば良いでしょう。
Set Cas_Sh = Worksheets(Cas_List.Cells(r, "B").Text)
↓お客様名の前に固定文字列を付加
Set Cas_Sh = Worksheets("〇〇シート△△_" & Cas_List.Cells(r, "A").Text)
もしも可変文字列(顧客によって異なる)ってことならば、シートをループして、シート名に
お客様名が入っているか調べる必要があります。 例えば下のような感じで・・・
ちなみに、Customer を引用して 変数名(Cus_**)を付けたつもりだったのですが、スペルを
間違えてしまいました。(お恥ずかしい・・・) 今回は修正させていただきました。
シート名は、お客様番号ではなくお客様名ですか。「同姓同名は?」は一旦置いておくとして、
当然、シート名「〇〇シート△△_お客様名」のお客様名は、お客様リスト(A列)のお客様名と
同一の文字列ですよね。
もし「〇〇シート△△」が固定文字列(全シート一緒)なのであれば、[返信 1]のサンプルの
8step目を修正すれば良いでしょう。
Set Cas_Sh = Worksheets(Cas_List.Cells(r, "B").Text)
↓お客様名の前に固定文字列を付加
Set Cas_Sh = Worksheets("〇〇シート△△_" & Cas_List.Cells(r, "A").Text)
もしも可変文字列(顧客によって異なる)ってことならば、シートをループして、シート名に
お客様名が入っているか調べる必要があります。 例えば下のような感じで・・・
ちなみに、Customer を引用して 変数名(Cus_**)を付けたつもりだったのですが、スペルを
間違えてしまいました。(お恥ずかしい・・・) 今回は修正させていただきました。
Sub Sample2() Dim Cus_List As Worksheet, Cus_Sh As Worksheet, r As Long, flg As Boolean Set Cus_List = Worksheets("お客様リスト") For r = 1 To 100 If Cus_List.Cells(r, "A").Text <> "" Then flg = False For Each Cus_Sh In Worksheets If Right(Cus_Sh.Name, Len(Cus_List.Cells(r, "A").Text)) = _ Cus_List.Cells(r, "A").Text Then Cus_Sh.Range("H29") = Cus_List.Cells(r, "A").Value Cus_Sh.Range("H30") = Cus_List.Cells(r, "B").Value flg = True Exit For End If Next Cus_Sh If flg = False Then MsgBox Cus_List.Cells(r, "A") & "(" & _ Cus_List.Cells(r, "B") & ")のシートが存在しない!" End If End If Next r Exit Sub End Sub
[返信 4] Re : VBAのコード作成について
投稿者 : ピロリ 投稿日時 : 2025/06/07(Sat) 09:58:54
23step目の Exit Sub は不要なので削除して下さい。 消すの 忘れてました。
それから、シート名にお客様番号ではなくお客様名を使用する良し悪しは、良く検討してみて下さい。
同姓同名(金田一司(カネダ カズシ)や、金田一司(キンダイチ ツカサ)とかも同じ話ですが)や、
名前(姓)が変わることもあるので、普通はお客様番号(ユニークなID)を使用するのが一般的だと
思うのですが・・・
23step目の Exit Sub は不要なので削除して下さい。 消すの 忘れてました。
それから、シート名にお客様番号ではなくお客様名を使用する良し悪しは、良く検討してみて下さい。
同姓同名(金田一司(カネダ カズシ)や、金田一司(キンダイチ ツカサ)とかも同じ話ですが)や、
名前(姓)が変わることもあるので、普通はお客様番号(ユニークなID)を使用するのが一般的だと
思うのですが・・・
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2025-07-04 15:30:13 )