Excel VBA質問箱 IV

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

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


7399 / 13644 ツリー ←次へ | 前へ→

【39370】CSVファイルの読み込み 質問 06/6/22(木) 18:00 質問[未読]
【39371】Re:CSVファイルの読み込み neptune 06/6/22(木) 18:27 発言[未読]
【39375】Re:CSVファイルの読み込み H. C. Shinopy 06/6/22(木) 21:44 回答[未読]
【39387】Re:CSVファイルの読み込み 質問 06/6/23(金) 9:24 質問[未読]
【39391】Re:CSVファイルの読み込み 質問 06/6/23(金) 10:05 お礼[未読]
【39389】Re:CSVファイルの読み込み 質問 06/6/23(金) 9:55 発言[未読]

【39370】CSVファイルの読み込み
質問  質問  - 06/6/22(木) 18:00 -

引用なし
パスワード
    CSVファイルの読み込み処理を行いEXCELに表示する処理を
 Webで捜して処理すると、うまく行くケースと行かないケースが
 あるので教えて下さい。

 大変参考にはなりました。

 現象)

 2件の明細を読み込むと1行の内容として表示してしまう。
 各明細の最後に改行マークはある。
 データは""で囲まれている。
 但し明細最後のカンマはない。
 
 以上教えて下さい。


Option Explicit

