PR

簡単便利!AccessでExcelのデータを扱う方法

VBA

AccessからExcelのデータを取得する方法は様々なシーンで活用することができます。今回はその一例として、Excelファイル中の全てのシートから値を取得する方法を紹介します。

スポンサーリンク

サンプルデータの準備

まずは、Accessからデータを取得するためのExcelファイルとして、「あいさつ.xlsx」ファイルを作成し、これを「C:\TEST」フォルダに保存します。

続いてExcelファイル中に、図1のように「日本語」及び「英語」シートを用意し、それぞれのシートのB2~B4セル中に値を入力します。

図1 サンプルExcelファイル

VBAを用いた処理の実装

今回は、AccessからExcelに入力されているデータを取得し、これをVBA画面のイミディエイトウィンドウに表示させる方法を紹介します。

まずは、標準モジュールを作成しここに以下のコードを追記してください。

Private Sub ExcelData()

'Excel用の変数宣言
Dim wb As Object
Dim ws As Object

'Excelファイルの保存先用変数宣言
Dim FilePath As String

'データ取得の繰り返し用変数宣言
Dim i As Integer

'データを扱うExcelファイルのパス
FilePath = "C:\TEST\あいさつ.xlsx"

'objectにExcelファイルをセットする。
Set wb = GetObject(FilePath)

'For文を用いてExcelファイル中の全てのシートを確認する。
For s = 1 To wb.Worksheets.Count
    
    'objectにワークシートをセットする。
    Set ws = wb.Worksheets(s)
    
  'Withブロックの設定
    With ws
        
    'データが入力されているセルの範囲で行数分の処理を行う。
    For i = 2 To .range("B1").currentregion.rows.Count
    
        Debug.Print .cells(i, 2).Value

    Next i
    
    End With
    
  'ワークシートのオブジェクトをいったん破棄する。
    Set ws = Nothing

'次のワークシートへ移動する。        
Next s

wb.Close

End Sub

さて、それぞれのコードを確認していきましょう。はじめはExcelオブジェクト用の変数、ファイルパスの変数、データ取得を繰り返す際に用いる変数の宣言をします。

次に、データを扱うExcelファイルの保存先として「C:\TEST\あいさつ.xlsx」のフルパスを「FilePath」変数に格納します。

そして、GetObject関数を用いて先に指定したファイルパスのオブジェクトを設定します。GetObject関数はActiveXオブジェクトへの参照を返し、この際にはファイルのフルパスを指定します。

これで対象となるExcelファイルを選択できましたので、For文を用いてファイル中の全てのシートを確認していきます。

この際に、For文の終点条件に「wb.Worksheets.Count」を用いていますが、これは対象ワークブックのワークシート数をカウントする処理です。したがって、これを用いてワークシートの数が最大となるところまで処理を繰り返すようにしています。このようにして、「WorkSheets(s)」のところで順次シートを切り替えていきます。

Withブロックについては、毎回「ws.Range( “A1” )」のように記載することは煩雑となりますので、例のように「With ws」と宣言し、それ以降「End With」が出てくるまでは「.Range(“A1”)」のように記載できるようにしています。

次のFor文はシート内の各セルを見ていく処理ですが、「.range(“B1”).currentregion.rows.Count」と記載することで、B列の範囲においてデータが入力されているセルの範囲で行数分の処理を行うように終点条件を設定しています。

このFor文の中では「Debug.Print .cells(i, 2).Value」と記載しているとおり、Debug.Printを用いて対象セルの値をイミディエイトウィンドウに表示するようにしています。

これで、1つのシートの処理が完了しますので、「End With」としてWithブロックを閉じ、続いて「Set ws = Nothing」によりワークシートのオブジェクトをいったん破棄します。

そして上位のFor文に戻り、次のワークシートへ移動して同様の処理を繰り返す流れとなります。

一通りの処理が完了した後、「wb.close」によりワークブックを閉じ、全ての処理が完了となります。

処理の実行

これまでに紹介した内容に基づいて、処理を実行してみます。VBA画面の「▶」アイコンをクリックしてみましょう。すると、図2のようにイミディエイトウィンドウに結果が表示されたかと思います。

図2 VBAによる処理の結果

このようにして、AccessからExcelファイルのデータを直接取得することができました。

まとめ

今回は、AccessからExcelのデータを取得する方法として、Excelファイル中の全てのシートから値を取得する方法を紹介しました。

直感的に扱えるExcelでルーチンの業務に係るデータを処理しているケースは多々見られますので、Accessへのデータ取り込みの方法として今回紹介した方法を上手く活用していただければと思います。

今の時代、VBAに限らずプログラミングができるということは、当然のスキルとして広く社会で認知されています。いまだプログラミングが十分にできないという人は、今からでも遅くありません。できるだけ早く基本的なプログラミングスキルを習得することをお勧めします。

ご自身にあった専門書を参考に、実践的なプログラミング・データベース・サーバ、データ分析・機械学習など、システムエンジニアや今後を担うDX人材に必要とされているスキル獲得に向けて基礎から学んでいくことが大切です。

最初につまずきがちな点も、書籍を読みながら試行錯誤して課題解決していくことで、自身のスキルアップを目指すことができます。思い立ったが吉日、是非業務効率の改善に向けてプログラミング学習に勤しんでください!

スポンサーリンク

Kindle Unlimitedにサインアップして無料体験に登録する
Kindle Unlimitedに登録すると、人気のシリーズ、ベストセラー、名作などに好きなだけアクセスして、シームレスなデジタル読書体験を実現できます。

コメント

タイトルとURLをコピーしました