- ベストアンサー
CSVの前ゼロを消さずにエクセルマクロで読み込む方法
市外局番、市内局番、加入者番号を別フィールドで記録したCSVがあります。(120列) エクセルでそのまま読み込むと前ゼロが消えてしまうので、以下の方法をとっています。 1.拡張子変更 hoge.csv を hoge.txt に変更 2.ファイル→開く→テキストファイル→hoge.txtを選択 3.テキストファイルウィザード 4.電話番号の項目を「文字列」に指定する。 この一連の流れをマクロにしたいのですが、うまくいきません。 [マクロ1] Sub csv_open1() Dim myFieldInfo(1 To 256) As Variant Dim i As Integer Dim strFileName strFileName = Application. _ GetOpenFilename If strFileName <> False Then For i = 1 To 256 myFieldInfo(i) = Array(i, 2) Next Workbooks.OpenText strFileName, _ DataType:=xlDelimited, _ Comma:=True, FieldInfo:=myFieldInfo End If End Sub ▼結果 失敗。前ゼロが消えた状態で読み込まれた。 Arrayの256を120にしても同様でした。 myFieldInfo(i) = Array(i, 2)で文字列に指定したはずなのになぜ文字列にならないのでしょうか。 ご存知の方、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
さらに気になったんで調べてみました。 どうやら、拡張子が csv だとすでに関連付けされているためうまくいかない模様です。 それで解決法として QueryTables というものが使用できるようです。 以下がコードとなります。 Sub csv_open1() Dim strFilePath As String Dim strFileName As String Dim ifind1 As Integer strFilePath = Application.GetOpenFilename ifind1 = InStrRev(strFilePath, "\") strFileName = Mid$(strFilePath, ifind1 + 1) Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = strFileName With Sheets(strFileName).QueryTables.Add(Connection:="TEXT;" & strFileName, Destination:=Range("A1")) .TextFileParseType = xlDelimited .TextFileCommaDelimiter = True .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2) .Refresh End With End Sub このコードでうまくいきましたよ。
その他の回答 (2)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
ツール→データ→外部データの取込→テキストファイルのインポート を実行すれば、拡張子がCSVのままでも問題ありません。 もちろん、フィールドのデータ型は文字列にする必要はありますが。 詳しくは、マクロの記録を行って見てください。
お礼
これなら拡張子を変えずにできそうですね。 拡張子を変えるのが最大のネックだったもので助かります。 ありがとうございました。 マクロの記録でいろいろ応用ができそうです。
- salf
- ベストアンサー率42% (27/64)
ちょっと気になってんで私も調べてみました。 できないですね、確かに・・・。 私が調べた範囲だと、拡張子の csv がどうもだめなようです。 ためしに同じコードを csv からほかの拡張子に変更して起動してみると正常に動作します。 なんでやるとしたら csv ファイルを拡張子を変更してコピーしてそれを開くって方法ぐらいしか 残念ながら今の状態では思い浮かびません。。。 これって仕様なんですかね???
お礼
ありがとうございます。 確かにcsv以外にすれば正常に読めました。 1.拡張子変更 hoge.csv を hoge.txt に変更 2.マクロ実行 と手順は短縮できますが、拡張子を変更という作業を伴うのは困ったものです。
お礼
2,2,2,2,2,2,2,2の数を増やすことで無事マクロが結果を出しました。 ありがとうございました。