|
▼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化できますから、
初心者の方にも手をつけやすいのではないかと思います。
|
|