【CSVの数字0落ち回避】エクセルUTF-8文字化け対応(VBAコピペマクロあり)
CSVがわかると作業の幅が広がります。
システム職でない人でもパソコンでデータを扱う機会が増えてきた昨今、「CSVファイル」の扱いに困ることがあるかと思います。
ファイルをダブルクリックで開くと、エクセルの画面で開くことが多いですが、文字化けしていたり、数字の「0」がなくなってしまうこともしばしば。
周りの人が困らずに作業していると、自分だけ質問もできない気がしてしまいます。
そこで今回はCSVファイルの扱い方をご紹介します。
【この記事を読むメリット 】
- CSVファイルの扱いに悩まなくなる
それでは今回のコンテンツです。
CSVとは何か
wikipediaによれば、CSVとは、
comma-separated values。
いくつかのフィールド(項目)を区切り文字であるカンマ「,」で区切ったテキストデータおよびテキストファイル。
Comma-Separated Values - Wikipedia
とあります。
例えば、下記のような情報を持ったファイルのことです。
改行はそのままですが、項目の間がカンマで区切られています。
No.,商品,値段
1,りんご,100
2,みかん,50
これをエクセルで開くと、表のように表示されます。
No. | 商品 | 値段 |
1 | りんご | 100 |
2 | みかん | 50 |
まずは、CSVはデータファイルの種類であり、エクセルはそれを見るためのシステムと解釈しましょう。
エクセルを「ファイルの種類」と思ってしまうとわからなくなるので注意。
エクセルの機能を使う
エクセルは、データファイルを見るためのシステムです。
しかし、残念ながらいくつか都合の悪いことがあります。
- 先頭が数字の「0」の場合、「0」がなくなる
- 日付を「2019/07/30」としても「07」が「7」になる
- 文字コードが特殊(UTF-8など)な場合、開いたときに文字化けする など
これはエクセルの仕様であるため、仕方のない動きです。
ファイルを開く際に自動で表示設定をしてしまうので、このようになってしまいます。
そんなときは、正しい方法で再度ファイル開きなおしましょう。
方法は2つあります。
- 手作業でCSVを開く
- VBAマクロを書く
1.手作業でCSVを開く
エクセルの機能を使うことで、文字化けなし、0落ちなしで読込みをすることができます。
1.エクセル上部のデータ をクリック
2.外部データの取り込み>テキストファイル をクリック
3.読込み対象のファイルを選択
4.「カンマやタブなどの区切り文字によってフィールドことに区切られたデータ」を選択し、文字コードを選択。次へ をクリック
UTF-8の場合はここで文字コードを65001にします。
5.区切り文字>カンマを選択し、次へ をクリック
6.列を選択し、文字列を選択し、完了 をクリック
7.最後に貼付け先を指定すれば完了です。
これで元のファイルデータのまま、文字化けなしでデータを開くことができます。
もう一度読み込めば問題は解決!
2.VBAマクロを書く
シート上に「CommandButton1」を設置し、「CSVデータ取込み」シートを作成した上で下記のコードをVBAコードとしてコピーしてください。
赤字のところは読込む列の数(A~AAであれば27)、青字のところは文字コードです。
こちらはUTF-8の文字コードに対応しています。通常のSift-JISを利用したい場合は932としてください。
Private Sub CommandButton1_Click()
Dim A_Sheet 'Excelファイルのシート名
Dim Csv_Import_File '読込むCSVファイル名
A_Sheet = ActiveSheet.Name '現在アクティブなシート名
Csv_Import_File = Application.GetOpenFilename("CSVファイル,*.csv") 'CSVファイル選択
If Csv_Import_File = "False" Then Exit Sub 'キャンセル終了
ThisWorkbook.Sheets("CSVデータ取込み").Cells.Clear '「CSVデータ取込み」シートのデータを全削除
ThisWorkbook.Sheets("CSVデータ取込み").Cells.NumberFormatLocal
Dim disp_style()
Dim i
i = 0
Do While i <= XXX
disp_style(i) = 2
i = i + 1
Loop
With Sheets("CSVデータ取込み").QueryTables.Add(Connection:="TEXT;" & Csv_Import_File, Destination:=Sheets("CSVデータ取込み").Range("A1"))
.Name = "test" '名前設定
.FieldNames = True 'データの列見出し(1行目)太字
.RowNumbers = False '行番号表示
.Refresh BackgroundQuery:=False 'バックグラウンド更新
.RefreshPeriod = 0 '定期更新の時間設定
.PreserveFormatting = False 'セル書式の保持
.AdjustColumnWidth = True '列の幅自動調整
.FillAdjacentFormulas = False 'クエリーテーブルの更新時、数式を自動更新するかを設定する
.RefreshStyle = xlInsertEntireRows '新規データの行全体を挿入し、使用されていないセルはクリア
.SavePassword = False 'パスワード保存
.TextFileParseType = xlDelimited 'カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ
.TextFileStartRow = 1 '開始列
.TextFilePlatform = 65001 '文字コード(UTF-8)
.TextFilePlatform = xlWindows 'OS
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True '区切り文字=カンマ
.TextFileSpaceDelimiter = False
.TextFileTextQualifier = xlTextQualifierDoubleQuote 'ダブルクォーテーション単位でデータを切る
.TextFileColumnDataTypes = disp_style()
.Refresh
.Parent.Names(.Name).Delete
.Delete
End With
Worksheets(A_Sheet).Activate 'A_Sheet をアクティブに
MsgBox ("取り込みが完了しました")
End Sub
このマクロで、読込み対象のCSVを選択後、データの読込みができます。
マクロまで使えれば上級者。部署で展開もできるので、人気者に。
基礎IT知識はこれから必須
CSV自体は難易度は高くありませんが、正しく理解できていない人もまだまだ多い状況です。正しく理解し使いこなせると、社内でも評価も高くなるかもしれません。
DMMグループのプログラミングスクールでは、無料相談のほか、転職保証・就職保証まで付いたレッスンが受けられます。
これを機に新しいスキルを身につけてもよいでしょう。
本当はこんな面白くない仕事したくない、という方はこちら