Excel VBA質問箱 IV

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

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


19572 / 76732 ←次へ | 前へ→

【62590】Re:巨大なCSVファイルの読み込みに関して
発言  kanabun  - 09/8/3(月) 11:00 -

引用なし
パスワード
   ▼kosuke さん:

>当初、ご教示いただいたVBAで実行しましたが、下記→の箇所で、
>インデックスが有効範囲にありません。と表示されました。
>
>  '------- 配列に読み込み
> → ReDim v(1 To maxRow, 1 To maxCol)
デバッグして、maxRow や maxCol の値がこのRedim宣言時点で
いくつになっているか、確認してください。0 になってたりしてませんか?

>再度、ご教示いただいたVBAを実行しましたが、下記→の箇所で、
>コンパイルエラー。SubまたはFunctionが定義されていません。
>と表示されました。
> For i = 1 To maxRow
>    For j = 1 To maxCol
> →     Input #io, v(i, j)
こちらはちょっと分かりません。
この行のどこが反転していますでしょうか?


>VBAは勉強中の初心者ですので、よろしくお願いいたします。


もう一つ、別の方法があります。
>"東京都,中央区","銀座",と書かれたCSVを読み込んだとき
>東京都中央区 銀座 二つのセルに分ける、つまり
>" "内の,を無視する
このように、文字列データがダブルクォートで囲まれていたとき、
正しく「文字列データ」として読み込んだり、
"00123" のような文字列を 数値123 でなく 00123 と読んだり、
日付データを本来の日付形式で読み込むためには、
[データ]-[外部データの取り込み]-[テキストファイルの
インポート]メニュ−を使うといいです。

新規シートを2枚追加して、以下の操作をお試しください。

[テキストファイルのインポート]メニューを使うと、テキストファイ
ル(*.txt など)を[ファイル]-[開く]から開くときと同じように、
テキストファイルウィザードが開きます。
そこで ファイルの種類を *.csv にして、
> 列数は、287
のようなCSVファイルを指定して、
ウィザードの 1/3 で 「元のデータ形式」を
  ●カンマやタブなどの区切り文字によって....
のほうを選択し、
ウィザードの 2/3 で「区切り文字」の「カンマ」にだけチェック
をいれ、
ウィザードの 3/3 「データのプレビュー」で
  まず、
  ■256列目以降の列を選択して「列のデータ形式」から
   ●削除する
  とします。
  つぎに、256列までの各列について数値データ以外の「列の
  データ形式」を、
  ●文字列型 (例1:「東京都,中央区」 の列)
        (例2:「00012」 の列)
  とし、もし日付の列があれば、列のデータ形式から
  ●日付 〔YMD形式〕または〔MDY形式?〕などを指定します。

設定が終了したら、[完了]ボタンを押すと、どこにインポート
するか尋ねてきますので、新規シートの[A1]セルなどを指定しますと
そこに指定したとおりのデータが展開されます。

残りの列も上の操作と同様に(ただし、今度は 先ほどインポート
しなかった後半の列に対して列のデータ型を指定して)2枚目の
シートに読み込みます。

インポート後の利用目的によっては、
256列を上回るCSVのうち、必要な列だけ取捨選択して、
256列内に収め1シートに展開することもできます。

文章で書くと長ったらしいですが、一度だけ操作をマクロ記録し
ておけば、あとは同じタイプのCSVファイルに対しては ファイル
名を変更するだけで、マクロで一気にシートに展開することが
可能となります。
参考までに、こちらでとったマクロ記録です。

'Excel2002
' マクロ記録日 : 2009/8/3 ユーザー名 : kanabun

  With ActiveSheet.QueryTables.Add( _
      Connection:="TEXT;D:\(Data)\LongField.csv", _
      Destination:=Range("A1"))
    .Name = "LongField"
    .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(2, 1, 2, 5, 1, 2, 1, 1, 1, _
     1, 2, 1, 2, 5, 1, 2, 1, 2, 2, 2, 2, _
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 _
     , 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 9, 9, _
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, _
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, _
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 _
     , 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, _
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, _
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, _
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 _
     , 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, _
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, _
    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, _
    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 2, 2, 2)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
  End With

 このばあい、最初の76列とお尻の4列だけを1シートにインポートしています。
 それ以外は DataTypesのパラメータを 9(削除) にしてあります。

こちらなら、手動操作をマクロの記録して、それを基にVBA化できますから、
初心者の方にも手をつけやすいのではないかと思います。
753 hits

【56405】巨大なCSVファイルの読み込みに関して アヒルペンギン 08/6/16(月) 15:36 質問
【56406】Re:巨大なCSVファイルの読み込みに関して kanabun 08/6/16(月) 15:56 発言
【56408】Re:巨大なCSVファイルの読み込みに関して アヒルペンギン 08/6/16(月) 16:22 回答
【56432】Re:巨大なCSVファイルの読み込みに関して Yuki 08/6/17(火) 10:58 発言
【56434】Re:巨大なCSVファイルの読み込みに関して アヒルペンギン 08/6/17(火) 13:01 お礼
【56438】Re:巨大なCSVファイルの読み込みに関して Yuki 08/6/17(火) 15:50 発言
【56440】Re:巨大なCSVファイルの読み込みに関して アヒルペンギン 08/6/17(火) 16:28 お礼
【62580】Re:巨大なCSVファイルの読み込みに関して kosuke 09/8/1(土) 16:42 質問
【62581】Re:巨大なCSVファイルの読み込みに関して kanabun 09/8/1(土) 19:27 発言
【62582】Re:巨大なCSVファイルの読み込みに関して kosuke 09/8/2(日) 10:52 発言
【62585】Re:巨大なCSVファイルの読み込みに関して kanabun 09/8/2(日) 19:15 発言
【62587】Re:巨大なCSVファイルの読み込みに関して kanabun 09/8/2(日) 23:22 発言
【62589】Re:巨大なCSVファイルの読み込みに関して kosuke 09/8/3(月) 10:09 発言
【62590】Re:巨大なCSVファイルの読み込みに関して kanabun 09/8/3(月) 11:00 発言
【62591】Re:巨大なCSVファイルの読み込みに関して kosuke 09/8/3(月) 11:40 発言
【62592】Re:巨大なCSVファイルの読み込みに関して kanabun 09/8/3(月) 12:00 発言
【62593】Re:巨大なCSVファイルの読み込みに関して kosuke 09/8/3(月) 13:07 お礼

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