質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

2413閲覧

CSVファイルをエクセルで開くVBAをつくりたい

opsy

総合スコア5

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/11/16 08:05

前提・実現したいこと

VBA初心者です。
CSVファイルをエクセルで開くコードを書きたいです。

発生している問題・エラーメッセージ

つまづいているのが、
●数字の先頭の0落ち回避
●UTF-8文字化け対応
●商品コードが4949443102222のところ表示が4.94944E+12になってしまう
といった点です。
※理想はExcelの機能で手作業でCSVを開いたときと同じ状態にしたいと思っています。

該当のソースコード

Public Const targetsheet = "result"
'結果を出力するシート名を指定

Sub CSV取り込みUTF8()

Dim SettingFileName As Variant Sheets(targetsheet).Cells.Clear 'ファイルクリア SettingFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSVファイルの選択") If SettingFileName = False Then Exit Sub End If With Sheets(targetsheet).QueryTables.Add(Connection:="text;" & SettingFileName, Destination:=Sheets(targetsheet).Range("A1")) .TextFilePlatform = 65001 'UTF-8 .AdjustColumnWidth = False '列の幅を自動計算しない .TextFileCommaDelimiter = True 'コンマ区切り .Refresh BackgroundQuery:=False 'シートに出力 .Delete End With

Sheets(targetsheet).Activate

End Sub

試したこと

上記はネットから拾ったコードを加工したものですが、
理想の通りにならず、悩んでいます。

補足情報(FW/ツールのバージョンなど)

Excel for Microsoft 365 を使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

  1. [数字先頭0落ち] => おそらく表示形式が[標準]になっている為。
  2. [E+12] => おそらく表示形式が[指数]になっている為。

QueryTablesのプロパティの[.TextFileColumnDataTypes]で、各列の表示形式を指定出来る。
問題の列(面倒なら全部の列)を、[表示形式=文字列(xlTextFormat)]で取り込むと良い。

*文字列型で取り込んだデータを、後で数値として扱いたい時はValとかCIntで数値に変換。
*UTF-8の取り込みは.TextFilePlatform = 65001でOKと思います。

追記。以下3列のtest.csvの場合。

CSV

1列A前ゼロ,列B指数,列C日付 201,1111111111111,2020/1/1 302,9999999999999,2021/12/31 4

VBA

1With Sheets(targetsheet).QueryTables.Add(Connection:="text;" & SettingFileName, Destination:=Sheets(targetsheet).Range("A1")) 2.TextFilePlatform = 65001 'UTF-8 3.AdjustColumnWidth = False '列の幅を自動計算しない 4.TextFileCommaDelimiter = True 'コンマ区切り 5.TextFileColumnDataTypes = Array(xlTextFormat, xlTextFormat, xlTextFormat) '★追加 6'.TextFileColumnDataTypes = Array(2, 2, 2) '★こっちでも動きます 7.Refresh BackgroundQuery:=False 'シートに出力 8 9.Delete 10End With

投稿2021/11/16 17:22

編集2021/11/17 08:43
mmkkmm

総合スコア103

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

opsy

2021/11/17 08:07

早々にご回答くださり、ありがとうございます! 大変恐縮なのですが、コードで書くとすると、どの位置にどのように書けばよろしいのでしょうか? 当方初心者につき、調べてみたもののよくわからず…すみませんがご教示くださりましたら幸いです。
mmkkmm

2021/11/17 08:46

.Refresh の前に.TextFileColumnDataTypes = Array(2, 2, 2)をつけるとよいです。 (2は読み込むCSVの列に対応しているので、列の数だけ必要です。 回答に追記しました)
opsy

2021/11/17 08:52

すぐにご回答くださり、本当にありがとうございます! 動きました!本当に感謝です!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問