2017-10-12 8 views
0

私は以下のvbaコードUsing Excel VBA to run SQL queryを使用しています(このリンクではアップリンクの答えが私が使用した方法です)。これにより、Excelセルに値を入力することができます。 SQLの結果は別の列にダンプされます。ExcelテーブルとSQLテーブルとをクロスリファレンスするには

しかし、今私が問題にしているのは、excelカラム(単一のセルだけではない)内の複数のセルに対してこれを実行し、うまくいけばsqlの別のカラム(vlookupなど)のステータスを提供したいということです。

私は100万レコード以上のSQLのステータス列からステータスを確認する必要がある約20000行のデータを持っています。

私はStrQueryで'" & Range("A3") & "'"の代わりにテーブルを使用できるのかどうかは、リンクされたメソッドを使用して1つずつ実行できません。これをclaifyする

は、私が使用していますものです:

Dim cnn As New ADODB.Connection  
    Dim rst As New ADODB.Recordset  
    Dim ConnectionString As String  
    Dim StrQuery As String 

    ConnectionString = "Provider=SQLOLEDB.1;Password=PASSWORD;Persist Security Info=True;User ID=USERNAME;Data Source=REMOTE_IP_ADDRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=DATABASE" 

    cnn.Open ConnectionString 

    cnn.CommandTimeout = 900 


    StrQuery = "SELECT StatusColumn FROM Status WHERE Contact = " & Range("A2") & "'" 

    'Performs the actual query 
    rst.Open StrQuery, cnn 

    Sheets(1).Range("B2").CopyFromRecordset rst 
End Sub 

私はA2から私のSQLクエリの範囲を変更することができれば、私は範囲に思っていた:AまたはA2:A20000及びBにダンプ: BまたはB2:B20000ですが、これは機能しません。

編集:私はこれを再度実行することで半成功しましたが、範囲が1増加したが、スペースが足りなくなったので、ループの助けとなりましたか?

答えて

1

distributed queryは、Excelブックを独自のテーブルとして使用し、インナーをローカルSQL Serverテーブルと結合する場所です。これは、ad-hoc distributed query privilegesが有効であることを前提としています。

以下

Excelデータはヘッダ列(status_column命名されたもの)を維持し、最初のセルで始まり、SHEETNAMEのA1、前提としています

SELECT * 
FROM mySQLServerTable s 
INNER JOIN 
    (OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Data Source=C:\Path\To\File.xlsx;Extended Properties=Excel 12.0', SheetName$)) e 
ON s.status_column = e.status_column 
+0

は、私は現在ない、あなたの答えをありがとうアドホック分散クエリ権限が有効になっている場合は、これがない別のルートがありますか? – Adam128

+0

100万件以上のレコードがあるため、SQL ServerテーブルをMS Accessデータベースにインポートし、AccessとExcelの間でクエリを実行したり、ExcelワークシートをインポートしてAccess内でクエリを実行したりします。または、SQL ServerでExcelワークシートをインポートし、そこからクエリを実行します。 – Parfait

+0

また、Accessデータベースを使用するためにMSAccess.exe(GUI Officeソフトウェア)は必要ありません。 Windows PCにはJET/ACEエンジン(.dllファイル)がインストールされています。 Excel VBAからデータベースを作成できます。 [here](https://stackoverflow.com/a/34259616/1422451)を参照してください。 – Parfait

関連する問題