Excel VBA質問箱 IV

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

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


20016 / 76737 ←次へ | 前へ→

【62146】Re:CSVファイルの読み込みについて
発言  kanabun  - 09/6/24(水) 20:31 -

引用なし
パスワード
   ▼困り猫 さん:
>データ内に、記号"|"が含まれるCSVファイルをVBAでExcelファイルへ読み込むと、

> ●CSVデータ
> 1,3,8,0,1|5,9
> ↓VBAで読み込み↓
> ●Excelファイル
> 1,3,8,0,1,9

VBAで読み込むといっても 方法はいろいろあると思いますが、
「Input#ステートメントで」読み込むと、
>"|"以降のデータが勝手に削除されてしまいます。

↑ぼくも初めて経験しましたが、Input# はMS-DOSの時代からのファイル
読み込み法なので、読み方に独特の解釈があり、この独自の仕様が
あるときは 制約になります。
(例)
,1st Project, 
  ↓
 ,1 , "Project" のように "1st" が数値として解釈され、
              2項目データに分割される。
(以下同様で) "2nd Floor", "3rd Base", "4TH Statement" なども同様。
スペースが区切り記号になることも Input#ステートメントの特徴ですね。

>削除されずに、ありのままのデータを読み込む方法はございますでしょうか?

すべて文字列として配列に読み込めば、「1|5」が「1」になってしまうことは
避けられますが、全ての数値データも「文字列」データとしてセルに代入され
てしまうので、数値データ、文字列データ混在のときはVariant配列に
読み込んだほうがよくないですか?

Sub Example1()
  Dim io As Integer
  Dim Buf() As Byte
  Dim v, vv, t
  Dim i As Long, j As Long
  Dim y As Long, x As Long
  Dim myFile
  myFile = Application.GetOpenFilename("CSVファイル,*.csv;*.txt")
  If myFile = False Then Exit Sub
  
  io = FreeFile()
  Open myFile For Binary As io
   ReDim Buf(1 To LOF(io))
   Get #io, , Buf       '全Text 読み込み(ShiftJIS)
  Close io
  v = StrConv(Buf(), vbUnicode) 'Unicodeに変換
  v = Split(v, vbCrLf)     '行に分割
  y = UBound(v)        '最終行
  x = UBound(Split(v(0), ",")) '最終列
  ReDim vv(y, x)
  For i = 0 To y - 1
   t = Split(v(i), ",")
   For j = 0 To x
     vv(i, j) = t(j)    '列に分割
   Next j
  Next i
  ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1) _
   .Resize(y, x + 1).Value2 = vv
  
End Sub

それか、
拡張子が "*.csv" なら、Excelメニュー[ファイル]-[開く]で
単純に開く操作(のマクロ記録からVBAにする Workbooks.Open) とか、

既存のシートにインポートするなら、
[データ]-[外部データの取り込み]-[テキストファイルのインポート]
メニューを使ってインポートすればよいです。
後者の方法なら 列ごとの「データ型」が指定できますので、
文字列として読み込みたい列のデータ型を「テキスト」とか、
日付として読み込みたい列のデータ型を「YMD」とか、明示的に指定
することができます。(マクロ記録 → QueryTables.Add... )

0 hits

【62143】CSVファイルの読み込みについて 困り猫 09/6/24(水) 16:23 質問
【62144】Re:CSVファイルの読み込みについて neptune 09/6/24(水) 16:54 発言
【62152】Re:CSVファイルの読み込みについて 困り猫 09/6/25(木) 11:07 質問
【62153】Re:CSVファイルの読み込みについて neptune 09/6/25(木) 11:20 回答
【62145】Re:CSVファイルの読み込みについて イブX 09/6/24(水) 17:35 発言
【62155】Re:CSVファイルの読み込みについて 困り猫 09/6/25(木) 12:54 お礼
【62157】Re:CSVファイルの読み込みについて kanabun 09/6/25(木) 14:06 発言
【62163】Re:CSVファイルの読み込みについて 困り猫 09/6/25(木) 16:28 お礼
【62174】Re:CSVファイルの読み込みについて kanabun 09/6/26(金) 11:53 発言
【62158】Re:CSVファイルの読み込みについて イブX 09/6/25(木) 14:45 発言
【62164】Re:CSVファイルの読み込みについて 困り猫 09/6/25(木) 16:34 お礼
【62146】Re:CSVファイルの読み込みについて kanabun 09/6/24(水) 20:31 発言
【62147】Re:CSVファイルの読み込みについて neptune 09/6/24(水) 20:48 発言
【62154】Re:CSVファイルの読み込みについて 困り猫 09/6/25(木) 11:45 お礼
【62148】Re:CSVファイルの読み込みについて 困り猫 09/6/24(水) 21:02 お礼

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