3

VBA を使用して、Excel から SQL Server 2012 にデータ テーブルをインポートしようとしています。
できればUDFの助けを借りて。

エクセルの表はこんな感じ。

TableID    2012  2011  2010  2009
row 1       11     12   13    14
row 2       21     22   23    24
row 3       31     32   33    34
etc..

(セルに数字を配置して位置を指定しました。たとえば、11 = 行 1、列 1)

データベース テーブルは次のようになります。

Header:        id   |  year  |  row1  |  row2  |  row3  |  etc..
ExampData:  TableId    2012      11       21       31       ..
ExampData:  TableId    2011      12       22       32       ..

(これには、ID と年の組み合わせ、または のいずれかである主キー列は含まれませんNEWID())


特定の列をインポートする方法を知っています。たとえば、次のコードを実行できます。

INSERT INTO example_table (id, year, row1, row2, row3) VALUES ('001', '2012', '11', '21', '31')

これは個々の列ではうまく機能しますが、テーブル全体 (複数の列と行) で機能させるにはどうすればよいでしょうか。

4

2 に答える 2

3

だから私はそれを機能させることができました。これはExcel 2010、SQL Sever 2012を使用しています。
これは、Excelの行タイトルがSQLの列見出しと同じであることを前提としています。
これはまた、質問の投稿のようにテーブルの同様のレイアウトを前提としています。


UDF を使用して Excel から SQL サーバーにデータをインポートするには、次の手順を実行します。Excel で
作成します。Public Function

Public Function import_data(TableID, vHeader As Variant, vRow As Variant, vData As Variant)
End Function

そして、好みの接続方法を使用してデータベースに接続します。
次に、INSERTステートメントには次を使用します。

'Declare the  variables
Dim vpush As String
Dim headerCount As Long
Dim rowTitles As String
Dim rowDatas As String
Dim i As Long

`Count the amount of columns 
headerCount = Application.CountA(vHeader)

`Create insert statement
For i = 1 To headerCount
   rowTitles = VBA.Join(WorksheetFunction.Transpose(vRow), ", ")
   rowDatas = VBA.Join(WorksheetFunction.Transpose(Application.Index(vData, , i)), "', '")
   vpush = "INSERT INTO example_table (id, " & rowTitles & ", year) VALUES ('" & TableID & "', '" & rowDatas & "', '" & vHeader(i) & "')"
Next i

を忘れないでください.Execute (vpush)

テーブルをインポートするときはいつでも、Excel ワークシートで次の操作を行います。

  1. セルタイプで+ +=import_data(を押しますCTRLSHIFTA
  2. テーブル ID を選択
  3. 見出し行を選択します (ここでは常に年であると仮定します)
  4. すべての行のタイトルを含む列を選択します (これは、SQL の見出しのタイトルになります)
  5. テーブル内のすべてのデータを選択

それはそれを行う必要があります。
(PSこれが最も効率的な方法ではない場合、または改善が見られる場合..自由に編集または追加してください)

于 2013-04-05T18:12:37.857 に答える