質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

2400閲覧

VBA を使ってinsert文を作りたい。

jingjing

総合スコア8

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/08/15 13:45

編集2020/08/15 13:49

VBA

1コード 2Sub sample() 3 4 Dim IN_SQL As String 5 Dim IN_TEAM As Variant 6 Dim IN_ID As Variant 7 Dim Y As Long 8 Dim MaxRow As String 9 MaxRow = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row 10 11 'insert文作成 12 IN_SQL = "" 13 IN_SQL = IN_SQL & "INSERT INTO TEAM VALUES(" 14 'エクセルのid,とnameを取得 15 For Y = 8 To MaxRow 16 IN_ID = Worksheets(Sheet1).Cells(Y, "1").Value 17 IN_TEAM = Worksheets(Sheet1).Cells(Y, "3").Value 18 IN_SQL = IN_SQL & IN_ID 19 IN_SQL = IN_SQL & IN_TEAM 20 IN_SQL = IN_SQL & ")" 21 Next 22 'insert文を格納 23 Worksheets("sheet1").Cells(15, 1) = IN_SQL 24End Sub

イメージ説明
VBA 初心者です。
insert文を作って、エクセルにセルに格納したいです。
idと、nameだけ挿入したいです。
今、データは、7個しかないが、時々によって8個になったり10個になったり、変わります。
エラーは型が一致しないとが出ます。
誰か教えてください、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaz.Suenaga

2020/08/15 13:52

「エラー」はどの行で出ますか。
guest

回答2

0

前回の実行結果がどこかの行に残っていませんか?
A列の下の方に、何かデータがあると、型が一致しない等のエラーが出ると思います。

更に、SQL文は、どのデータベースで利用するのでしょうか?

もし、ACCESSで利用する場合、複数の行のVALUESは指定できません。1行のデータのみです。
他のデータベースであれば、複数行のSQL文で、問題ないと思います。

一応、2通り用意します。

◆ Accessで利用する場合。

VBA

1Sub sample() 2 Dim IN_SQL1 As String 3 Dim IN_SQL2 As String 4 Dim IN_ID As Integer 5 Dim IN_TEAM As String 6 Dim Y As Long 7 Dim MaxRow As Long 8 9 MaxRow = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row 10 11 'insert文作成 12 IN_SQL1 = "INSERT INTO ITEM ( id, name ) values (" 13 For Y = 8 To MaxRow 14 'エクセルのid,とnameを取得 15 IN_ID = Worksheets("Sheet1").Cells(Y, 1).Value 16 IN_TEAM = Worksheets("Sheet1").Cells(Y, 3).Value 17 IN_SQL2 = IN_SQL1 & IN_ID & ", """ & IN_TEAM & """);" 18 'insert文を格納 19 Worksheets("sheet1").Cells(Y, 6).Value = IN_SQL2 20 Next 21End Sub

結果↓
イメージ説明

◆ SQL言語

VBA

1Sub sample() 2 Dim IN_SQL1 As String 3 Dim IN_SQL2 As String 4 Dim IN_ID As Integer 5 Dim IN_TEAM As String 6 Dim Y As Long 7 Dim MaxRow As Long 8 9 MaxRow = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row 10 11 'insert文作成 12 IN_SQL1 = "INSERT INTO ITEM ( id, name ) VALUES " 13 For Y = 8 To MaxRow 14 'エクセルのid,とnameを取得 15 IN_ID = Worksheets("Sheet1").Cells(Y, 1).Value 16 IN_TEAM = Worksheets("Sheet1").Cells(Y, 3).Value 17 IN_SQL2 = IN_SQL2 & "(" & IN_ID & ", """ & IN_TEAM & """), " 18 Next 19 'insert文を格納 20 Worksheets("sheet1").Cells(Y + 1, 1).Value = IN_SQL1 & Left(IN_SQL2, Len(IN_SQL2) - 2) & ";" 21End Sub

結果↓
イメージ説明

投稿2020/08/16 02:02

kai_keitai

総合スコア344

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

" の位置がおかしいです。

Worksheets(Sheet1).Cells(Y, "1").ValueWorksheets("Sheet1").Cells(Y, 1).Value

vba

1Sub sample() 2 Dim IN_SQL As String 3 Dim IN_TEAM As Variant 4 Dim IN_ID As Variant 5 Dim Y As Long 6 Dim MaxRow As String 7 MaxRow = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row 8 9 'insert文作成 10 IN_SQL = "" 11 IN_SQL = IN_SQL & "INSERT INTO TEAM VALUES(" 12 'エクセルのid,とnameを取得 13 For Y = 8 To MaxRow 14 IN_ID = Worksheets("Sheet1").Cells(Y, 1).Value 15 IN_TEAM = Worksheets("Sheet1").Cells(Y, 3).Value 16 IN_SQL = IN_SQL & IN_ID 17 IN_SQL = IN_SQL & IN_TEAM 18 IN_SQL = IN_SQL & ")" 19 Next 20 'insert文を格納 21 Worksheets("sheet1").Cells(15, 1) = IN_SQL 22End Sub

これでエラーはでなくなります。
ただし、できるINSERT文はSQLとしてはおかしいですが、、、

投稿2020/08/15 14:36

編集2020/08/15 14:39
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jingjing

2020/08/16 01:31

ありがとうございました。何とか解決することができました。 確かにSQL文がおかしいのでまた考えたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問