Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2658 / 13646 ツリー ←次へ | 前へ→

【66687】VBAでのcsvの取り込み VBA初心者 10/9/25(土) 23:59 質問[未読]
【66688】Re:VBAでのcsvの取り込み Abyss 10/9/26(日) 0:39 発言[未読]
【66689】Re:VBAでのcsvの取り込み kanabun 10/9/26(日) 0:43 発言[未読]
【66691】Re:VBAでのcsvの取り込み VBA初心者 10/9/26(日) 11:11 お礼[未読]

【66687】VBAでのcsvの取り込み
質問  VBA初心者  - 10/9/25(土) 23:59 -

引用なし
パスワード
   VBAでcsvファイルを取り込みたいと考えていますが、
以下のマクロだと文字列のまま取り込まれてしまいます。
数字データをエクセル上に数値として取り込むための修正を教えて
頂けませんでしょうか?


Sub test()

Dim csvFile As String
Dim ch As Integer

Dim csvStr As String
Dim str() As String


Dim i As Integer

'CSVファイル名
csvFile = "D:\Test.txt"

'空いている番号を取得
ch = FreeFile

'CSVファイルオープン
Open csvFile For Input As #ch

'CSVファイル読込
i = 1
Do While Not EOF(1)

  '1行読み込む
  Line Input #ch, csvStr

  'カンマ区切りで配列に格納
  str = Split(csvStr, ",")

  'セルのレンジを指定して、配列の値をセット
  Range(Cells(i, 1), Cells(i, UBound(str) + 1)) .value= str


  i = i + 1
Loop

'ファイルクローズ
Close #ch

End Sub

【66688】Re:VBAでのcsvの取り込み
発言  Abyss  - 10/9/26(日) 0:39 -

引用なし
パスワード
   最後にRefreshして見るといいでしょう。

With ActiveSheet.UsedRange
 .FormulaLocal = .FormulaLocal
End With

【66689】Re:VBAでのcsvの取り込み
発言  kanabun  - 10/9/26(日) 0:43 -

引用なし
パスワード
   ▼VBA初心者 さん:
>VBAでcsvファイルを取り込みたいと考えていますが、
>以下のマクロだと文字列のまま取り込まれてしまいます。

変数の↓を
>Dim str() As String

Variant型にしてみてください。なお、「str」はそういう名前の
組み込み関数があるから、別の変数名にしたほうがいいでしょう

すこし高速に読み込むなら、
Sub Try1()
Dim csvFile As String
Dim ch As Integer
Dim b() As Byte
Dim csvStr As String
Dim dat As Variant
Dim v As Variant
Dim i As Long, j As Long
Dim n As Long, m As Long

 'CSVファイル名
 csvFile = Application.GetOpenFilename("CSVファイル,*.csv")
 
 ch = FreeFile()
 Open csvFile For Binary As #ch
  ReDim b(1 To LOF(ch))
  Get #ch, , b()
 Close #ch
 
 csvStr = StrConv(b(), vbUnicode)
 dat = Split(csvStr, vbCrLf)
 n = UBound(dat) - 1
 m = UBound(Split(dat(0), ","))
 ReDim dt(n, m)
 For i = 0 To n
   v = Split(dat(i), ",")
   For j = 0 To m
     dt(i, j) = v(j)
   Next
 Next
 
 With Range("A1")
   .CurrentRegion.ClearContents
   .Resize(n + 1, m + 1).Value = dt()
 End With
End Sub

こんなふうにも書けるとおもいます。

【66691】Re:VBAでのcsvの取り込み
お礼  VBA初心者  - 10/9/26(日) 11:11 -

引用なし
パスワード
   Abyss さん
kanabun さん

ご回答ありがとうございました。
無事に解決できました。

2658 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free