アプリ版:「スタンプのみでお礼する」機能のリリースについて

ExcelエクセルVBAマクロについてテキストファイルから改行コードを取り除いて
変数に読み込む方法について確認させてください。

下記のVBAログラムはWordファイルをテキストファイルに落としたファイルを変数aに
読み込んでいます。
このとき、読み込んだテキストファイルはWordファイルをテキストファイルに
落とし込んだファイルなので改行コードが残ってしまいます。
この改行コードを削除したうえで変数aに読み込みたいのですが可能でしょうか。
改行コードはメモ帳では「↓」と下矢印に似た文字で表示されます。
(実際には下矢印ではないようです。)
今のところ、Replace関数で改行コードを削除するプログラムを
考えているのですが、改行コードのVBAでの表現方法が分からないので
先に進むことが出来ません。いい案があればぜひご教授下さい。
あるいはほかの方法でも改行コードが削除出来れば結構です。

またこの変数aに読み込んである文字列からかぎカッコの内部にある文字を
抽出してエクセルの行方向に出力する方法があればご教授頂ければ幸いです。
例えば
“あなたは「こんにちは」と言いました。
私は「元気ですか」と聞きました。”

が文字列aに読み込んである場合、“こんにちは”、“元気ですか”を抽出して
エクセルに順に出力という方法です。

色々と書きましたが、よろしくお願いいたします。
以下、VBAプログラム本文です。

----------------------------------
Sub sample1()

Dim a As String

a = CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Readall
CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Close

End Sub

A 回答 (3件)

Windowsの改行はCRLFです。

#1さんの仰るとおり、chr(13)+chr(10)ですね。
あるいはvbCr,vbLf,vbCrLfなんてのもあります。

あとプログラム本文は良くないです。
最低でもこう書くべきです。
'-------------------------------------------------
dim objStream as Object
set objStream = CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream
a=objStream.readall
objStream.Close
'--------------------------------------------------
もとのソースだと、...OpenAsTextStreamと書いた時点でテキストを開いてます。
1回目と2回目は別のモノ。つまり2回開いてて、1回目は開きっぱなし。

>かぎカッコの内部にある文字を抽出

これはご自分で考えてみて下さい。
例えば、crlfを除去したのなら
b=replace(a,"「",vbcr)
b=replace(b,"」",vbcr)
とでもしておいてvbcrでSplit()すれば配列の奇数番目が括弧の中身です。
括弧が閉じてない場合とか半角だったりする場合とかもあるので注意ですね。
一番良いのは正規表現を使う方法ですが、これはちょっとハードルが高いでしょう。
    • good
    • 0
この回答へのお礼

返事遅くなって申し訳ございません。

アドバイスを参考にトライしてみたところ、うまく出来ました。
本当に助かりました。ありがとうございます。

お礼日時:2012/01/06 00:03

ReadAllを使わないで、1レコード(復帰・改行まで)を読み込む仕組みは使えないのか。


ーー
質問の表現だが、コンピュター処理は(ファイルを扱うものは)すべてファイルを読んで、変数にセットしてから、色々処理を行うものです。そのとき(主に順編成ファイルのことだが)
(1)ファイルを終わりまで読み込むもの。ReadAll的なもの
(2)レコード単位で変数に読み込むもの
がある。
>この改行コードを削除したうえで変数aに読み込みたいのですが可能でしょうか
変数Xに読み込んだものから、復帰改行や、改行を目当てに
(1)区切る
(2)他のものに置き換える。例えば空白に置き換えるという意味で、削除
などをするはず。
あるいは上で言った、1レコードを読む仕組みを使って、1レコードごとに読み込む。
これは1レコードをどういう風に区切る仕組み化、処理系によルので勉強のこと。
OSで違ったりするのは有名な話。
表現が適当でない。
改行コード、復帰改行コードを白兄で、VBSCRIPTのファイル関係を暑かったり、プログラムをすることは、速すぎる。
ーーー
こんな質問コーナーに、わざわざ質問しなくても、Googleで「VBA 改行コード」「VBA 改行コード削除」などで照会すればすぐ判ること。
http://www.kantenna.com/pg/2009/12/excel_vba.php など多数。
    • good
    • 0
この回答へのお礼

返事遅くなって申し訳ございません。
みなさんからのアドバイスを参考にトライしてみたところ、うまく出来ました。
本当に助かりました。ありがとうございます。

返事遅くなって申し訳ございません。

お礼日時:2012/01/06 00:01

改行コード


chr(13)
chr(10)

replace(replace(・・・,chr(13),""),chr(10),"")
    • good
    • 0
この回答へのお礼

返事遅くなって申し訳ございません。

改行コードとはchr(13)、chr(10)だったんですね。
みなさんからのアドバイスを参考にトライしてみたところ、うまく出来ました。
本当にありがとうございます。

お礼日時:2012/01/06 00:01

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A