'***************************************************************************************************
' UTF-8テキストファイル書き出しサンプル(BOM付き) Module1(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' [参照設定]
' ・Microsoft ActiveX Data Objects 2.8 Library
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'20/04/26(1.00)新規作成
'***************************************************************************************************
Option Explicit
'===================================================================================================
Private Const g_cnsTitle As String = "UTF-8テキストファイル書き出し"
Private Const g_cnsFilter As String = "テキストファイル (*.txt;*.dat),*.txt;*.dat"
Private Const g_cnsCharset As String = "UTF-8"
'***************************************************************************************************
' ■■■ ワークシート側からの呼び出し処理 ■■■
'***************************************************************************************************
'* 処理名 :WRITE_TextFile1
'* 機能 :テキストファイル書き出しサンプル(UTF-8、BOM付き)
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2020年04月26日
'* 作成者 :井上 治
'* 更新日 :2020年04月26日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:サンプルなのでエラー処理は行なっていません
'***************************************************************************************************
Sub WRITE_TextFile1()
'-----------------------------------------------------------------------------------------------
Dim objAdost As ADODB.Stream ' 入力ファイル
Dim lngRow As Long ' 収容するセルの行
Dim lngRowMax As Long ' データが収容された最終行
Dim lngRec As Long ' レコード件数カウンタ
Dim strRec As String ' 書き出すレコード内容
Dim strFileName As String ' OPENするファイル名(フルパス)
Dim vntFileName As Variant ' ファイル名受取り用
'-----------------------------------------------------------------
' ①「名前を付けて保存」のフォームでファイル名の指定を受ける
Application.StatusBar = "出力するファイル名を指定して下さい。"
vntFileName = Application.GetSaveAsFilename(InitialFilename:="SAMPLE.txt", _
FileFilter:=g_cnsFilter, _
Title:=g_cnsTitle)
' キャンセルされた場合はFalseが返るので以降の処理は行なわない
If VarType(vntFileName) = vbBoolean Then Exit Sub
strFileName = vntFileName
'-----------------------------------------------------------------
' ②収容最終行の判定(Excel認知の最終行から上に向かってデータがある行を探す)
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData ' オートフィルタ解除
lngRowMax = Range("$A$" & Rows.Count).End(xlUp).Row
' データ未登録は終了
If lngRowMax < 2 Then
Application.StatusBar = False
MsgBox "テキストをA列2行目から入力してから起動して下さい。", vbExclamation, g_cnsTitle
Exit Sub
End If
' 2行目から開始
lngRow = 2
'-----------------------------------------------------------------
' ③指定ファイルをOPEN
Set objAdost = New ADODB.Stream
' ADODB.Stream処理
With objAdost
.Type = adTypeText
' 文字コード、改行コード指定
.Charset = g_cnsCharset ' UTF-8コード指定
.LineSeparator = adCRLF ' 改行コード指定(CRLF)
'.LineSeparator = adLF ' 改行コード指定(LF)
'.LineSeparator = adCR ' 改行コード指定(CR)
.Open
'-------------------------------------------------------------
' ④最終行まで繰り返す
Do While lngRow <= lngRowMax
' レコード件数カウンタの加算
lngRec = lngRec + 1
Application.StatusBar = "出力中です....(" & lngRec & "レコード目)"
' A列内容をレコードにセット(先頭は2行目)
strRec = Cells(lngRow, 1).Value
' レコードを出力
.WriteText strRec, adWriteLine
' 行を加算
lngRow = lngRow + 1
Loop
'-------------------------------------------------------------
' ⑤指定ファイルをCLOSE
.SetEOS
.SaveToFile strFileName, adSaveCreateOverWrite
.Close
End With
Set objAdost = Nothing
Application.StatusBar = False
' 終了の表示
MsgBox "ファイル出力が完了しました。" & vbCr & _
"レコード件数=" & lngRec & "件", vbInformation, g_cnsTitle
End Sub
'----------------------------------------<< End of Source >>----------------------------------------
このページより前に紹介していた「
'***************************************************************************************************
' UTF-8テキストファイル書き出しサンプル(BOM無し対応版) Module2(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' [参照設定]
' ・Microsoft ActiveX Data Objects 2.8 Library
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'20/04/26(1.00)新規作成
'***************************************************************************************************
Option Explicit
'===================================================================================================
Private Const g_cnsTitle As String = "UTF-8テキストファイル書き出し"
Private Const g_cnsFilter As String = "テキストファイル (*.txt;*.dat),*.txt;*.dat"
Private Const g_cnsCharset As String = "UTF-8"
'***************************************************************************************************
' ■■■ ワークシート側からの呼び出し処理 ■■■
'***************************************************************************************************
'* 処理名 :WRITE_TextFile1
'* 機能 :テキストファイル書き出しサンプル(UTF-8、BOM無し)
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2020年04月26日
'* 作成者 :井上 治
'* 更新日 :2020年04月26日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:サンプルなのでエラー処理は行なっていません
'***************************************************************************************************
Sub WRITE_TextFile1()
'-----------------------------------------------------------------------------------------------
Dim objAdost As ADODB.Stream ' 入力ファイル
Dim lngRow As Long ' 収容するセルの行
Dim lngRowMax As Long ' データが収容された最終行
Dim lngRec As Long ' レコード件数カウンタ
Dim strRec As String ' 書き出すレコード内容
Dim strFileName As String ' OPENするファイル名(フルパス)
Dim vntFileName As Variant ' ファイル名受取り用
Dim tblByte() As Byte ' Byteテーブル(一時変換用)
'-----------------------------------------------------------------
' ①「名前を付けて保存」のフォームでファイル名の指定を受ける
Application.StatusBar = "出力するファイル名を指定して下さい。"
vntFileName = Application.GetSaveAsFilename(InitialFilename:="SAMPLE.txt", _
FileFilter:=g_cnsFilter, _
Title:=g_cnsTitle)
' キャンセルされた場合はFalseが返るので以降の処理は行なわない
If VarType(vntFileName) = vbBoolean Then Exit Sub
strFileName = vntFileName
'-----------------------------------------------------------------
' ②収容最終行の判定(Excel認知の最終行から上に向かってデータがある行を探す)
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData ' オートフィルタ解除
lngRowMax = Range("$A$" & Rows.Count).End(xlUp).Row
' データ未登録は終了
If lngRowMax < 2 Then
Application.StatusBar = False
MsgBox "テキストをA列2行目から入力してから起動して下さい。", vbExclamation, g_cnsTitle
Exit Sub
End If
' 2行目から開始
lngRow = 2
'-----------------------------------------------------------------
' ③指定ファイルをOPEN
Set objAdost = New ADODB.Stream
' ADODB.Stream処理
With objAdost
.Type = adTypeText
' 文字コード、改行コード指定
.Charset = g_cnsCharset ' UTF-8コード指定
.LineSeparator = adCRLF ' 改行コード指定(CRLF)
'.LineSeparator = adLF ' 改行コード指定(LF)
'.LineSeparator = adCR ' 改行コード指定(CR)
.Open
'-------------------------------------------------------------
' ④最終行まで繰り返す
Do While lngRow <= lngRowMax
' レコード件数カウンタの加算
lngRec = lngRec + 1
Application.StatusBar = "出力中です....(" & lngRec & "レコード目)"
' A列内容をレコードにセット(先頭は2行目)
strRec = Cells(lngRow, 1).Value
' レコードを出力
.WriteText strRec, adWriteLine
' 行を加算
lngRow = lngRow + 1
Loop
'-------------------------------------------------------------
' ⑤BOM無しに変換(4バイト目を先頭に移動)
.Position = 0 ' Stream位置を0にする
.Type = adTypeBinary ' バイナリモードに変更
.Position = 3 ' Stream位置を3にする
tblByte = .Read ' Stream内容をByteテーブルに格納
.Close ' 一旦閉じる
.Open ' 再Open
.Write tblByte ' Byteテーブルを書き出す
'-------------------------------------------------------------
' ⑥指定ファイルをCLOSE
.SetEOS
.SaveToFile strFileName, adSaveCreateOverWrite
.Close
End With
Set objAdost = Nothing
Application.StatusBar = False
' 終了の表示
MsgBox "ファイル出力が完了しました。" & vbCr & _
"レコード件数=" & lngRec & "件", vbInformation, g_cnsTitle
End Sub
'----------------------------------------<< End of Source >>----------------------------------------
こちらが「