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

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

ただいまの
回答率

90.52%

  • SQL

    2389questions

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

  • VBA

    1794questions

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

  • Excel

    1533questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • SQL Server

    590questions

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

  • マクロ

    227questions

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

Excelのマクロ作成

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 236

bako

score 2

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

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

ダイアログ表示のVBA

Dim OpenFileName As String
        OpenFileName = Application.GetOpenFilename("Excelブック,*.xlsx")
        If OpenFileName <> "False" Then
            Workbooks.Open OpenFileName
        End If
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2018/05/15 13:02

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

  • mts10806

    2018/05/15 14:58 編集

    タイトルには要件を書きましょう。あまりにざっくりしすぎていると質問一覧から見た場合に何のことかが分かりません。 https://teratail.com/help/question-tips#questionTips3-1

    キャンセル

回答 3

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

check解決した方法

0

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

Sub Filesentaku()
    Dim myFile As Variant

    myFile = Application.GetOpenFilename("エクセルファイル(*.xlsx),*.xls; *.xlsx")

    If VarType(myFile) = vbBoolean Then
        MsgBox "キャンセルされました"
        Exit Sub
    End If

    Dim dbConnect As New ADODB.Connection   'DB接続先情報
    Dim dbRecordset As ADODB.Recordset      'DB接続先通信データ(SQL文を送り、結果を取得する)

    Dim ServerName As String    'サーバー名
    Dim UserName As String      'ユーザー名
    Dim Password As String      'パスワード
    Dim ConnectServer As String '接続サーバ(大文字取得)

    Dim i As Long
    Dim WB As String
    Dim Regstno As String
    Dim LoopCnt As Long

    Dim rs As ADODB.Recordset
    Dim strSQL As String

    ServerName = Sheets(2).Cells(1, 2)
    UserName = Sheets(2).Cells(2, 2)
    Password = Sheets(2).Cells(3, 2)
    ConnectServer = "SqlServer"

    dbConnect.Open "Provider=SQLOLEDB;Data Source=" & ServerName & ";User ID=" & UserName & ";Password=" & Password & ";"
    WB = myFile

    Workbooks.Open fileName:=WB

    Sheets(1).Select
    LoopCnt = Sheets(1).Cells(Rows.Count, 1).End(xlUp).row

    Application.ScreenUpdating = False

    For i = 2 To LoopCnt Step 1
        Regstno = Sheets(1).Cells(i, 5).Value

        strSQL = "SELECT RELATIONNAMEKJ FROM T_RELATION WHERE REGISTNO = " & Regstno

        Set dbRecordset = dbConnect.Execute(strSQL)

        If dbRecordset.EOF = True Then
            Sheets(1).Cells(i, 18) = "登録番号エラー"
        Else
           'データをセルへ設定
            Sheets(1).Cells(i, 18) = dbRecordset.Fields(0).Value
        End If




        dbRecordset.Close
        Set dbRecordset = Nothing

    Next

    dbConnect.Close 'DB接続の破棄



End Sub

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • SQL

    2389questions

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

  • VBA

    1794questions

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

  • Excel

    1533questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • SQL Server

    590questions

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

  • マクロ

    227questions

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