ExcelマクロでCSVファイルを読み込んでみた

ExcelマクロでCSVファイルを読み込んでみたの画像

Excelマクロとは

みなさんこんにちは、こんばんは、おはようございます。
SE作業で日々脳汁を垂れ流しているイガラシです。

みなさんはExcelマクロを使ってますか?

僕は使ってます。

親の顔を忘れるくらいVBエディタを見て、パチパチとコードを打ち込んでおります。

あまりにもVBエディタを見すぎたせいか、親の顔が再生ボタンにしか見えません。。。。

Excelマクロとは何かと申しますと、Excelでの作業を自動化するためのプログラミングコードになります。

このマクロを利用すると、あら不思議、ボタン1つで、大量のファイルをまとめたり、データを読み取って、資料を作ったり、どんな夢でも叶えてくれる、夢のようなシステムなのです。。。限度はありますけどね。

そんなExcelマクロで、今まで僕が作った中からこれは「便利だな~」というものを紹介したいと思います。

CSVファイルを読込むマクロ

CSVファイルとは、カンマと呼ばれる記号「,」で区切られたテキストファイルの事を言います。
お客様とのデータのやり取りや、データベースのデータを抽出した時によくみるファイルです。
この業界で働いていれば、そりゃあもう、親の顔をわs

このCSVファイルは、Excelをインストールしたパソコンでしたら、特別に設定をしない限り、Excelで開かれるようになっております。
Excelがインストールされていないパソコンでしたら、メモ帳などのテキストファイルを開くアプリで表示されるものです。

Excelで自動で開かれるんだったら、何もマクロにする必要ってある?
そう思う方もいらっしゃると思います。

たしかにCSVファイルを開くだけならば、何もマクロで行う必要はありません。

ただ、Excelは、とっても気遣いができ、思いやりのある子なので、CSVファイルを中身を判断して、データの形式(データの種類)を自動的に変えてしまう性格なのです。

優しい!

うんうん、数字を見て数値形式と判断したんだよね。
わかるわかる。だから前にあるたくさんのゼロを消しちゃったんだよね。

それ、商品コードですからーー!やめて!

優しさが重いッ

なので、マクロを1つ作っておくと後々便利になるわけです。
以下にコードを記載しますね。

~Excelマクロ はじまり~

Public Sub ImportCsv()

    Dim App As Application
    Dim WrkBook As Workbook
    Dim WrkSheet As Worksheet

    Dim MaxRow As Double
    Dim MaxClm As Double
    Dim RangeStr As String
    
    Dim ReadFilePath As String
    Dim ReadFileName As String
    
    Set App = Application
    Set WrkBook = App.Workbooks(ThisWorkbook.Name)
    WrkBook.Activate

    Set WrkSheet = WrkBook.ActiveSheet
    WrkSheet.Select

    ReadFileName = ""
    CreateObject("WScript.Shell").CurrentDirectory = App.ThisWorkbook.Path
    ReadFilePath = App.GetOpenFilename("csvファイル,*.csv")
    If ReadFilePath = "False" Then
        ReadFileName = ""
        Exit Sub
    End If
    ReadFileName = Dir(ReadFilePath)
    ReadFilePath = Replace(ReadFilePath, ReadFileName, "")

    App.Cells.Select
    App.Selection.Delete Shift:=xlUp
    
    FileImport App, WrkSheet, ReadFilePath, ReadFileName, "A1"

    MaxClm = App.Cells(2, Columns.Count).End(xlToLeft).Column
    RangeStr = "A1:" & App.Cells(1, MaxClm).Address(RowAbsolute:=False, ColumnAbsolute:=False)
    LineSet App, WrkSheet, RangeStr
    ColorSet App, WrkSheet, RangeStr, RGB(169, 208, 142)
    
    App.Cells.EntireColumn.AutoFit
    App.Range("A1").Select
    
    Set App = Nothing
    Set WrkBook = Nothing
    Set WrkSheet = Nothing
    
End Sub

