Excel VBA 質問スレッド №2124 (未解決)

VBAのコード作成について

投稿者 : こゆ     投稿日時 : 2025/06/05(Thu) 16:56:56     OS : Windows 11     EXCEL : Office 365
お客様名(A列)とお客様番号(B列)が100名記載されたExcelリストがあり、それを各お客様名ごとに用意した100枚のシートの所定のセル(お客様名はH29、お客様番号はH30)にそれぞれ反映させたく思っています。
この場合、どのようなコードを作成すればよろしいでしょうか。
ご回答のほど、よろしくお願いいたします。

スポンサーリンク
[返信 1] Re : VBAのコード作成について
投稿者 : ピロリ     投稿日時 : 2025/06/05(Thu) 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

[返信 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


[返信 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_**)を付けたつもりだったのですが、スペルを
間違えてしまいました。(お恥ずかしい・・・) 今回は修正させていただきました。

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)を使用するのが一般的だと
思うのですが・・・

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-04 15:30:13 )
タイトルとURLをコピーしました