エクセルVBAで外部ファイルからデータをランダムに取得する方法【VBA】

目次

経緯

エクセルのVBA(Visual Basic for Applications)は、日々の作業を効率化するための強力なツールです。今回は、外部のエクセルファイルからランダムにデータを取得し、現在の作業中のシートにそのデータを反映させる方法を紹介します。この技術は、大量のデータからランダムにサンプルを抽出する際などに非常に便利です。

コード

まず、コードを書きます。hayashi.xlsxのデータを取得しています。

Sub FillAdjacentCellFromExternalFile()

    Dim TargetCell As Range
    Dim ExternalWorkbook As Workbook
    Dim DatabaseRange As Range
    Dim RandomText As String
    Dim AdjacentText As String

    ' 対象のセルをアクティブなセルとして設定
    Set TargetCell = ActiveCell

    ' 外部のExcelファイルを開く
    Set ExternalWorkbook = Workbooks.Open("C:\Users\mori\デスクトップ\hayashi.xlsx")

    ' データベースの範囲を設定 (例: C1:C100)
    Set DatabaseRange = ExternalWorkbook.Sheets(2).Range("C1:C100")

    ' ランダムに文字を取得 & 隣のセルの文字も取得
    RandomText = GetRandomText(DatabaseRange, AdjacentText)

    ' F列のセルにランダムに取得したデータを設定
    TargetCell.Value = RandomText
    
    ' O列のセルにランダムに取得したセルの隣のデータを設定
    TargetCell.Offset(0, 8).Value = AdjacentText

    ' メッセージボックスで取得した文字を表示
    MsgBox "取得した文字: " & RandomText

    ' 外部のExcelファイルを閉じる(変更を保存せず)
    ExternalWorkbook.Close SaveChanges:=False

End Sub

Function GetRandomText(rng As Range, ByRef AdjacentData As String) As String
    Dim RandomIndex As Long
    Dim MaxRow As Long

    Randomize ' この行を追加

    ' ランダムにインデックスを取得
    MaxRow = rng.Rows.Count
    RandomIndex = Int((MaxRow - 1 + 1) * Rnd + 1)
    
    ' 隣のセルのデータを取得
    AdjacentData = rng.Cells(RandomIndex, 2).Value

    ' ランダムに取得した文字を返す
    GetRandomText = rng.Cells(RandomIndex, 1).Value

    ' 診断情報を表示
    MsgBox "最大の行数: " & MaxRow & vbCrLf & "ランダムに選択されたインデックス: " & RandomIndex & vbCrLf & "取得されたテキスト: " & GetRandomText

End Function

基本的なコードの構造

示されたVBAコードは、大きく分けて二つの部分から構成されています。一つはメインのサブルーチン Sub FillAdjacentCellFromExternalFile()、もう一つは補助的な関数 Function GetRandomText()です。

Sub FillAdjacentCellFromExternalFile()

このサブルーチンの役割は、外部ファイルを開いて特定の範囲(この例ではC1:C100)からランダムにテキストを取得し、それをアクティブなセルとその隣のセルに挿入することです。また、取得したデータをメッセージボックスで表示し、最後に外部ファイルを閉じます。

Function GetRandomText()

この関数は、指定された範囲からランダムにテキストを選び出し、その隣のセルのデータも取得する役割を担っています。ランダムなインデックスの生成にはRnd関数を使用し、関連する診断情報をメッセージボックスで表示します。

注意点と改善の余地

このコードを使用する際には、いくつかの注意点があります。まず、外部ファイルのパスが固定されているため、ファイルの場所が変わった場合はパスを更新する必要があります。また、エラーハンドリングが含まれていないため、ファイルが見つからない場合やデータ範囲が不適切な場合にはエラーが発生します。これらの点を改善することで、より堅牢で使いやすいコードにすることができます。

まとめ

エクセルVBAを用いて外部ファイルからデータをランダムに取得する方法は、データ処理や分析作業を効率化する上で非常に有益です。上記のコード例を参考に、自身のニーズに合わせてカスタマイズし、日々の業務に役立ててみてください。

何かの参考になれば幸いです。

ここまで読んでいただきありがとうございました。

スクールの紹介

最後に宣伝をさせてください。

夢見るAIエンジニアへ、今こそ一歩を踏み出せ!

最近、AI技術やデータサイエンスに興味を持ち始めたあなた。将来、AIエンジニアやデータサイエンティストとして活躍したいと考えているかもしれません。また、AIを使って業務課題や研究課題を解決したい、あるいは教養としてAIの知識を深めたいと思っている方もいるでしょう。

しかし、学び始めるとなると「どこから手をつけて良いのか分からない」「専門的すぎて理解できない」といった悩みが生じることも。そんなあなたのために、この3ヶ月間集中してAIプログラミングを習得するオンラインコーチングサービスがオススメです!

なぜこのサービスが選ばれるのか?その理由はこちら

  1. 初心者から上級者まで
    完全なプログラミング初心者から研究者まで、幅広い方々に優良なコンテンツが提供されます。
  2. 徹底的な進捗管理
    受講者の進捗をしっかりとチェックし、つまずきやすいポイントでのフォローが万全です。
  3. 専属メンターによる徹底サポート
    AIの学び方から、実際の適用まで、専属のメンターが手厚くサポートします。
  4. 場所を選ばず学べるオンライン完結
    東京以外の地域からも、気軽に学び始めることができます。

信頼の実績多数!
・日本最大級のプログラミングスクール実績
・受講者総数700名以上
・SaaS型学習サービス会員65,000名以上
・企業導入実績120社以上
・グッドデザイン賞受賞
・著名な賞受賞歴や経団連加盟も実現

夢を叶えるための第一歩を、一緒に踏み出しませんか?今なら、あなたもその一員として学び始めることができます!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次