|
すみませんいきなり
> For i = 0 To 8 ' <-- (1)
> Input #fno, sts '↑今までは1件のデータの長さが固定だったから数字を指定できた。
> col(i) = sts
> Next
のところ
Dim col As Variant ’←に変更
Line Input #fno, sts
col = Split(sts,",") ’ split関数でcolの配列にstsのカンマ区切ってデータを入れます
Ubound(col)
すれば、col配列の 最大の係数が判るので
それを使えばうまくいけませんか?
▼Aiz さん:
>お世話になってます。
>csvファイルからデータを読み込んでエクセルファイルに貼り付ける作業をやっていてわからなくなりました。
>
>以下、csvのデータとソースです。
>★csvファイル
>1,大阪,101,E-6,1234000,5200,52360,125200,45520
>2,大阪,102,C-4,2354,2354,2354,2354,2354
>
>★ソース
>Const csv1 = "H.csv"
>Const csv2 = "B.csv"
>
>Sub Auto_Open()
> Dim fname As String
> Dim fno As Integer
> Dim col(0 To 255) As Variant '<-- 可変のため最大値で設定
> Dim i As Integer
> Dim sts As String
> Dim flg As Integer
> Dim ii As Integer
>
> 'ファイル名
> fname1 = ActiveWorkbook.Path & "\" & csv1
> fname2 = ActiveWorkbook.Path & "\" & csv2
>
> 'CSVファイルの内容を貼り付ける(ボディ部)
> fno = FreeFile
> On Error GoTo file_not_found
> Open fname2 For Input As #fno
> On Error GoTo 0
> l = 7
> flg = 1 '上段の場合は1をセット。下段の場合は2をセットする。
> Do Until EOF(fno)
> '一旦String型で受けてVariant型に入れなおす
> For i = 0 To 8 ' <-- (1)
> Input #fno, sts '↑今までは1件のデータの長さが固定だったから数字を指定できた。
> col(i) = sts
> Next
>
> l = l + 1
> Range(Cells(l, 1), Cells(l, 9)).Value = col
> Loop
> Close #fno
>
> 'オートフォーマット
> Cells(7, 1).CurrentRegion.AutoFormat _
> Format:=xlRangeAutoFormatLocalFormat3, _
> Number:=False, _
> Font:=False, _
> Alignment:=False
>
> Exit Sub
>file_not_found:
> MsgBox "CSVファイルが見つかりません", vbCritical + vbOKOnly, "システムエラー"
>End Sub
>
>今まではcsvの1件の長さが決まっていたため(1)の部分は8のように値を固定できていたんですが、csvによっては(1)の部分が変動するため固定値を設定することができなくなりました。
>それでまず1.の部分に変数をセットし、csvの1件のデータを読んでカンマの数を数えて、(1)の部分の変数に値をセットしようと思っているのですが、1行を読み込んでカンマの数を数えるというやりかたがわかりません。
>
>どなたか助言をお願いします。
>説明が下手で申し訳ありません。説明不足なら言ってください。
>よろしくお願いします。
|
|