Skip to content

SetWidth

Summary

テキストファイルやログファイル、ベーシックモジュールファイル(.bas)を読み込んで結果を返すための関数です。
指定したファイルパスのファイルをテキストとして読み込み、配列またはExcelシートに出力します。
対応する文字コードはANSIのみです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Function Read_txt(path As String, _
                  Optional row_n As Long = 1, _
                  Optional col_n As Long = 1, _
                  Optional sheetName As String = "Sheet1", _
                  Optional OutputFlg As Boolean = False) As Variant

'txt/log/basファイルを読込み返す
'対応する文字コード ->ANSI

Dim buf As String
Dim buf_above As String
Dim array_buf() As Variant
Dim i As Long

'__init__
    Open path For Input As #1
    Erase array_buf
    i = 0 'I:配列番号

'__check__
    If OutputFlg = True Then
        If sheetName = Empty Then
            Debug.Print "Syntax Error: Input sheetName"
            End
        Else
        End If
    Else
        If sheetName <> Empty Then
            Debug.Print "Syntax Error: Not input sheetName"
            End
        Else
        End If
    End If

'__main__
    Do Until EOF(1)
        Line Input #1, buf

        '文末に'_'がある場合は次の行とマージする
        If buf_above <> "" Then buf = Trim(buf)

        If Right(buf, 2) = "_" Then
            buf = Left(buf, Len(buf) - 1)
            buf_above = buf_above & buf
            GoTo Continue
        Else
        End If

        'Excelシートに出力する
        If OutputFlg = True Then
            If sheetName = Empty Then
                Cells(row_n, col_n) = "'" & buf_above & buf
                buf_above = ""
            End If

        '配列に格納する
        Else
            ReDim Preserve array_buf(i)
            array_buf(i) = buf_above & buf
            buf_above = ""
            i = i + 1
        End If
Continue:
            row_n = row_n + 1
        Loop
    Close #1

'__return__
    If OutputFlg = False Then Read_txt = array_buf
End Function

説明

指定したパスのテキストファイル(.txt)を読み込んで配列またはExcelシートに出力するための関数です。

引数 path は読み込むテキストファイルのパスを指定します。 オプション引数 row_n と col_n はExcelシートへの出力時に、データの書き込みを開始するセルの行番号と列番号を指定します。デフォルトでは行1、列1から書き込みが開始されます。

オプション引数 sheetName はExcelシートへの出力時に、データの書き込み先のシート名を指定します。デフォルトでは空文字列が設定されています。

オプション引数 OutputFlg は出力先がExcelシートか配列かを示すフラグで、Trueの場合はExcelシートに出力し、Falseの場合は結果を配列に格納します。デフォルトではFalseが設定されています。 関数の動作は以下の通りです。

テキストファイルを開き、array_buf 配列を初期化します。 テキストファイルを1行ずつ読み込みます。 読み込んだ行が文末に '_' を含んでいる場合は、次の行とマージします。 オプション引数 OutputFlg の値に応じて、データを配列に格納するかExcelシートに出力します。

OutputFlg がTrueの場合は、データをExcelシートに ' を付けて書き込みます。 OutputFlg がFalseの場合は、データを配列 array_buf に格納します。

ループを繰り返し、ファイルの終端に達するまで処理を続けます。 ファイルを閉じて処理を終了します。 オプション引数 OutputFlg がFalseの場合は、結果として array_buf 配列を返します。

引数

  • 引数(path)の名前: ファイルパス
  • 引数(path)の型: String
  • 引数(path)の説明: 読み込むファイルのパスを指定

オプション引数

  • row_n: 開始行番号 / 型: Long
    出力先がExcelシートの場合、データの書き込みを開始する行番号を指定します。
    デフォルトは1。

  • col_n: 開始列番号 / 型: Long
    出力先がExcelシートの場合、データの書き込みを開始する列番号を指定します。
    デフォルトは1。

  • sheetName: シート名 / 型: String
    出力先がExcelシートの場合、データの書き込み先のシート名を指定。

  • OutputFlg: 出力フラグ / 型: Boolean
    出力先がExcelシートかどうかを示すフラグ。
    - Trueの場合はExcelシートに出力し、Falseの場合は配列に結果を格納します。
    - デフォルトはFalseです。

戻り値

  • 戻り値の型: Variant型
    - 出力フラグがFalseの場合: ファイルの内容を格納した配列
    - 出力フラグがTrueの場合: なし

Examples

使用例として、テキストファイルを配列に読み込む例とExcelシートに書き込む例が示されています。

1
2
3
4
5
6
' テキストファイルを配列に読み込む
Dim resultArray As Variant
resultArray = Read_txt("C:\Example\TextFile.txt")

' テキストファイルをExcelシートに書き込む
Read_txt("C:\Example\TextFile.txt", 1, 1, "Sheet1", True)