エクセル

エクセルVBA①-CSVデータの取り込み【コード付き】

この記事では、VBAを使って他のEXCELファイルのデータを読み込み、EXCELのシートに貼り付ける機能のマクロファイルの作り方を説明します。

初心者でも簡単に使えると分かりやすく説明できればと思います。コードを覚える必要ありません。

このVBAはいろいろな便利な機能を作るときによく使いますので、ぜひご覧ください。

CSVデータの取り込みマクロファイルの作成手順

 手順①

Excelで[新規 Microsoft Excel ワークシート]を作成

手順②

エクセルシートのクイックアクセスツールバーに[開発]ボタンがあるかどうかを確認

1.[開発]ボタンがないの場合は③へ

2.[開発]ボタンがあるの場合は⑤へ

手順③

  1. Excelの[ファイル]タブを開き、左ペインの[オプション]をクリック
  2. [Excelのオプション]ダイアログの左ペインで[リボンのユーザー設定]を選択する
  3. 右側のリストにある[開発]の前にあるチェックを「オン」にして、[OK]ボタンでダイアログを閉じる

手順④

Excelのリボンに[開発]タブが表示さればOKです

手順

  1. [開発]タブの[Visual Basic]をクリック
  2. [挿入]をクリックして[標準モジュール]を選択

手順

下記のCSVデータの取り込みのコードを空白の部分にコピーする

手順⑦

  1. エクセルシートを二つ作成
  2. [処理実行]と[取込データ]のエクセルシート名に変更

手順⑧

  1. [開発]タブの[挿入]をクリック、最初のアイコンを選択
  2. 任意のセルにクリック

手順⑨

マクロの登録窓が出て来るので、[データ取込]を選択

手順⑩

ボタンを作成しましたら、右クリックして好きのスタイルに編集してください。

手順⑪

ファイルを[Excelマクロ有効ブック]を選択して保存

CSVデータの取り込みファイルの操作手順

手順①

  1. エクセルシート[処理実行]の[データ取込]ボタンをクリック
  2. [データファイルを指定して下さい。]のメッセージBOXが表示されます。
  3. [OK]をクリック

手順②

エクセルCSVデータファイルを指定します。

手順③

  1. CSVデータがエクセルシートの[取込データ]にコピーされ
  2. [データ取り込みが完了しました。]のメッセージBOXが出たら、問題なく作動している証拠です。

CSVデータの取り込みのコード

    Dim buf, buf1 As String 'ファイル存在チェック用文字列
    Dim curwb, wb, wb1, wb2 As Workbook '処理用ワークブック
    Dim Target As String  '取り込みデータファイルパス
    Dim MaxRow, MaxRow2 As Long 'データ件数

Sub データ取り込み()
          
    Call データファイルチェック
    Call データ取り込み処理
    MsgBox ("データ取り込みが完了しました。")
    
    'メインシートをアクティブに
    Sheets("処理実行").Activate

End Sub

Sub データ取り込み処理()

    Set curwb = ActiveWorkbook   'カレントワークブックを保存
    Workbooks.Open Target   'エラーが無ければ処理対象のブックを開く
    Set wb = ActiveWorkbook   '後続処理のために開いたブック名を保存
    MaxRow = Cells(Rows.Count, 1).End(xlUp).Row'データの件数をカウント
    'データのコピー
    Worksheets(1).Range("1:" & MaxRow).Copy
    curwb.Worksheets("取込データ").Rows("1:1").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False  ' コピーモードを解除 
    wb.Close 'ファイルのクローズ
          
End Sub

Sub データファイルチェック()

    '取り込みデータのパスを取得
    MsgBox ("データファイルを指定して下さい。")
    Target = Application.GetOpenFilename(, , "データファイル選択")
      
    'ファイルの存在チェック
    buf = Dir(Target)
    If buf = "" Then
        MsgBox Target & vbCrLf & "上記ファイルが見つかりません。", vbExclamation
        End
    End If
    
    '同名ブックのチェック
    For Each wb In Workbooks
        If wb.name = buf Then
            MsgBox buf & vbCrLf & "はすでに開いています", vbExclamation
            End
        End If
    Next wb
    