' CSV形式テキストファイル(不定カラム)読み込みサンプル
Sub READ_TextFile()
  Const cnsTITLE = "テキストファイル読み込み処理"
  Const cnsFILTER = "全てのファイル (*.*),*.*"
  Dim xlAPP As Application    ' Applicationオブジェクト
  Dim intFF As Integer      ' FreeFile値
  Dim strFILENAME As String    ' OPENするファイル名(フルパス)
  Dim X() As Variant       ' 読み込んだレコード内容
  Dim IX1 As Long         ' CSV項目カラムINDEX
  Dim GYO As Long         ' 収容するセルの行
  Dim lngREC As Long       ' レコード件数カウンタ
  Dim strREC As String      ' レコード領域
  Dim POS1 As Long        ' レコード文字位置INDEX
  Dim POS2 As Long        ' レコード文字位置INDEX

  ' Applicationオブジェクト取得
  Set xlAPP = Application
  ' 「ファイルを開く」のフォームでファイル名の指定を受ける
  xlAPP.StatusBar = "読み込むファイル名を指定して下さい。"
  strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _
    Title:=cnsTITLE)
  ' キャンセルされた場合は以降の処理は行なわない
  If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub

  ' FreeFile値の取得(以降この値で入出力する)
  intFF = FreeFile
  ' 指定ファイルをOPEN(入力モード)
  Open strFILENAME For Input As #intFF
  GYO = 1
  ' ファイルのEOF(End of File)まで繰り返す
  Do Until EOF(intFF)
    ' レコード件数カウンタの加算
    lngREC = lngREC + 1
    xlAPP.StatusBar = "読み込み中です....(" & lngREC & "レコード目)"
    ' 行単位にレコードを読み込む
    Line Input #intFF, strREC                   ' 1.

    ' LineInputより自分で半角カンマを探しCSV→項目分割させる
    POS1 = 1
    IX1 = 0
    ReDim X(IX1)        ' 配列を初期化
    Do While POS1 <= Len(strREC)                  ' 2.
      POS2 = InStr(POS1, strREC, ",", vbTextCompare)       ' 3.
      If POS2 < POS1 Then
        POS2 = Len(strREC) + 1
      End If
      ReDim Preserve X(IX1)  ' 配列要素数を再設定
      X(IX1) = Trim$(Mid$(strREC, POS1, POS2 - POS1))      ' 4.
      ' シングルコーテーション、ダブルコーテーションで囲まれている場合は
      ' 両端文字を取り除く
      If (((Left$(X(IX1), 1) = """") And (Right$(X(IX1), 1) = """")) Or _
        ((Left$(X(IX1), 1) = "'") And (Right$(X(IX1), 1) = "'"))) Then ' 5.
        X(IX1) = Trim$(Mid$(X(IX1), 2, Len(X(IX1)) - 2))
      End If
      POS1 = POS2 + 1
      IX1 = IX1 + 1
    Loop

    ' 行を加算しレコード内容を表示(先頭は2行目)
    GYO = GYO + 1
    If IX1 >= 1 Then
      Range(Cells(GYO, 1), Cells(GYO, IX1)).Value = X  ' 配列渡し 6.
    End If
  Loop
  ' 指定ファイルをCLOSE
  Close #intFF
  xlAPP.StatusBar = False
  ' 終了の表示
  MsgBox "ファイル読み込みが完了しました。" & vbCr & _
    "レコード件数=" & lngREC & "件", vbInformation, cnsTITLE
End Sub

【39371】Re:CSVファイルの読み込み
発言  neptune  - 06/6/22(木) 18:27 -

引用なし
パスワード
   【39324】【39326】 は別人?
あなたは人の親切に対してお礼は言わないのですか?
当サイトのルールは読みましたか?

>うまく行くケースと行かないケースが
> あるので教えて下さい。
どのようなケース?具体的に。

> 2件の明細を読み込むと1行の内容として表示してしまう。
どの時点でそのようになりますか?
1行読み込んで、変数に代入するロジックは間違いないことは
確認しましたか?

Officeのバージョンは?

【39375】Re:CSVファイルの読み込み
回答  H. C. Shinopy  - 06/6/22(木) 21:44 -

引用なし
パスワード
   なぜ、そのような気難しいマクロになるのか判りません。
マクロの記録で次の手作業をすると、下記のマクロが出来上がります。

メニューバーの[データ]から[外部データの取り込み]をクリックし、[データの取り込み...]を選択し、
[ファイルの種類]に「テキスト ファイル」、[ファイル名]にファイル名を指定し、[開く]ボタンを押す。
「テキスト ファイル ウィザード」が表示されるので、必要な指定をして[次へ]ボタンを押し、
(御質問の趣旨だと、[区切り文字]に「カンマ」、[文字列の引用符]に「"」を指定)
最後に[完了]ボタンを押す。

Sub Macro4()
'
 With ActiveSheet.QueryTables.Add(Connection:= _
  "TEXT;C:\Documents and Settings\XXXXXXXXX\My Documents\Xxxxxxxx.csv", _
  Destination:=Range("A1"))
  .Name = "Xxxxxxxx"
  .FieldNames = True
  .RowNumbers = False
  .FillAdjacentFormulas = False
  .PreserveFormatting = True
  .RefreshOnFileOpen = False
  .RefreshStyle = xlInsertDeleteCells
  .SavePassword = False
  .SaveData = True
  .AdjustColumnWidth = True
  .RefreshPeriod = 0
  .TextFilePromptOnRefresh = False
  .TextFilePlatform = 932
  .TextFileStartRow = 1
  .TextFileParseType = xlDelimited
  .TextFileTextQualifier = xlTextQualifierDoubleQuote
  .TextFileConsecutiveDelimiter = False
  .TextFileTabDelimiter = False
  .TextFileSemicolonDelimiter = False
  .TextFileCommaDelimiter = True
  .TextFileSpaceDelimiter = False
  .TextFileColumnDataTypes = Array(1, 1)
  .TextFileTrailingMinusNumbers = True
  .Refresh BackgroundQuery:=False
 End With
End Sub

【39387】Re:CSVファイルの読み込み
質問  質問  - 06/6/23(金) 9:24 -

引用なし
パスワード
   ありがとうございます。
試してみます。

TextFilePlatform = 932
がエラーになるのですが、これは何を意味しているか
教えて下さい。

【39389】Re:CSVファイルの読み込み
発言  質問  - 06/6/23(金) 9:55 -

引用なし
パスワード
   指摘ありがとうございました、

バージョンは
EXCEL2000です。

今色々実施してエラーのパターンを見つけてます。

出直すのでその際アドバイスお願いします。

【39391】Re:CSVファイルの読み込み
お礼  質問  - 06/6/23(金) 10:05 -

引用なし
パスワード
   ありがとうございました。
指摘の方法でうまく行きました。
助かりました。

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