見出し画像

マスタに登録した市区町村コードを隣列にだすよ

この説明は、ChatGPTで作成しています。

このマクロの概要

このVBAマクロは、Excelの「CDマスタ」シートに登録されている市区町村の情報を使って、現在アクティブなシートのA列(都道府県名+市区町村名)に対応するコード(CD1, CD2)をB列・C列に自動で入力するプログラムです。
また、マスタのデータも更新し、「検出回数(何回その市区町村が見つかったか)」と「最新検出日」も更新します。


マクロの処理の流れ

  1. 画面更新を停止
    → マクロの実行速度を上げるために、画面の更新を一時停止します。

  2. 「CDマスタ」シートのデータを取得

    • 「CDマスタ」シートを取得し、そのデータを**配列(Master)**に保存します。

    • 配列のデータ構成は以下のようになっています。

      • A列: 都道府県名

      • B列: 市区町村名

      • C列: CD1(市区町村コード1)

      • D列: CD2(市区町村コード2)

      • E列: 検出回数(何回データとして使われたか)

      • F列: 最新検出日

  3. アクティブシートの検索範囲を設定

    • A2セル以降のデータを検索範囲(SearchRange)として設定します。

    • ここには「都道府県名+市区町村名」が入っている前提です。

  4. 「CDマスタ」のデータをアクティブシートで検索

    • 「CDマスタ」のデータ(都道府県名+市区町村名)が、アクティブシートのA列に存在するかを検索します。

    • Find関数を使って、該当するセルを見つけます。

    • 見つかった場合、B列とC列にCD1とCD2を入力します。

    • もし同じ市区町村が複数回出てきた場合は、「,(カンマ)」で区切ってCD1・CD2を追加していきます。

  5. 「CDマスタ」の検出回数と最新検出日を更新

    • マスタの「検出回数」を+1します。

    • 「最新検出日」を今日の日付に更新します。

  6. 更新データを「CDマスタ」に一括反映

    • E列(検出回数)とF列(最新検出日)だけを一括更新することで、処理を高速化します。

  7. 処理完了のメッセージを表示

    • 「チェック完了!」というメッセージを表示し、画面更新を再開します。


このマクロのポイント

✅ 配列を使ってデータを一括処理

  • Excelのセルを直接操作すると動作が遅くなりますが、一度配列にデータを取り込んで処理し、最後にまとめて書き戻すことで高速化しています。

✅ Find関数を使ってデータを検索

  • Find を使うことで、A列にある「都道府県名+市区町村名」と「CDマスタ」のデータを素早く照合できます。

✅ 複数の一致を考慮

  • もし同じ市区町村が複数回出てきた場合、カンマ区切りでCD1・CD2を追加する仕組みになっています。

✅ マスタデータの更新

  • ただ検索するだけでなく、「検出回数」や「最新検出日」も自動で更新されるので、データの管理がしやすくなります。


活用できる場面

🔹 市区町村コードの自動入力

  • 都道府県名+市区町村名から、対応するコードを自動入力したいとき。

🔹 データ分析の補助

  • どの市区町村がどれくらい使われたか、検出回数を記録して分析するのに役立ちます。

🔹 データ整備の効率化

  • いちいち手入力しなくても、市区町村名が入力されると自動でCD1・CD2が入るので、データ整備が楽になります。


関連リンク

Sub マスタに登録した市区町村コードを隣列にだすよ()
    Application.ScreenUpdating = False
    
    'マスターを配列に保存する
    Dim wsm As Worksheet
    Set wsm = Worksheets("CDマスタ")
    Dim lastRow As Long, lastCol As Long
    lastRow = wsm.Cells(wsm.Rows.count, 1).End(xlUp).Row
    lastCol = wsm.Cells(1, wsm.Columns.count).End(xlToLeft).Column

    Dim Master As Variant
    'マスターのテーブル範囲を設定(見出し含まず)
