みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBAでSQLを打ちたいです

仕事上自動化ツールを作成したいのですが、どうしてもエクセルでSQLが出来ず困っています。
やりたいこと:ボタンひとつで、エクセルシートにある表の必要な部分を取り出して別のシートに貼り付ける。
SQLでは
SELECT xxxxx,data,MIN(time) As times
From xxxxx
WHERE ●●●="●●●"
GROUP BY xxxxx,data;

です。
実際に今書いているVBAが途中なのですが、

Option Explicit

Sub createInsertSql()
Dim newbook As Workbook
Dim currentCell As Range

'前処理
Dim srcSheet As Worksheet
Set srcSheet = ActiveSheet

Dim targetRange As Range
Set targetRange = srcSheet.UsedRange


Dim head As String
head = "SERECT " & srcSheet.Name & " ("

Dim first As Boolean
first = True

Dim currentColumnIndex As Integer
For currentColumnIndex = 1 To targetRange.Columns.Count
If (first) Then
first = False
Else
head = head & "xxxxx,data,MIN(time)"
End If
Set currentCell = srcSheet.Cells(1, currentColumnIndex)
head = head & currentCell.Value
Next
head = head & ") "

'新しいBook作成
Set newbook = Workbooks.Add


Dim currentRowIndex As Integer
For currentRowIndex = 2 To targetRange.Rows.Count

Dim sql As String
sql = head & "values ("
first = True

For currentColumnIndex = 1 To targetRange.Columns.Count
If (first) Then
first = False
Else
sql = sql & ","
End If
Set currentCell = srcSheet.Cells(currentRowIndex, currentColumnIndex)
If IsNull(currentCell) Or Trim(currentCell.Value) = "" Then
sql = sql & "null"
ElseIf IsNumeric(currentCell.Value) Then
sql = sql & currentCell.Value
Else
sql = sql & "'" & currentCell.Value & "'"
End If
Next

sql = sql & ");"

newbook.ActiveSheet.Cells(currentRowIndex - 1, 1).Value = sql
Next
End Sub


いろんなサイトを見ていろいろ組み合わせてみたのですが、やはり出来ず。
意味を理解しようとも中々できずです。

恐れ入りますが、答えまではいかなくとも、どのようにしたらいいかのヒントだけでも
いただけると嬉しいです。
よろしくお願いします。

投稿日時 - 2019-03-12 13:04:48

QNo.9596082

困ってます

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

シートをテーブルに見立ててsqlで扱う手順が下記にありました。

http://www.ken3.org/asp/backno/asp084.html

参考にしてみてはいかがでしょうか。

投稿日時 - 2019-03-12 18:36:22

お礼

ありがとうございます!
参考にさせて頂きます!

投稿日時 - 2019-03-12 21:06:50

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問