横向けになっている表定義からINSERT文を作成します。
前提条件はコメントに記載の通り。
※DATE型に対するTO_DATEは手動。
1 | Sub SqlInsertCreate() |
2 | ' |
3 | ' SqlInsertCreate Macro |
4 | ' |
5 | ' テーブル名、項目名、値からINSERT文を自動生成します。 |
6 | ' |
7 | ' A1:テーブル名 |
8 | ' A2~C2:項目名 |
9 | ' A3~C3:値 |
10 | ' 上記状態の時にE2を選択し、マクロを実行する。 |
11 |
12 | '//=====項目用INSERT文作成=============================== |
13 | 'セルをアクティブにする。 |
14 | ActiveCell.Offset(0, 0). Select |
15 |
16 | 'アクティブセル列数を取得する。 |
17 | Dim activCellNoCol As Long |
18 | activCellNoCol = ActiveCell.Column |
19 |
20 | 'ループで利用する変数を宣言する。 |
21 | Dim i As Long |
22 | Dim tmpStrCol As String |
23 |
24 | 'アクティブセル列数-2から列数が2になるまで繰り返す |
25 | For i = activCellNoCol - 2 To 2 Step -1 |
26 | tmpStrCol = tmpStrCol & "RC[-" & i & "]&" "," "&" |
27 | Next i |
28 |
29 | '項目用INSERT文を作成する。 |
30 | Dim tmpInsertCol As String |
31 | tmpInsertCol = "=" & Left(tmpStrCol, Len(tmpStrCol) - 5) & "&" ") VALUES (" "" |
32 | ActiveCell.Formula = tmpInsertCol |
33 |
34 |
35 |
36 | '//=====値用INSERT文作成=============================== |
37 | 'セルをアクティブにする。 |
38 | ActiveCell.Offset(1, 0). Select |
39 |
40 | 'アクティブセル列数を取得する。 |
41 | Dim activCellNoVal As Long |
42 | activCellNoVal = ActiveCell.Column |
43 |
44 | 'ループで利用する変数を宣言する。 |
45 | Dim j As Long |
46 | Dim tmpStrVal As String |
47 |
48 | 'アクティブセル列数-2から列数が2になるまで繰り返す |
49 | For j = activCellNoVal - 2 To 2 Step -1 |
50 | tmpStrVal = tmpStrVal & "RC[-" & j & "]&" "','" "&" |
51 | Next j |
52 |
53 | '値用INSERT文を作成する。 |
54 | Dim tmpInsertVal As String |
55 | tmpInsertVal = "=" "'" "&" & Left(tmpStrVal, Len(tmpStrVal) - 7) & "&" "');" "" |
56 | ActiveCell.Formula = tmpInsertVal |
57 |
58 |
59 | '//=====テーブル用INSERT文作成=============================== |
60 | 'セルをアクティブにする。 |
61 | ActiveCell.Offset(-2, 0). Select |
62 |
63 | 'アクティブセル列数を取得する。 |
64 | Dim activCellNoTbl As Long |
65 | activCellNoTbl = ActiveCell.Column |
66 |
67 | 'テーブル名の位置を求める。 |
68 | Dim tblNameNo As String |
69 | tblNameNo = activCellNoTbl - 2 |
70 |
71 | Dim tmpInsertTbl As String |
72 | tmpInsertTbl = "=" "INSERT INTO " "&RC[-" & tblNameNo & "]&" " (" "" |
73 | ActiveCell.Formula = tmpInsertTbl |
74 |
75 |
76 | 'セルを初期値に戻す。 |
77 | ActiveCell.Offset(1, 0). Select |
78 | End Sub |