Access 列持ちデータを行持ちデータへ変換する - ray88’s diary
■列持ちデータのテーブル作成
※クエリデザインのSQLビューに入力
CREATE TABLE SalesDataWide ( Code TEXT, [1-4-2022] CURRENCY, [1-5-2022] CURRENCY, [1-6-2022] CURRENCY, [1-7-2022] CURRENCY, [1-8-2022] CURRENCY, [1-9-2022] CURRENCY, [1-10-2022] CURRENCY, [1-11-2022] CURRENCY, [1-12-2022] CURRENCY, [1-1-2023] CURRENCY, [1-2-2023] CURRENCY, [1-3-2023] CURRENCY );
■列持ちデータへデータ投入
※クエリデザインのSQLビューに入力
(SQLビューだと1回に1レコードしか投入できないっぽいので2回にわけてデータ投入)
INSERT INTO SalesDataWide (Code, [1-4-2022], [1-5-2022], [1-6-2022], [1-7-2022], [1-8-2022], [1-9-2022], [1-10-2022], [1-11-2022], [1-12-2022], [1-1-2023], [1-2-2023], [1-3-2023]) VALUES ('AAA', 10000, 15000, 20000, 15000, 10000, 20000, 25000, 30000, 20000, 15000, 10000, 25000);
INSERT INTO SalesDataWide (Code, [1-4-2022], [1-5-2022], [1-6-2022], [1-7-2022], [1-8-2022], [1-9-2022], [1-10-2022], [1-11-2022], [1-12-2022], [1-1-2023], [1-2-2023], [1-3-2023]) ('BAC', 20000, 25000, 30000, 25000, 20000, 30000, 35000, 40000, 30000, 25000, 20000, 35000);
■列持ちデータのテーブル作成
※クエリデザインのSQLビューに入力
CREATE TABLE SalesDataLong ( Code TEXT, year_month TEXT, amount CURRENCY );
■行持ちデータへデータ投入
※AccessのVBAエディタの標準モジュールに入力する想定
Option Compare Database Sub InsertMultipleRecords() Dim db As Database Set db = CurrentDb() Dim arrData As Variant Dim i As Integer ' 挿入するデータの配列 arrData = Array( _ Array("AAA", "1-Aug-2022", 10000), _ Array("AAA", "1-Sep-2022", 20000), _ Array("AAA", "1-Oct-2022", 25000), _ Array("AAA", "1-Nov-2022", 30000), _ Array("AAA", "1-Dec-2022", 20000), _ Array("AAA", "1-Jan-2023", 15000), _ Array("AAA", "1-Feb-2023", 10000), _ Array("AAA", "1-Mar-2023", 25000), _ Array("BAC", "1-Aug-2022", 20000), _ Array("BAC", "1-Sep-2022", 30000), _ Array("BAC", "1-Oct-2022", 35000), _ Array("BAC", "1-Nov-2022", 40000), _ Array("BAC", "1-Dec-2022", 30000), _ Array("BAC", "1-Jan-2023", 25000), _ Array("BAC", "1-Feb-2023", 20000), _ Array("BAC", "1-Mar-2023", 35000) _ ) ' ループを使用して各レコードを挿入 For i = LBound(arrData) To UBound(arrData) db.Execute "INSERT INTO SalesDataLong (Code, year_month, amount) VALUES ('" & _ arrData(i)(0) & "', '" & _ arrData(i)(1) & "', " & _ arrData(i)(2) & ")", dbFailOnError Next i ' 完了メッセージ MsgBox "All records inserted successfully.", vbInformation ' オブジェクトのクリーンアップ Set db = Nothing End Sub