'    マスターテーブルA列「都道府県名」B列「市区町村名」C列「CD1D列「CD2」
'    マスターテーブルE列「検出回数」F列「最新検出日」
    Master = wsm.Range(wsm.Cells(2, 1), wsm.Cells(lastRow, lastCol)).Value
    
    Dim ws As Worksheet
    Set ws = ActiveSheet
    ws.Activate
    
    '検索範囲を制限(列1、行2以降)
    Dim SearchRange As Range
    Set SearchRange = ws.Range("A2:A" & ws.Cells(ws.Rows.count, 1).End(xlUp).Row)
    

    Dim FoundCell As Range, FirstCell As Range
    Dim i As Long
    For i = LBound(Master) To UBound(Master)
            Dim i2 As Long
            Dim myStr As String

            Set FoundCell = SearchRange.Find(What:=Master(i, 1) & Master(i, 2))
            
            If FoundCell Is Nothing Then
                GoTo L1
            Else
                Set FirstCell = FoundCell
            End If
                    ' セルの書式を文字列に変更
                    FoundCell.Offset(0, 1).NumberFormat = "@"
                    FoundCell.Offset(0, 2).NumberFormat = "@"
                    If FoundCell.Offset(0, 1) = "" Then
                        FoundCell.Offset(0, 1) = Master(i, 3)
                    Else
                        FoundCell.Offset(0, 1) = FoundCell.Offset(0, 1).Value & "," & Master(i, 3)
                    End If
                    If FoundCell.Offset(0, 2) = "" Then
                        FoundCell.Offset(0, 2) = Master(i, 4)
                    Else
                        FoundCell.Offset(0, 2) = FoundCell.Offset(0, 2).Value & "," & Master(i, 4)
                    End If
                    Master(i, 5) = Master(i, 5) + 1
                    Master(i, 6) = Date
                    
            Do
                Set FoundCell = SearchRange.FindNext(FoundCell)
                If FoundCell Is Nothing Then
                    GoTo L1
                ElseIf FoundCell.Address = FirstCell.Address Then
                    GoTo L1
                End If

                    If FoundCell.Offset(0, 1) = "" Then
                        FoundCell.Offset(0, 1) = Master(i, 3)
                    Else
                        FoundCell.Offset(0, 1) = FoundCell.Offset(0, 1).Value & "," & Master(i, 3)
                    End If
                    If FoundCell.Offset(0, 2) = "" Then
                        FoundCell.Offset(0, 2) = Master(i, 4)
                    Else
                        FoundCell.Offset(0, 2) = FoundCell.Offset(0, 2).Value & "," & Master(i, 4)
                    End If
                    Master(i, 5) = Master(i, 5) + 1
                    Master(i, 6) = Date
            Loop

L1:
    Next i
    
     ' マスタの5列目と6列目のみを配列で一括更新
    Dim UpdateData As Variant
    Dim rowCount As Long
    rowCount = UBound(Master) - LBound(Master) + 1
    
    ' 5列目と6列目のデータのみを抽出
    ReDim UpdateData(1 To rowCount, 1 To 2)
    Dim j As Long
    For j = 1 To rowCount
        UpdateData(j, 1) = Master(j, 5) ' 5列目(検出回数)
        UpdateData(j, 2) = Master(j, 6) ' 6列目(最新検出日)
    Next j
    
    ' シートへ一括反映
    wsm.Range(wsm.Cells(2, 5), wsm.Cells(lastRow, 6)).Value = UpdateData
    
    MsgBox "チェック完了!"
    Application.ScreenUpdating = True
End Sub

ハッシュタグ

#excel #できること #vba #マクロ #データ整理 #市区町村 #コード自動入力 #Find関数 #配列処理 #データ管理 #Excel活用 #カンマ区切り #一括更新 #データ検索 #自動入力 #プログラミング #業務効率化 #データベース #エクセル #仕事効率化


English Translation

Retrieve Municipality Code Registered in Master List

This explanation is created using ChatGPT.

Overview of this Macro

This VBA macro retrieves municipality information registered in the "CD Master" sheet and automatically enters the corresponding codes (CD1, CD2) into columns B and C of the active sheet based on the data in column A (Prefecture + Municipality Name).
Additionally, it updates the master data by recording the detection count and latest detection date.

How the Macro Works

  1. Disable Screen Updating
    → Temporarily stops screen updates to speed up the macro execution.

  2. Retrieve Data from "CD Master" Sheet

    • The "CD Master" sheet is retrieved, and its data is stored in an array (Master).

    • Data structure:

      • Column A: Prefecture Name

      • Column B: Municipality Name

      • Column C: CD1 (Municipality Code 1)

      • Column D: CD2 (Municipality Code 2)

      • Column E: Detection Count

      • Column F: Latest Detection Date

  3. Set Search Range in Active Sheet

    • Defines column A from row 2 onward as the search range (SearchRange).

  4. Search for Matches in Active Sheet

    • Uses the Find function to locate the matching Prefecture + Municipality Name in column A.

    • If a match is found, CD1 and CD2 are entered into columns B and C.

    • If multiple matches exist, they are appended with commas.

  5. Update Detection Count and Latest Detection Date in Master Data

    • Increments the detection count.

    • Updates the latest detection date to today’s date.

  6. Batch Update Data in "CD Master"

    • Updates only columns E and F to improve efficiency.

  7. Display Completion Message

    • Displays “Check Complete!” and resumes screen updates.

Use Cases

  • Automating municipality code input

  • Analyzing detection frequency of municipalities

  • Improving efficiency in data management

Related Links

いいなと思ったら応援しよう!