テキストファイルのリーダーやライターで必要になる
「ファイル名を入力して、ファイルに書き込む」を
試してみる。
---------------------
' 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
#テキストエディター
#エディター
冷やかしの「いいね」は断ります!
-------------------------