こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテ

EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテキストファイルを作って書き込むというコードを書きましたが、新しく出来たテキストファイルの末尾に、もともとのファイルには無かったスペースが追加されてしまいます。
原因と対策を教えて頂きたいです。

-------------------------------------------------------
Dim FileName1 As String
Dim FileName2 As String
Dim FileNumber1 As Integer
Dim FileNumber2 As Integer
Dim Data As String

FileName1 = Application.GetOpenFilename("Text Files (*.txt), *.txt")
FileName2 = Application.GetSaveAsFilename(, "Text Files (*.txt), *.txt")

Data = Space(FileLen(FileName1))

FileNumber1 = FreeFile
Open FileName1 For Binary As #FileNumber1
Get #FileNumber1, , Data
Close #FileNumber1

'この間に"Data"内容を処理するコードを入れる予定

FileNumber2 = FreeFile
Open FileName2 For Binary As #FileNumber2
Put #FileNumber2, , Data
Close #FileNumber2
-------------------------------------------------------
このコードで1284バイトのテキストを読み込ませると末尾にスペースが追加されて1918バイトになってしまいました。
"Data"の内容を表示させてもスペースはなく、Len関数で大きさを調べても1284バイトです。

投稿日時 - 2010-09-25 23:28:05

QNo.6208060

困ってます

質問者が選んだベストアンサー

まず、出力先のファイルが最初から1918バイトで存在していると、その先頭だけ書き換えて、残りはそのまま残りますけと、そういう事ではないですよね?
以下は、出力先ファイルが新規だとして回答します。

入力ファイルに日本語が、634(=1918-1284)文字入ってますよね?のこりの16(=1284-2*634)バイトが半角文字(CR,LFも含む)のはず。

FileLen(FileName1) はファイルのバイト長なので1284になります。
Data=Space(1284) で、Dataに1284文字のスペースが入りますが、内部は文字コードがUTF-16なので、バイト数は1284*2バイトになります。LenB関数で確認出来ます。

で、getで1284バイト読み込んで、それを先頭から一文字ずつDataに入れます。このとき半角文字も1バイトが2バイトになります。全角文字はそのまま2バイト。で、文字数は全部で650文字(=634+16)なので、残りの634(1284-650)文字はヌル文字が入ります。これを今度UTF-16からシフトJISに変換しながら出力します。バイト数は、全角文字が634*2バイト、半角が16バイト、ヌル文字が634バイト、合計1918バイト(後ろのほうはヌル文字)です。

対処方法は色々考えられますが、安易な方法としては、ヌル文字の削除。
Data = Replace(Data, Chr(0), "")

投稿日時 - 2010-09-26 00:54:17

お礼

有り難うございます。
おかげさまで理由が分かり、解決いたしました。

投稿日時 - 2010-09-26 22:12:38

ANo.2

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

私もこれで悩んだことがありました。

原因は追究しませんでしたが、trim関数を使って済ませてしまいました。

Data = Trim(Data)

投稿日時 - 2010-09-26 00:09:13

あなたにオススメの質問