無料アプリで、すぐに、エクセルVBAマクロを作成できます。
例として、アプリで「名前や〇印がはいったシフト表をマトリックス表にする」VBAマクロを作成します。
(ページの末尾に、VBAコード掲載)
処理のイメージ
事例
日にちを行目出しに、シフトを列見出しに、氏名をデータにしたマトリックス表を作ります。
マクロを実行すると、文字列が入ったマトリックス表ができました。
アプリの設定
アプリのトップページ
⇒▼表形式の変換
⇒リスト形式を
⇒縦のリスト形式のデータを、マトリックス表にする(文字表示可)
【ポイント】
■ リスト内の列は、表の左端列から数えてであり、A列から数えてではありません。
■ みだしが日時のときは、チェックをいれてください
■ 数字の加算などができます。
表示されるVBAコード
アプリで作成されたコードを、VBE画面に貼り付ければ、マクロの完成です。
Sub デモ_127() '縦のリスト形式のデータを、マトリックス表にする(文字表示可)
Application.ScreenUpdating = False ' 画面描画を停止
Application.DisplayAlerts = False ' 警告表示を停止'◆配列のリストに表を入れる
Dim リスト As Variant
Sheets("データ").Select
リスト = Range("a1").CurrentRegion
'◆キーをつくり、キーが辞書に無ければ、キーを辞書に登録(日時は、数値に変換してItemに入れる)
Dim 行辞書 As Object, 列辞書 As Object, 行 As Long, 列 As Long, 行key As Variant, 列key As Variant
Set 行辞書 = CreateObject("Scripting.Dictionary")
Set 列辞書 = CreateObject("Scripting.Dictionary")
For 行 = 2 To UBound(リスト, 1)
行key = リスト(行, 1)
If Not 行辞書.Exists(行key) Then
行辞書.Add 行key, CLng(リスト(行, 1))
End If
Next
For 列 = 2 To UBound(リスト, 1)
列key = リスト(列, 2)
If Not 列辞書.Exists(列key) Then
列辞書.Add 列key, ""
End If
Next
Worksheets("データ").Select
'既存データクリア
Range("e1").CurrentRegion.ClearContents
'◆キーを入れた行と列のリストを、セルに転記(日時のときはItemをいれる)
Dim 行リスト As Variant, 列リスト As Variant
行リスト = 行辞書.items
Range("e1").Offset(1, 0).Resize(UBound(行リスト) + 1).Value = WorksheetFunction.Transpose(行リスト)
列リスト = 列辞書.Keys
Range("e1").Offset(0, 1).Resize(, UBound(列リスト) + 1).Value = 列リスト
'◆値を転記
Dim j As Long
For j = 2 To UBound(リスト, 1)
行 = WorksheetFunction.Match(CLng(リスト(j, 1)), 行リスト, 0)
列 = WorksheetFunction.Match(リスト(j, 2), 列リスト, 0)
Range("e1").Cells(行 + 1, 列 + 1).Value = リスト(j, 3)
Next j'行見出しの書式を戻す
行リスト = 行辞書.Keys
Range("e1").Offset(1, 0).Resize(UBound(行リスト) + 1).Value = WorksheetFunction.Transpose(行リスト)
Application.DisplayAlerts = True ' 警告表示を再開
Application.ScreenUpdating = True ' 画面描画を再開
End Sub
マクロを使うメリット
手作業で数分かかる作業が、1秒で終わります。
ぜひ、アプリをご利用ください。