• ベストアンサー

Excelのデータをデータベースで使用できる形に変換

現在、excelでシフト表があります。 これをMYSQLにインポートをしようと思うのですが、 データの変換方法が分かりません。 現在のデータはA列に社員ID 1行目に1月分の日付が入っていて、 出勤可能を1、出勤不可を2 出勤決定を3で入力されてます。 分かりずらいかもしれませんが、下記のような表になります。   2008/7/1 2008/7/2 2008/7/3 2008/7/4 ・・・ 001  1    2     1    2 002  2    3     1    2 003  1    1     3    2 004  1    2     2    2 ・ ・ これを 001  1 2008/7/1 001  2 2008/7/2 001  1 2008/7/3 001  2 2008/7/4 002  2 2008/7/1 002  3 2008/7/2 002  1 2008/7/3 002  2 2008/7/4 ・ ・ ・ という1行1レコードの形式に変換したいと思います。 従業員数が数百人になるので、一度に変換できる方法が無いかと思い質問させていただきました。 どうかよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

(複数のワークシート範囲)からのピボットテーブルを利用してはいかがでしょう。 1)[データ]-[ピボットテーブル...]-ウィザードの1/3で(複数のワークシート範囲)にチェックします。 2)ウィザード2a/3で自動ではなく「指定」にチェック。 3)ウィザード2b/3で範囲を指定して[追加]。(複数範囲ではなく単独範囲でも可) 4)ウィザード3/3でテーブルの作成先を指定。(新規ワークシートでも可) 5)できたテーブルの右下の、[総計]と[総計]がクロスするセルをダブルクリック。 ...するとデータが展開された新規シートが追加されます。列の順番が望みと違う場合は並び替えれば良いでしょう。

aircraft
質問者

お礼

ありがとうございます! 完璧にできました! しかもウィザードでできるので簡単でした。 本当に助かりました。

その他の回答 (2)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

テキストファイルに書き出して、インポートしてはいかがでしょう。 (例)基本的なループを回しているだけの内容です。 なぜテキストファイルか?順次書き込んでいくだけなので、楽だから... Sub test() Dim targetRange As Range Dim i As Long, j As Long Dim FSO As Object Dim buf As String Set FSO = CreateObject("Scripting.FileSystemObject") Set targetRange = ActiveSheet.Range("a2").CurrentRegion With FSO.CreateTextFile(ThisWorkbook.Path & "\" & "\Sample.txt") For i = 2 To targetRange.Rows.Count For j = 2 To targetRange.Columns.Count buf = targetRange.Cells(i, 1) & vbTab & targetRange.Cells(i, j) & _ vbTab & targetRange.Cells(1, j) .WriteLine buf Next j Next i .Close End With Set FSO = Nothing End Sub

aircraft
質問者

お礼

ここまで詳しく書いていただいて本当にありがとうございます! 早速やってみます!

  • surinrin
  • ベストアンサー率30% (284/939)
回答No.1

VBAで丹念にSQL分を出力するというのは?? →→→→(1行インクリメント) →→→→(1行インクリメント) の順で、1セルずつデータをみてSQL分を作っていきます。 2次元構造のデータなのでループ2つですね。

aircraft
質問者

お礼

速答ありがとうございました! ただ、VBAがあまりわからないんです… 勉強がてら、お教えいただいた方法も調べてみます! ありがとうございました。

関連するQ&A