MENU

【ノーコードVBA】名前や〇印がはいったシフト表をクロス表にする

エクセルVBAマクロを自動作成する無料アプリです。

例として、アプリで「名前や〇印がはいったシフト表をクロス表にする」VBAマクロを作成します。

事例 日にちを行目出しに、シフトを列見出しに、氏名をデータにしたクロス表を作成

マクロを実行すると、文字列が入ったマトリックス表ができました。

 

【ポイント】

■ 日付データ(A列)があるときは、転記元(A列)の書式を転記先(G列)にコピーしておいてください。

書式がコピーされていない場合、日付がシリアル値になり値が転記されません。

アプリの設定

アプリへのリンク
 ⇒データをマトリックス(クロス集計)表にする

 ⇒【ツール】データをマトリックス(クロス集計)表にする

表示されるVBAコード 

アプリで作成されたコードを、VBE画面に貼り付ければ、マクロの完成です。

 

VBAコードを見る

Sub デモ() 'データをマトリックス(クロス集計)表にする
 
Application.ScreenUpdating = False ' 画面描画を停止
Application.DisplayAlerts = False  ' 警告表示を停止
    Dim 辞書行 As Object, 辞書列 As Object, キー行 As Variant, キー列 As Variant
    Dim 辞書元 As Object, キー元 As String, セル As Range, 行 As Long
    Set 辞書行 = CreateObject("Scripting.Dictionary")
    Set 辞書列 = CreateObject("Scripting.Dictionary")
    Set 辞書元 = CreateObject("Scripting.Dictionary")
    ' 転記元をループし、転記元辞書に値
    Worksheets("Sheet1").Select
    For 行 = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        キー行 = Cells(行, "A")
            If Not 辞書行.Exists(キー行) Then
                辞書行(キー行) = Array(Cells(行, "A"))
            End If
        キー列 = Cells(行, "B")
            If Not 辞書列.Exists(キー列) Then
                辞書列(キー列) = Array(Cells(行, "B"))
            End If
        キー元 = キー行 & "|" & キー列
            If Not 辞書元.Exists(キー元) Then
                辞書元(キー元) = Cells(行, "C")
            Else
                MsgBox "エラー:選択した組み合わせが重複しています"
                Union(Cells(行, "A"), Cells(行, "B")).Select
                Exit Sub
            End If
    Next 行
    '既存データクリア
    Worksheets("Sheet1").Cells(1 + 1, 5 + 1).CurrentRegion.ClearContents
    ' 行見出しを作成
    Dim i As Long
    Worksheets("Sheet1").Select
    i = 1
    For Each キー行 In 辞書行.Keys
         i = i + 1
        Cells(i, "E").Value = 辞書行(キー行)(0)
    Next キー行
    ' 列見出しを作成
    Dim j As Long
    j = 5
    For Each キー列 In 辞書列.Keys
        j = j + 1
        Cells(1, j).Value = 辞書列(キー列)(0)
    Next キー列
    '転記先に転記元の値を転記
    Worksheets("Sheet1").Select
    For Each セル In Range(Cells(1 + 1, 5 + 1), Cells(i, j))
        セル.Value = 辞書元(Cells(セル.Row, "E") & "|" & Cells(1, セル.Column))
    Next
Application.DisplayAlerts = True   ' 警告表示を再開
Application.ScreenUpdating = True  ' 画面描画を再開
End Sub      

 

ChatGPTで修正

あなたが自動化したい内容と事例が少し異なる場合は、無料で使えるマイクロソフトの「BingAIチャット」でコードを修正します。とても簡単です!

アプリはこちらから↓↓↓↓