Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
「型が一致しません。が解決できません」の HIDETOTOさんへ
投稿日時: 17/12/01 18:54:49
投稿者: もこな2

やっつけで作ったんでちょっと行数とか間違ってるようですが(エラーが出てしまう)、テキストファイルを読み込んで、 Double型の配列に入れる方法としてこんなやり方もあるかとおもいます。
 

Sub Sample()
    Const ファイルパス As String = "d:\テスト用.txt"

    Dim Val配列 As Variant
    Dim Dou配列() As Double
    Dim buf As String
    Dim i As Integer, X As Integer, Y As Integer

    With CreateObject("Scripting.FileSystemObject")
        With .GetFile(ファイルパス).OpenAsTextStream
            buf = .ReadAll
            .Close
        End With
    End With

    '要らない文字の消去(好みで入れ子にしてもいいかも)
        buf = UCase(buf)
        buf = Replace(buf, "A", "")
        buf = Replace(buf, "B", "")
        buf = Replace(buf, "C", "")

    '一度、1行ごとの1次配列にいれて
        Val配列 = Split(buf, vbCrLf)

    'Double型の2次配列の要素数を定義してそこに入れる
        ReDim Dou配列(1 To UBound(Val配列) + 1, 1 To 4)

        For X = 0 To UBound(Val配列)
            Dou配列(X + 1, 1) = Split(Val配列(X), " ")(0)
            Dou配列(X + 1, 2) = Split(Val配列(X), " ")(1)
            Dou配列(X + 1, 3) = Split(Val配列(X), " ")(2)
        Next X

    'セル範囲に2次配列をそのまま出力
    Range(Range("B2"), Range("B2").Offset(UBound(Dou配列, 1), 3)) = Dou配列

End Sub

投稿日時: 17/12/02 08:55:07
投稿者: もこな2

コードの修正が終わったので投稿します。
セルに出力せず、メモリ上でいらない文字とって明示的にDouble型にすることも出来ますよってことで、何かの参考にしてください。
 

Sub Sample02()
    Const ファイルパス As String = "C:\WORK\テスト.txt"

    Dim Val配列 As Variant
    Dim Dou配列() As Double
    Dim buf As String
    Dim i As Integer, c As Integer

    With CreateObject("Scripting.FileSystemObject")
        With .GetFile(ファイルパス).OpenAsTextStream
            buf = .ReadAll
            .Close
        End With
    End With

    '要らない文字の消去
        buf = Replace(Replace(Replace(UCase(buf), "A", ""), "B", ""), "C", "")

    'Split関数で改行コードを区切り文字として、1次配列にいれて
        Val配列 = Split(buf, vbCrLf)

    '1次配列の要素ごとに「半角スペース」を区切り文字として
    'Double型の2次配列に格納
        ReDim Dou配列(UBound(Val配列), 2)

        For i = 0 To UBound(Val配列)
            For c = 0 To 2
                Dou配列(i, c) = Split(Val配列(i), " ")(c)
            Next c
        Next i

    'セル範囲にDouble型の2次配列を出力
    With Range("B2")
        Range(.Address, .Offset(UBound(Dou配列, 1), UBound(Dou配列, 2))) = Dou配列
    End With

End Sub

 
閉じておきます。