テキストファイルのリーダーやライターで必要になる
「ファイル名を入力して、ファイルに書き込む」を
試してみる。


---------------------

' Learn MSより VBA 引用
Line Input #ファイル番号1, 変数名
『Excel VBAパーフェクトマスター』より
Print #ファイル番号2, 変数名

---------------------

とあるエンジニアの物語より 23/04/06
https://dicengineer.com/vba-output/

Sub sample()
    dim outputFile As String
    outputfile = "*******.txt"

    Open outputFile For Output As #1

    Print #1, "文字列 1行目"
    Print #1, "文字列 2行目"
    Print #1, "文字列 3行目"
    Close #1
End Sub
    
---------------------

これを参考にして

List-08-1
Sub Output()
    Dim outputFileName As String
    Dim Str As String

'    outputFileName = InputBox("ファイル名は?")
'    Debug.Print outputFileName
' テスト用に固定した。
    outputFileName = "E:\TestOutput.txt"

    On Error Goto ErrorHandler

    Open outputFilename For Output As #2

    Str = "文字列 1行目"
    Print #1, Str
    Debug.Print Str
    Str = "文字列 2行目"
    Print #1, Str
    Debug.Print Str
    Str = "文字列 3行目"
    Print #1, Str
    Debug.Print Str
    Str = "1234567890"
    Print #1, Str
    Debug.Print Str

    Close #2
    Exit Sub

    ErrorHandler:' エラーのときはここに来る。
'        MsgBox("エラーです")
'        Close #2    'Close file.
End Sub

うまくいった。

---------------------

手持ちの『EXCEL VBAパーフェクトマスター』には
あっさりとしか書いてない。

文字列がどのように書き込まれるのかを
調べることにした。
出力ファイル名は固定にしてある。

List-08-2
Sub Output()
    Dim outputFileName As String
    Dim Str As String

'    outputFName = InputBox("ファイル名は?")
'    Debug.Print outputFileName
' テスト用に固定した。
    outputFileName = "E:\TestOutput.txt"

'    On Error Goto ErrorHandler

    Open outputFilename For Output As #2

    Str = "0123456789abcd"
    Print #2, Str
    Debug.Print Str

    Str = "abcdefghij0123"
    Print #2, Str
    Debug.Print Str

    Str = "0123456"
    Print #2, Str
    Debug.Print Str

    Close #2
    Exit Sub

    ErrorHandler:' エラーのときはここに来る。
'       MsgBox("エラーです")
'       Close #2    'Close file.
End Sub

注:文字数は、16進ダンプが見やすいように決めた。

16進ダンプには、BzEditorを使用。
ファイルメニューの「最近使ったファイル」は便利。

結果:
0123456789abcd
abcdefghij0123
0123456

16進ダンプ結果:
___+00+01+02+03+04+05+06+07+08+09+0A+0B+0C+0D+0E+0F
000_31_32_33_34_35_36_37_38-39_30_61_62_63_64_0D_0A
010_61_62_63_64_65_66_67_68-69_6A_30_31_32_33_0D_0A
020_82_4F_82_50_82_51_82_52-82_53_82_54_82_55_0D_0A

S-JISになっている。
全角は「1」が82_50_と2バイト。
「1」のS-JISコードは 0x8250(Hex)、

---------------------

List-08-3
書き込む文字列をUnicodeにしてみる。
Sub Output()
    Dim outputFileName As String
    Dim Str As String, UniStr As String


'    outputFName = InputBox("ファイル名は?")
'    Debug.Print outputFileName
' テスト用に固定した。
    outputFileName = "E:\TestOutput.txt"

'    On Error Goto ErrorHandler

    Open outputFilename For Output As #2

    Str = "0123456"
'        Debug.Print StrConv(SjStr, vbUnicode) 
    UniStr = StrConv(Str, vbUnicode) 
    Print #2, UniStr
    Debug.Print UniStr

    Str = "abcdefg"
    UniStr = StrConv(Str, vbUnicode) 
    Print #2, UniStr
    Debug.Print UniStr

    Str = "0123456"
    UniStr = StrConv(Str, vbUnicode) 
    Print #2, UniStr
    Debug.Print UniStr

    Close #2
    Exit Sub

    ErrorHandler:' エラーのときはここに来る。
'       MsgBox("エラーです")
'       Close #2    'Close file.
End Sub

注:文字数は、16進ダンプが見やすいように決めた。

結果:
0 1 2 3 4 5 6 
a b c d e f g 
 .・ .・ .・ .・ .・

16進ダンプ結果:
___+00+01+02+03+04+05+06+07+08+09+0A+0B+0C+0D+0E+0F
000_30_00_31_00_32_00_33_00-34_00_35_00_36_00_0D_0A
010_61_00_62_00-63_00_64_00-65_00-66_00_67_00_0D_0A
020_10_FF_11_FF_12_FF_13_FF-14_FF_15_FF-16_FF_0D_0A


文字列はUnicodeだが
区切りが0D 0A(S-JIS)になっている。

 


#VisualBasic
#VBA
#テキストエディター
#エディター
冷やかしの「いいね」は断ります!

-------------------------