Excel VBA質問箱 IV

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

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


2169 / 13645 ツリー ←次へ | 前へ→

【69568】CSV読み込みで たつのこ 11/8/3(水) 15:34 質問[未読]
【69571】Re:CSV読み込みで kanabun 11/8/3(水) 17:08 発言[未読]

【69568】CSV読み込みで
質問  たつのこ E-MAIL  - 11/8/3(水) 15:34 -

引用なし
パスワード
     On Error GoTo ErrorTrap

  Sheets("download.csv").Select
  Cells.Select
  Rows("2:1000").Select
  'Selection.Delete Shift:=xlUp


  fname = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", FilterIndex:=1, Title:="ファイル選択 download.csv", MultiSelect:=False)
  If StrConv(fname, vbUpperCase) = "FALSE" Then Exit Sub
  
  '空いているファイル番号を取得します
  ch1 = FreeFile
  
  'FileNamePath のファイルをオープンします
  Open fname For Input As #ch1
  
  
  Worksheets("download.csv").Activate
  Worksheets("download.csv").Columns("A:AX").NumberFormat = "@"
  
  Rowcnt = 1

  With Worksheets("download.csv")
 
    Do While Not EOF(ch1)   'ファイルの終端かどうかを確認します。
  
      '1行読み込みます
      Line Input #ch1, textline
      textline = Replace(textline, vbLf, vbCrLf)
      'textline = Replace(textline, vbLf, ",")
      
      ipos0 = 1
      For i = 1 To 35
        ipos1 = InStr(ipos0, textline, """")
        ipos2 = InStr(ipos1 + 1, textline, """")
        If ((ipos1 <> 0) And (ipos2 <> 0) And (ipos2 > ipos1)) Then
          For j = ipos1 + 1 To ipos2 - 1
            If (Mid(textline, j, 1) = ",") Then
              Mid(textline, j, 1) = vbTab
            End If
          Next j
        Else
          Exit For
        End If
        ipos0 = ipos2 + 1
      Next i
      
    
      'カンマで分離します
      csvline() = Split(textline, ",")
      
      ix = UBound(csvline())
      For i = 1 To ix
        csvline(i) = Replace(csvline(i), vbTab, ",")
      Next i

      Rowcnt = Rowcnt + 1
      '配列渡しでセルに代入
      Range(Cells(Rowcnt, 1), Cells(Rowcnt, UBound(csvline()) + 1)) = csvline()

    Loop
  End With

  Close #ch1
  
  Worksheets("download.csv").Columns("A:AX").EntireColumn.AutoFit
  
  MsgBox "ファイルの読込み完了しました。" & vbCrLf & fname

    
  Exit Sub
    
  
ErrorTrap:
  MsgBox "データにエラーがあります。"
  Exit Sub


End Sub


100行のでーたが入っているCSVファイルを読み込み、行ごとに読み込んでEXCELに書きだして編集できるようにと思っているのですが、失敗する場合と、成功する場合があるのでどこをどうしたらいいかわからないので
よければ教えて欲しいです。持っているファイルをterapadで開いて保存しなおす時、失敗するときは改行コードがvbLfで、成功するときは改行コードをvbCr+vbLfで保存しなおすと改行ごとに読み込めます。
保存できるファイルの改行コードがvbLf固定で、一回開いて保存が大変なのでなるべくなら
EXCELVBAフォームのボタンクリック→ファイル選択→EXCELに書き出しがやりたいです。
文字形式は、SHIFT-JISです。

【69571】Re:CSV読み込みで
発言  kanabun  - 11/8/3(水) 17:08 -

引用なし
パスワード
   ▼たつのこ さん:
こんにちは〜

こういうのは、[データ]-[外部データの取り込み]-
[テキストファイルのインポート]メニュ−を使って指定のシートに
インポートされることをお勧めします。
ht tp://office.microsoft.com/ja-jp/excel/HP101022441041.aspx


以下は、あるCSVファイルをActiveSheetにインポートしたときの記録です。
(すこし編集してあります)

>  Worksheets("download.csv").Activate
>  Worksheets("download.csv").Columns("A:AX").NumberFormat = "@"
のあとに、以下のようなマクロ記録を適当に編集したものを書いておけば、
""の処理、改行コードの判別処理は不要になります。(改行コードが vbLf
だけのテキストファイルでもちゃんと読み込めます)

Sub Macro2()

  With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & fname, Destination:=Range("A2"))
> '  ↑CSVファイルfname をActiveSheetの[A2]セル以降にインポートします

    .Name = "F_Data"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 932
> '   ↑文字コードはShift-JIS です

    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
> '   ↑ダブルクート内を文字列データとします。データの前後の引用符は _
     自動的に削除してインポートされます

    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
>'   列のデータ形式をすべて文字列としています

    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False

    .Delete
>'   ↑読み込みRefreshが終わったらもとのCSVファイルとの接続を切断します
  End With
End Sub

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