準備中
EXCELからSQLに移すメリット
EXCELではデータ検索や加工が高速で行える。
準備中
見せ方を工夫できる
準備中
巨大なデータをあつかうことができる
準備中
移すまでの流れ
- EXCELのデータをSQLに入力する用のテキストファイルを作る。
- SQLにファイルごと入力する。
SQL用のテキストファイルを作る。
EXCEL VBAの使い方
準備中
ソースコード
図のように1行目に要素名を入力します。これはIDとか性別等の格納したいデータの名前です。要素名は必ず英語にしましょう。
2行目に型名を書きます。とりあえず数字であれば”INT”,文字であれば”VARCHAR(n)”と入力しておきましょう。nには要素の最大の文字数を入れます。例えば、性別データを”F”と”M”で入力するなら”VARCHAR(1)”,”female”と”male”で表現するなら”female”の文字数が6文字なので”VARCHAR(6)”と入力します。
3行目でprimary keyを設定します。該当する要素列に”*”を入力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
Sub makeSql() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets(1) Dim tmp As Variant Dim tnum As Long Dim datFile As String tmp = Split(ActiveWorkbook.Name, ".") datFile = "data4.sql.txt" Open datFile For Output As #1 Print #1, "CREATE TABLE " + tmp(0) + "(" '型数を調べる' tnum = 0 Dim i As Long i = 1 Do While ws.Cells(1, i).Value <> "" tnum = tnum + 1 i = i + 1 Loop MsgBox tnum '型定義' i = 1 Do While i <= tnum Print #1, ws.Cells(1, i).Value + " " + ws.Cells(2, i).Value + "," i = i + 1 Loop 'プライマリーキー' Dim prim() As String Dim j As Long Dim pri As Integer i = 1 pri = -1 Do While i <= tnum If ws.Cells(3, i).Value = "*" Then pri = pri + 1 Else End If i = i + 1 Loop i = 1 j = 0 ReDim prim(pri) As String Do While i <= tnum If ws.Cells(3, i).Value = "*" Then prim(j) = ws.Cells(1, i).Value j = j + 1 Else End If i = i + 1 Loop Print #1, "primary key(" + Join(prim, ",") + "));" 'データ書き出したい' Dim k As Integer Dim fac() As String tnums = tnum - 1 k = 4 Do While ws.Cells(k, 1).Value <> "" Print #1, "INSERT INTO " + tmp(0) ReDim fac(tnums) As String i = 0 Do While i <= tnum - 1 fac(i) = ws.Cells(1, i + 1).Value i = i + 1 Loop Print #1, "(" + Join(fac, ",") + ")" ReDim fac(tnums) As String i = 0 Do While i <= tnum - 1 If InStr(ws.Cells(2, i + 1).Value, "VARCHAR") = 0 Then fac(i) = ws.Cells(k, i + 1).Value Else fac(i) = "'" & ws.Cells(k, i + 1).Value & "'" End If i = i + 1 Loop Print #1, "VALUES(" + Join(fac, ",") + ");" k = k + 1 Loop Close #1 MsgBox "data4.sqlに書き出しました " + ActiveWorkbook.Path End Sub |
これを実行することでテキストファイルが出力されます。
パスはマクロを実行したエクセルファイルと同じ場所です。
テキストファイルをSQLにまとめて入力する
使うデータベースをuseコマンドで選択したのち、
1 |
source {作ったファイルのパス名} |
のように入力すれば(下の図の黄色)、sqlに保存できます。パス名はいちいち入力しなくてもエクスプローラーからファイルをドラックして貼り付ければ”パス名”のように入力されるので(下の図の赤)、ダブルクウォーテーションマークを外せば、簡単に入力できます。
まとめ
準備中
コメント