現在VBAで複数のエクセルシート(内容は履歴書のようなもの)をVBAで抽出しSQLServerに格納するプログラミングを作成しています。
しかし今回VBAを初めて触るということと、あまりプログラミング経験がないことも手伝って、DBに接続程度のプログラムしか作れていない状況です。(データの抽出?どうやって?という状況)
なにとぞお勧めな勉強方法、参考になるソース、検索の仕方等を教えてもらえればと考えています。
後よろしければADO接続でデータをsqlでインサートするサンプルがもらえればありがたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
excel vbaからのsqlserverの接続例を示します。
自作関数get_sqlserverに引数(database名、sql文)を渡すと
結果を取り込みできます(データを取得するシート名はsqlserverという名前にしてます)。
DBSrv = "DESKTOP-VKLFBER\SQLEXPRESS"
DBName = "testdb"
の部分はご自身の環境に合わせて修正をお願いします。
excel
1 2Sub do_sqlserver() 3 4'■ExcelVBA参照設定:ADO 5 6Dim db As String 7Dim sql As String 8Dim rc As VbMsgBoxResult 9 10Worksheets("sqlserver").Range("a1").CurrentRegion.Clear 11 12rc = MsgBox("データ取り込みを行いますか?", vbYesNo + vbQuestion) 13 14 15 If rc = vbYes Then 16 17 db = "testdb" 18 sql = "select * from tbl" 19 20 Call get_sqlserver(db, sql)’自作sqlserver接続関数に接続する 21 Else 22 MsgBox "処理を中止します", vbCritical 23 End If 24 25End Sub
excel
1’sqlserever接続関数 2Sub get_sqlserver(DatabaseName As String, strSQL As String) 3 4 On Error GoTo ErrorProc 5 6 Dim DBSrv As String 7 Dim rs As Recordset 8 Dim strConn As String 9 Dim i As Integer 10 Dim j As Integer 11 '---------------------------------------------------- 12 ' DBSrvにDBサーバ名、DBNameにデータベース名 13 '---------------------------------------------------- 14 DBSrv = "DESKTOP-VKLFBER\SQLEXPRESS" 15 'DBSrv = "DBSERVER\SQLEXPRESS,49391" 'ポート指定付 16 DBName = DatabaseName 17 18 19 '■Windows認証 20 strConn = "Provider=SQLOLEDB;Data Source='" & DBSrv & "';Initial Catalog='" & DBName & "';Trusted_Connection=Yes" 21 22 '■SQL Server認証 23 'strConn = "Provider=SQLOLEDB;Data Source='" & DBSrv & "';Initial Catalog='" & DBName & "';UID=XXXX;PWD=XXXX;" 24 25 26 Set rs = New ADODB.Recordset 27 28 rs.Open strSQL, strConn, adOpenForwardOnly, adLockReadOnly, adCmdText 29 30 rs.MoveFirst 31 32 33 With Worksheets("sqlserver") 34 35 .Cells.Clear 36 i = 1 37 Do Until rs.EOF 38 For j = 0 To rs.Fields.Count - 1 39 If i = 1 Then .Cells(i, j + 1) = rs.Fields(j).Name 40 .Cells(i + 1, j + 1) = rs(j).Value 41 Next j 42 rs.MoveNext 43 i = i + 1 44 Loop 45 End With 46 47 rs.Close 48 Set rs = Nothing 49 50 MsgBox "SQL SERVERのデータを取得しました!!" 51 52 Exit Sub 53 54 55ErrorProc: 56 57 MsgBox Err.Number & vbCrLf & Err.Description 58 59End Sub
投稿2020/07/22 11:48
編集2020/07/27 06:43総合スコア383
0
ベストアンサー
ADOはいろいろなDBで同じ文法でsqlのinsert分を発行できます。
下記は、接続方法はsqlseverに変えてほしいのですが(サンプルはmysql)
excelシートの内容を連続でinsertはAODでこういった処理となります。
mysql
1Sub Mysql_連続insert() 2 3'ExcelでADO・ADODBへの参照設定で下記をチェック(古いバージョンでも可) 4'Microsoft ActiveX 'Data Objects 6.1 Library 5 6 7Dim cn As ADODB.Connection 8Dim rs As ADODB.Recordset 9 10Dim connectionString As String 11Dim sqlStr As String 12 13Dim id As String 14Dim name As String 15Dim password As String 16Dim section As String 17 18 19'接続文字列 20connectionString = "Driver={MySQL ODBC 8.0 ANSI Driver};" _ 21 & " SERVER=localhost;" _ 22 & " DATABASE=db_users;" _ 23 & " USER=root;" _ 24 & " PASSWORD=test;" 25 26'ADODB.Connection生成 27Set cn = New ADODB.Connection 28 29On Error GoTo Err 30 31'MySQLに接続 32cn.Open connectionString 33 34For i = 2 To 6000 35 36 With Sheets("data1") 37 id = .Range("A" & i).Value 38 name = .Range("B" & i).Value 39 password = .Range("C" & i).Value 40 section = .Range("D" & i).Value 41 42 End With 43 44 sqlStr = "insert into t_users (id,name,password,section) values ('" & id & "','" & name & "','" & password & "','" & section & "')" 45 Set rs = cn.Execute(sqlStr) 46 47Next 48 49cn.Close 50Set rs = Nothing 51Set cn = Nothing 52 53MsgBox "データの登録がおわりました" 54Exit Sub 55 56Err: 57 Set rs = Nothing 58 Set cn = Nothing 59 MsgBox (Err.Description) 60 61End Sub
投稿2020/07/22 04:07
総合スコア383
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/22 05:20 編集
2020/07/22 05:11 編集
2020/07/22 06:05
2020/07/22 06:24 編集
2020/07/22 06:35
2020/07/22 06:53
2020/07/22 07:04
0
windowsでデータベースがからむと・・。odbc接続、ado接続が必要となります。
そのキーワードで検索してみるといいですよ・・。
これは定番なので、自己解決しないとダメな内容だと思います。
投稿2020/07/22 03:05
総合スコア383
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/22 03:25
2020/07/22 03:30
2020/07/22 04:39
0
「VBA入門」や「SQL入門 SQLServer」などでググるといろいろ見つかると思いますよ。
あとはVBAの定番サイト
Office TANAKA
ご質問「複数のエクセルシート・・・」ですが、これも色々な方法がありますね。
- 抽出対象のExcelブック内にVBAコードを書いてSQLServerにアクセスする
- 専用のExcelブックにVBAコードを書いて、抽出対象のExcelブックを取り込んでSQLServerアクセスする
- ACCESS-VBAで抽出対象ExcelブックをACCESSに取り込んでSQLServerアクセスする
等など
投稿2020/07/22 02:58
総合スコア1095
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/22 03:08
2020/07/22 03:14 編集
2020/07/22 03:26
2020/07/22 03:39 編集
2020/07/22 03:41
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/30 07:39
2020/07/30 07:57 編集
2020/07/30 11:09
2020/07/30 11:20
2020/07/30 12:25
2020/07/30 12:36 編集
2020/07/30 12:38
2020/07/30 12:46 編集
2020/07/30 12:51 編集
2020/07/30 12:53
2020/07/30 13:03 編集
2020/07/30 13:06
2020/07/30 13:12
2020/07/30 13:18
2020/07/30 13:20
2020/07/30 20:29
2020/07/31 00:17