Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(指定なし : 指定なし)
CSV読み込み(不要な列(項目)を読み込まない)
投稿日時: 21/06/04 13:40:53
投稿者: aSh998

CSVの読み込みにおいて
読み飛ばしたい列がございます。(1列目)
 
現状下記コードですべての値を行ずつ「vLineArray」という二次元配列に格納しております。
下記コードでは読み込まない列を除く等の不要項目の削除は難しいでしょうか。
 
読み飛ばすためには調べたところ、CSV読み込みのコードを書き換えてskipcolumnsで読み飛ばすしかないのでしょうか。
 
   Do While Not EOF(ifileNum)
        '行を変数に読み込む。
        Line Input #ifileNum, sCurrLine
      
        'ヘッダ行飛ばして読込
        If lCnt > 0 Then
         'ダブルクォーテーションクリア
          sCurrLine = Replace(sCurrLine, Chr(34), "")
         '行読み込む
          ReDim Preserve vLineArray(lCnt)
          vLineArray(lCnt) = Split(sCurrLine, Chr(44), , vbBinaryCompare)
        End If
         lCnt = lCnt + 1
    Loop

回答
投稿日時: 21/06/04 15:32:20
投稿者: Suzu

引用:
CSV読み込みのコードを書き換えてskipcolumnsで読み飛ばすしかないのでしょうか。

 
その、【skipcolumns】とは何でしょうか?
VBA 標準のメソッドや関数ではありませんよね?
コードの中身を見ないと、skipcolumns の中身も判らないので回答できません。
 
 
提示頂いたコードですが、使っているのは、2次元配列と言って良いのかな。。
 
ローカルウィンド等で確認すれば分かりますが、
 
- vLineArray
 |
   - vLineArray(0)
        |
         - vLineArray(0)(0)
         - vLineArray(0)(1)
         - vLineArray(0)(2)
            :
 
   - vLineArray(1)
         - vLineArray(1)(0)
            :
 
 の様に なっています。
   ジャグ配列 (配列の入れ子と言っていいのかな)と言われる形式です。
 
 
 Excel で良く使われるのは、
   vLineArray(0,0)
 の様な形式で表される配列です。
 
これだと、
  Range("A1") = vLineArray
の様に、一度に セルに張り付ける事ができます。
 
 
ジャグ配列を使用しようが、2次元配列を使おうが、CSVからの、読み込み自体は 行われます。
(提示頂いたコードは、CSVの内容をメモリに読み込む処理であり、
  この部分で、どんな手を使おうが、メモリには読み込んでいます。)
 
 
ジャグ配列から、
 ・セルに張り付けるには、1行づつ貼り付け処理を行う
 ・ジャグ配列を、1行づつ処理し、2次元配列に変換してから、張り付ける。
 
どちらにしろ、1行づつ処理する中で、不必要な部分を処理しない様にします。
 
 
まぁ、、そんな事より、
全貼り付けを行ってから、Excel上で、列を削除した方が手っ取り早い気もしますが。。
 
 
取り込み処理に時間を要し改善のためにこのご質問に至ったのであれば
・CSVファイルの容量が大きい
・マシンスペックが不足
のどちらかの可能性が高いです。
 
コード云々より、上記への対策を採った方が手っ取り早いでしょう。

回答
投稿日時: 21/06/04 17:09:29
投稿者: はぶ

失礼します。
2列目5列目を除くサンプルです。
 
   Dim v
   v = Split("a b c d e f") '--Split(sCurrLine, Chr(44), , vbBinaryCompare)
   v(1) = "null"
   v(4) = "null"
   v = Filter(v, "null", False)
   MsgBox Join(v)
 
最近のバージョンはわからないのですが、
CSV の列を除く機能は、 OpenText メソッド、QueryTable オブジェクト あたりでしょうか。

回答
投稿日時: 21/06/04 18:03:24
投稿者: simple

標準のテキストファイルウィザードには、項目別に読む読まないを指定できる機能が備わっています。
(読み飛ばし項目には,削除にチェックを入れます。)
マクロ記録とればコードが作成できます。それを使ったほうが楽だと思いますよ。
 
# ちなみに、図形コネクターに関するスレッドは放置ですか?
# 解決したのであれば閉じて下さいね。("Q&A 掲示板ご利用上のお願い"にも記載がありますよ)

トピックに返信