初めて自分の家と他人の家が違う、と意識した時

Excelのマクロで改行を含んだテキストファイルの中身を1つのセルに書き込みたいです。

ネット上を探してみると、1行ごとにわけて各行に書き込むマクロは見つかったのですが、
もっと原始的にファイルを開くのダイアログからテキストを指定して、その中身をただ単純にセルに入力したいです。
どのように記述すればよいでしょうか??

A 回答 (3件)

参考URLの田中先生のコードを借用して一行付け足すと、下記でできます。


Sub test()
Dim FSO As Object, buf As String
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.GetFile("C:\Sample.txt").OpenAsTextStream
buf = .ReadAll
.Close
End With
Set FSO = Nothing
'buf = Replace(buf, vbCrLf, vbLf)
ActiveCell.Value = buf
End Sub
セル内改行はVbLFなので、vbCrLFから置換が必要かと思いましたが、しなくても大丈夫な様です。

参考URL:http://officetanaka.net/excel/vba/filesystemobje …
    • good
    • 0

バイナリモードで開いてGetで一度に取得というのではいかがでしょうか。


テキストファイルの文字コードによっては文字化けしそうなので変換が必要そうですが・・。
以下サンプルです。

Sub Sample()

Dim intFileNum As Integer
Dim strFileName As String
Dim strBuf As String

' ファイルを開くダイアログを表示してファイル名を保存
strFileName = Application.GetOpenFilename()

' ファイル番号を取得
intFileNum = FreeFile

' ファイルの大きさ分のバッファを確保
strBuf = Space(FileLen(strFileName))

' ファイルをバイナリモードで開き内容を取得
Open strFileName For Binary As #intFileNum
Get #intFileNum, , strBuf
Close #intFileNum

' A1セルに書き込み
Range("A1").Value = strBuf

End Sub
    • good
    • 0

この質問ぶりからすると、テキストファイルというものの理解が十分で無いようだ。


区切り文字のことも書いてない質問だから。
テキストファイルで、エクセルのシートと親和性の良い形式は
(下記でDはDelimiter区分文字を表す。
http://www.sophia-it.com/content/delimiter
デリミターとは、「カンマ」、「スペース」、「タブ」など(1半角英数の決った1つ)である。)
項目1+D+項目2+D+項目3+D+・・・+改行(+は直後に続いて行くことを示す)
項目1+D+項目2+D+項目3+D+・・・+改行
・・
(本当は「紐」(String)のようにレコード1+レコード2+・・順につながっている。)
の形式だ。ただし項目nが空白(データなし)の場合は「D+D」の場合もある。
改行のコードはどういうものか知ってますか。
OSのIOCSの方で、ある言語がデータを読み込むと、改行までを1レコードとして変数に入れてくれる指令がある場合が多い。
VBAの場合は Line Inputである。
GoogleでLine Inputで照会してみること。
http://officetanaka.net/excel/vba/statement/Line …
ほか沢山在る。こんなの読んで質問してますか。
ーー
1レコードを読むたびに変数にデータが入るが、これをエクセルのシートの各列に分けて代入したいわけ。
これに適したのがVBAのSplit関数だ。
http://officetanaka.net/excel/vba/tips/tips62.htm
など多数。
ーー
後は
・ファイルの1レコードを読むー>変数へ
・その変数をSplitでデリミタで分割ー>配列に
・項目数=シートの列数だけ繰り回して、セルに代入。
のレコード数分の繰り返しがプログラム。
ーー
ファイルのレコードの終わりの判定は勉強のこと。
====
エクセルには「データ」メニューに「区切り文字」があるのをご存知か。
A列の各行にデータを入れて、その後
これをマクロの記録を取り、そのコードを使う手もある。
ーーー
>どのように記述すればよいでしょうか
丸投げ的にコードのことを聞く前に、その前に、上記のような、勉強することがあるといいたい。
ーー
参考
上記で
・その変数をSplitでデリミタで分割ー>配列に
・項目数=シートの列数だけ繰り回して、セルに代入
といったが、繰り回ししなくても、エクセルVBAの場合
Sub test01()
s = "aaa,111,東京"
t = Split(s, ",")
Range("A1:c1") = t
End Sub
こういうこと(一発代入のコード)も、やってみると、出来るようだ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報