End Sub

プログラムの解説

それでは、プログラムの中身を解説していきます。

まずは変数の宣言

Dim buf, buf1 As String ‘ファイル存在チェック用文字列

Dim curwb, wb, wb1, wb2 As Workbook ‘処理用ワークブック

Dim Target As String ‘取り込みデータファイルパス

Dim MaxRow, MaxRow2 As Long ‘データ件数

▼変数に関する詳しい情報が知りたい方は下記のサイトをご覧ください。▼

変数と定数|VBAエキスパート対策
・変数の意味 ・変数の宣言 ・変数の代入と取得 ・スコープ ・定数の意味と使い方 【ここでのポイント】 変数・定数の宣言とその適用範囲(スコープ)をしっかり覚えて下さい。試験対策としては、・データ型 ・スコープ このあたりは、問題が作りやす...

次はメインのプログラム動作指示

Sub データ取り込み()

Call データファイルチェック

Call データ取り込み処理

MsgBox (“データ取り込みが完了しました。”)

‘メインシートをアクティブに

Sheets(“処理実行”).Activate

End Sub

このマクロプログラムは三つの動作を設定しました。

上記のコードを訳するとしたら、

まず、『データファイルチェック 』を実施

次は『データ取り込み処理 』を実施

上記の実施完了したら、メッセージ”データ取り込みが完了しました。”を出して、

最後はエクセルシート「処理実行」に戻ります。

最後は個別プログラム動作指示

Sub データ取り込み処理()

Set curwb = ActiveWorkbook ‘カレントワークブックを保存

Workbooks.Open Target ‘エラーが無ければ処理対象のブックを開く

Set wb = ActiveWorkbook ‘後続処理のために開いたブック名を保存

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row’データの件数をカウント

‘データのコピー

Worksheets(1).Range(“1:” & MaxRow).Copy curwb.Worksheets(“取込データ”).Rows(“1:1”).PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False ‘ コピーモードを解除

wb.Close ‘ファイルのクローズ

End Sub

上記のコードは開いたCSVデータをエクセルシート「取込データ」にコピーするように指示している。

Sub データファイルチェック()

‘取り込みデータのパスを取得

MsgBox (“データファイルを指定して下さい。”)

Target = Application.GetOpenFilename(, , “データファイル選択”)

‘ファイルの存在チェック

buf = Dir(Target) If buf = “” Then

MsgBox Target & vbCrLf & “上記ファイルが見つかりません。”, vbExclamation

End

End If

‘同名ブックのチェック

For Each wb In Workbooks

If wb.name = buf Then

MsgBox buf & vbCrLf & “はすでに開いています”, vbExclamation

End

End If

Next wb

End Sub

上記のコードはCSVデータファイルを指定させて開くように指示を出しています。

取込できないファイルや、すでに開いているファイルをエラーメッセージ出すように指示している。

まとめ

このエクセルマクロファイルの注意事項:

  • 取込CSVデータのA列は必ず最終行までデータがあるように
  • 取込めるデータはエクセルCSVデータファイルのみ、テキスト型は取り込めない

後記:

わたしはマクロコードやプログラムを一から教えることはできません。あくまでも初心者でもマクロを使えるように発信していきたいと思います。

仕事効率と精度アップして、余った時間を自己研鑽に使えたら幸いです。

マクロはどうしてもやっているうちに自分の好みにカスタマイズしたいと思いがちなので、焦らずに最初はやってみること、使ってみることで、いつの間にか必要な知識は勝手に脳に刻み込んでいきます。

それは私のスタイルです、まずは手を動かすこと。

一緒に頑張りましょう!

コメント

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