エクセル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チャット」でコードを修正します。とても簡単です!