【Excel VBA】桁数が足りない?csvファイルからのデータ取り込み

PCスキル

本日はExcel VBAを用いたマクロについてです。

csvファイルからExcelへデータを取り込むには、いくつか方法があるのですが、本記事のようなエラーで困った人向けに対処法を解説します。

こんな人におススメ

csvファイルをExcelで開いて、コピペするマクロで処理している方

csvデータの表示形式が指数表示のものを扱う方

上の2つの処理の仕方で困っている方

前提:対象となるエラー

エラー内容
  • Excelでcsvファイルを開く
  • csvファイルのデータをコピーする
  • 別のExcel(集計用のExcel、解析用のExcel)ファイルへデータを貼り付ける
貼り付けたデータの桁数が短くなっている(丸められている)

Workbook.openのようなコードでcsvファイルを開いて、CopyとPasteでゴリゴリ貼り付けていくようなマクロを使っている場合に起こるエラーです。

さて、エラーの詳細は下図のような感じの現象です。

出力先のExcelでは最後の桁の数字が表示されていません

これの困った点は、初見では気づかない、ということですね。

特にポップアップでエラーです、みたいなことが出ないので…

私の場合、いくつかデータ処理をしてグラフ化したときに気づきました。

本記事では、ある程度ExcelのVBAを取り扱ったことのある人向けに書いておりますので、細かいVBAの設定などの説明は省きます。

対処方法

上記エラーの対策を2点紹介します。

エラー対処法
  1. 表示形式を変えてから貼り付ける
  2. csvファイルを開かずに直接読み込むマクロに変更する

表示形式を変えてから貼り付ける

こっちの方が簡単です。

csvファイルの表示形式が指数になっている場合、これを” 標準”に変更します。

VBAでは下記のようなコードを、 csvのコピーする前に入れればOKです。

Columns("A:B").Select
Selection.NumberFormatLocal = "G/標準"

この2行を入れるだけです。

A列とB列のフォーマットを”G/標準”に変更するという命令です。

csvファイルを開かずに直接読み込むマクロに変更する

こちらは1行ずつcsvファイルのデータを読み込むマクロで、代用するやり方です。

コピペ先のExcelファイルで下記のマクロを実行します。

Dim n,m As Long
       Open csv_File For Input As #1
        n = 1
        Do Until EOF(1)
            Line Input #1, buf
            var = Split(buf, ",")
            For m = 1 To UBound(var)
            Cells(n, 1) = var(0)
            Cells(n, 2) = var(1)
            Next m
            n = n + 1
        Loop
    Close #1

2行目の”csv_File”がcsv形式のデータファイルの指定で、

csv_File =『保存先のフォルダのパス』 &”¥”$『ファイル名.csv』

2行目より前の行で指定してください

フォルダのパスまでを入れることを忘れずに…です。

4行目からはcsvファイルの1行目から終わりまで読み込み続ける動作になっています。

どちらで対処すべき?

基本的には 指数表示を直すだけの方が簡単だと思います。

コンピュータの性能次第のところでもありますが、csvファイルを1行ずつ読み込むマクロは時間がかかることがあります

私のようにcsvファイルが10万行以上に及ぶことが珍しくない場合、csvファイルをExcelで開いてコピペするマクロの方が、動作が速いことも多いです。

直接読み込むマクロは、ノートパソコンのスペックだと相当厳しいです。

その日の業務終了直前にマクロを動作させて、翌日に結果を確認する、ということをしているのですが、エラーで止まっていると泣きを見ます。

ですが、本記事で紹介したような桁落ちのエラーなどが発生する場合がありますので、どうしてもうまくいかない場合は、直接読み込むマクロを試してみましょう

また、このcsvファイルを直接読み込むマクロですが、実はこの方法は txtファイルなどのテキストファイルにも応用できます

txtファイルでデータをまとめなければいけないときは、直接読み込むマクロで処理しましょう。

まとめ

本記事では、Excelのマクロでデータ処理を行う際のエラーの一つについて解説しました。

csvファイルからExcelファイルへコピペすると、桁の最後が落ちてしまうことがあるんですね。

この対策ですが、

指数表示から標準形式での表示に変更してからコピペする、という対策と、

マクロ自体を変更して直接csvデータを読み込む、という対策の2点を紹介しました。

是非とも参考にしていただいて、みなさまの仕事に活かしていただければと思います。