Private Function FileImport(getApp As Application, getWrkSheet As Worksheet, getFilePath As String, getFileName As String, getSetRange As String)
'外部ファイルのインポート処理
    
    'ADOオブジェクト変数
    Dim AdoCnt As New ADODB.Connection
    Dim AdoRst As New ADODB.Recordset
    Dim StrSqlCmd As String
    
    Set AdoCnt = New ADODB.Connection
    With AdoCnt
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .Properties("Extended Properties") = "text;FMT=Delimited;HDR=NO;"
        .Open getFilePath
    End With

    Set AdoRst = New ADODB.Recordset
    
    StrSqlCmd = "SELECT * FROM [" & getFileName & "];"
    
    AdoRst.Open StrSqlCmd, AdoCnt, adOpenKeyset, adLockReadOnly
    If AdoRst.RecordCount > 0 Then AdoRst.MoveFirst
    
    '指定したセルに選択されたデータを貼付
    getWrkSheet.Select
    getApp.Range(getSetRange).CopyFromRecordset AdoRst
    RowEnd = RowSta + AdoRst.RecordCount
    AdoRst.Close
    
    Set AdoRst = Nothing
    Set AdoCnt = Nothing

End Function

Private Function LineSet(getApp As Application, getWrkSheet As Worksheet, getSetRange As String)
'エクセルセルに格子罫線を設定

    getWrkSheet.Select
    getApp.Range(getSetRange).Borders.LineStyle = False
    getApp.Range(getSetRange).Borders.LineStyle = True

End Function

Private Function ColorSet(getApp As Application, getWrkSheet As Worksheet, getSetRange As String, getSetColorNum As Double)
'エクセルセルへの色付け

    getWrkSheet.Select
    With getApp.Range(getSetRange).Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = getSetColorNum
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

End Function

~Excelマクロ おわり~

このマクロを実行するためには、「Microsoft ActiveX Data Objects *.* Library」の参照が必要になります。

参照方法は以下の通りです。

Excelの画面に「開発」リボンが無い場合、画面のリボンの所で右クリックし、「リボンのユーザー設定」をクリックします。

「開発」にチェックします。OKをクリックします。

「開発」リボンが表示されたら、メニュー内の「Visual Basic」をクリックします。

「ツール」→「参照設定」をクリックします。

参照可能なライブラリファイルより、「Microsoft ActiveX Data Objects *.* Library」、ここでは、「Microsoft ActiveX Data Objects 6.1 Library」を選択します。
OKをクリックして適用してください。

「挿入」→「標準モジュール」をクリックし、モジュールの作成を行います。

標準モジュールが作られますので、何も記載されていないところに、上記にあるマクロのコードをコピーして貼り付けてください。

コード貼り付け。

コードを貼り付けたExcelファイルを保存するときは、拡張子を「xlsm」にして保存してください。

このマクロで読込むためのCSVファイルを用意します。

TestData.csv
 "商品コード","商品名"
 "0000000001","洗濯洗剤"
 "0000000002","シャンプー"
 "0000000003","リンス

1行目が項目名を表し、2行目以降がデータになります。
全てダブルクォーテーション「”」で囲まれたデータになります。

今回のマクロは、全てダブルクォーテーション「”」で囲まれたデータでないと上手く取り込めないので、ご注意ください。

Excelファイルを保存したら、Excelシートがある画面を表示し、「開発」→「マクロ」をクリックします。

コピーしたコードの中にある「ImportCsv」というマクロが表示されますので、それを選択し、実行をクリックします。

ファイルを選択するウィンドウが表示されますので、用意したCSVファイルを選択します。

無事、CSVファイルの内容を読込むことができました。

最後に

このようにExcelマクロは、利用するととても利便性の高いプログラムになります。
ゼロからプログラムを作るのは確かに大変ですが、インターネット上にはたくさんのExcelマクロを紹介しているサイトもありますので、それらを上手く組み合わせて、プログラミングしてみてはいかがでしょうか。

一度作ってしまえば、それは自分の知的な資産になりますし、自分だけでなく他人の助けにもなるツールだと思います。

ぜひ、楽しみながら挑戦してみてください。

この記事をシェアする

関連コラム

資料ダウンロード

弊社が提供する各種サービス資料を 無料でダウンロードいただけます。

資料一覧ページへ