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

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

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

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

3回答

441閲覧

Excelのマクロ作成

bako

総合スコア6

VBA

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2018/05/15 03:13

ExcelのデータのE列(登録番号)をキーにSQLServerのテーブルの登録番号と結合し、SQLServerのテーブルの氏名(漢字)をExcelデータのR列(氏名)に更新するマクロを組みたいです。
マクロ専用のExcelを一つ作るようにします。

詳細
1.エクセルファイルを選択 → ダイアログでファイルを選択(ファイル名とシート名は都度変わる)
2.SQLServer(関係者マスタ)から氏名漢字を取得 → Excel(Book2.xlsx)のE列登録番号をキーにする。
3.氏名漢字をExcel(Book2.xlsx)のR列氏名に転記
4.選択したExcel(Book2.xlsx)は開いたまま閉じない

ダイアログでファイルを選択することはできました。
その先をどう進めていいのか、全く考えがまとまりません。
お知恵をお貸しいただけないでしょうか。
よろしくお願いいたします。

###ダイアログ表示のVBA

VBA

1Dim OpenFileName As String 2 OpenFileName = Application.GetOpenFilename("Excelブック,*.xlsx") 3 If OpenFileName <> "False" Then 4 Workbooks.Open OpenFileName 5 End If

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

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

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

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

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

guest

回答3

0

たぶんこんな流れでよいと思います。
他の回答も参考にそれぞれの実装方法を調べながらやってみてください。

  1. ダイアログでExcelブックを選択。
  2. Excelブックを開く。
  3. 開いたブックの対象としたいワークシートのE列を1行目(?)からループ
  4. E列の値をキーにSQLServerのテーブルを検索(SELECT文)
  5. 取得できたら同行のR列に代入。
  6. ワークシートの対象行を次へ。
  7. E列のデータがなくなるまで3から繰り返す。

投稿2018/05/15 04:14

ttyp03

総合スコア16996

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

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

0

VBAのコーディングができる画面から、「オブジェクト ブラウザ」ってのを参照できると思うのですが、
Workbooksコレクションから開いたエクセルファイルをWorkbookオブジェクトとして取得して、
Workbook.Worksheetsコレクションから操作したいシートを特定してWorksheetオブジェクト、
Worksheet(もしくはSheet)オブジェクトに対するRangeあるいはCellsにてセルにアクセス、
という構造を把握しないと難しいでしょう。

ひとまず、
Office TANAKA - Excel VBA Tips[目次]
Office TANAKAさんところのVBAでこう実現する、ってのをざっと読んでもらった方が理解が早いかもしれませんね。

投稿2018/05/15 03:32

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

自己解決

ありがとうございました。
回答していただいたのをヒントにし、社内でもレクチャーしてもらい完成しました。

VBA

1Sub Filesentaku() 2 Dim myFile As Variant 3 4 myFile = Application.GetOpenFilename("エクセルファイル(*.xlsx),*.xls; *.xlsx") 5 6 If VarType(myFile) = vbBoolean Then 7 MsgBox "キャンセルされました" 8 Exit Sub 9 End If 10 11 Dim dbConnect As New ADODB.Connection 'DB接続先情報 12 Dim dbRecordset As ADODB.Recordset 'DB接続先通信データ(SQL文を送り、結果を取得する) 13 14 Dim ServerName As String 'サーバー名 15 Dim UserName As String 'ユーザー名 16 Dim Password As String 'パスワード 17 Dim ConnectServer As String '接続サーバ(大文字取得) 18 19 Dim i As Long 20 Dim WB As String 21 Dim Regstno As String 22 Dim LoopCnt As Long 23 24 Dim rs As ADODB.Recordset 25 Dim strSQL As String 26 27 ServerName = Sheets(2).Cells(1, 2) 28 UserName = Sheets(2).Cells(2, 2) 29 Password = Sheets(2).Cells(3, 2) 30 ConnectServer = "SqlServer" 31 32 dbConnect.Open "Provider=SQLOLEDB;Data Source=" & ServerName & ";User ID=" & UserName & ";Password=" & Password & ";" 33 WB = myFile 34 35 Workbooks.Open fileName:=WB 36 37 Sheets(1).Select 38 LoopCnt = Sheets(1).Cells(Rows.Count, 1).End(xlUp).row 39 40 Application.ScreenUpdating = False 41 42 For i = 2 To LoopCnt Step 1 43 Regstno = Sheets(1).Cells(i, 5).Value 44 45 strSQL = "SELECT RELATIONNAMEKJ FROM T_RELATION WHERE REGISTNO = " & Regstno 46 47 Set dbRecordset = dbConnect.Execute(strSQL) 48 49 If dbRecordset.EOF = True Then 50 Sheets(1).Cells(i, 18) = "登録番号エラー" 51 Else 52 'データをセルへ設定 53 Sheets(1).Cells(i, 18) = dbRecordset.Fields(0).Value 54 End If 55 56 57 58 59 dbRecordset.Close 60 Set dbRecordset = Nothing 61 62 Next 63 64 dbConnect.Close 'DB接続の破棄 65 66 67 68End Sub

投稿2018/05/16 04:45

bako

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問