teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

文法修正

2021/11/17 08:43

投稿

mmkkmm
mmkkmm

スコア103

answer CHANGED
@@ -8,14 +8,14 @@
8
8
  *UTF-8の取り込みは.TextFilePlatform = 65001でOKと思います。
9
9
 
10
10
  追記。以下3列のtest.csvの場合。
11
- ```test.csv
11
+ ```CSV
12
12
  列A前ゼロ,列B指数,列C日付
13
13
  01,1111111111111,2020/1/1
14
14
  02,9999999999999,2021/12/31
15
15
 
16
16
  ```
17
17
 
18
- ```VBA(With句だけ)
18
+ ```VBA
19
19
  With Sheets(targetsheet).QueryTables.Add(Connection:="text;" & SettingFileName, Destination:=Sheets(targetsheet).Range("A1"))
20
20
  .TextFilePlatform = 65001 'UTF-8
21
21
  .AdjustColumnWidth = False '列の幅を自動計算しない

3

文法修正

2021/11/17 08:43

投稿

mmkkmm
mmkkmm

スコア103

answer CHANGED
@@ -8,14 +8,14 @@
8
8
  *UTF-8の取り込みは.TextFilePlatform = 65001でOKと思います。
9
9
 
10
10
  追記。以下3列のtest.csvの場合。
11
- ```CSV
11
+ ```test.csv
12
- 前ゼロ,列B指数,列C日付
12
+ 列A前ゼロ,列B指数,列C日付
13
13
  01,1111111111111,2020/1/1
14
14
  02,9999999999999,2021/12/31
15
15
 
16
16
  ```
17
17
 
18
- ```VBA
18
+ ```VBA(With句だけ)
19
19
  With Sheets(targetsheet).QueryTables.Add(Connection:="text;" & SettingFileName, Destination:=Sheets(targetsheet).Range("A1"))
20
20
  .TextFilePlatform = 65001 'UTF-8
21
21
  .AdjustColumnWidth = False '列の幅を自動計算しない

2

テストデータとコード案を追記しました

2021/11/17 08:41

投稿

mmkkmm
mmkkmm

スコア103

answer CHANGED
@@ -5,4 +5,25 @@
5
5
  問題の列(面倒なら全部の列)を、[表示形式=文字列(xlTextFormat)]で取り込むと良い。
6
6
 
7
7
  *文字列型で取り込んだデータを、後で数値として扱いたい時はValとかCIntで数値に変換。
8
- *UTF-8の取り込みは.TextFilePlatform = 65001でOKと思います。
8
+ *UTF-8の取り込みは.TextFilePlatform = 65001でOKと思います。
9
+
10
+ 追記。以下3列のtest.csvの場合。
11
+ ```CSV
12
+ 前ゼロ,列B指数,列C日付
13
+ 01,1111111111111,2020/1/1
14
+ 02,9999999999999,2021/12/31
15
+
16
+ ```
17
+
18
+ ```VBA
19
+ With Sheets(targetsheet).QueryTables.Add(Connection:="text;" & SettingFileName, Destination:=Sheets(targetsheet).Range("A1"))
20
+ .TextFilePlatform = 65001 'UTF-8
21
+ .AdjustColumnWidth = False '列の幅を自動計算しない
22
+ .TextFileCommaDelimiter = True 'コンマ区切り
23
+ .TextFileColumnDataTypes = Array(xlTextFormat, xlTextFormat, xlTextFormat) '★追加
24
+ '.TextFileColumnDataTypes = Array(2, 2, 2) '★こっちでも動きます
25
+ .Refresh BackgroundQuery:=False 'シートに出力
26
+
27
+ .Delete
28
+ End With
29
+ ```

1

Microsoftの該当ヘルプページのリンクをつけました

2021/11/17 08:40

投稿

mmkkmm
mmkkmm

スコア103

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  0. [数字先頭0落ち] => おそらく表示形式が[標準]になっている為。
2
2
  0. [E+12] => おそらく表示形式が[指数]になっている為。
3
3
 
4
- QueryTables.Addのプロパティの[.TextFileColumnDataTypes]で、各列の表示形式を指定出来る。
4
+ [QueryTablesのプロパティの[.TextFileColumnDataTypes]で、各列の表示形式を指定出来る。](https://docs.microsoft.com/ja-jp/office/vba/api/excel.querytable.textfilecolumndatatypes)
5
5
  問題の列(面倒なら全部の列)を、[表示形式=文字列(xlTextFormat)]で取り込むと良い。
6
6
 
7
7
  *文字列型で取り込んだデータを、後で数値として扱いたい時はValとかCIntで数値に変換。