dポイントプレゼントキャンペーン実施中!

ある場所に比較するCSVファイルを2個格納しております。
ただしCSVファイル名は可変であります。
その場合 Set objTextA = objFSO.OpenTextFile("C:\" & "A.csv")と特定して呼び出せません。
名前が可変なときのため、そのパスにあるCSV2個を順に呼び出すにはどうすればよいのでしょうか。

また呼出し後、split関数により、配列に入れます。A配列とB配列に格納したとします。
一つ一つ比較していきたいのですが、
以下のような構文の場合、比較で違ったときテキストに書き込みとなりますでしょうか?

for i=0 to i=10 step 1
if strcomp(a(i) ,b(i))) = 1 then
テキストに書き込み
endif
next

A 回答 (2件)

>名前が可変なときのため、そのパスにあるCSV2個を順に呼び出すにはどうすればよいのでしょうか。



フォルダ内の全ファイルから拡張子がCSVなものを検索するしか無いかと。
しかも、同じフォルダ内に別のCSVファイルがあるとちゃんと比較することが出来ないため、比較したいCSVファイル以外は無視するようにする必要があります。

http://officetanaka.net/excel/vba/tips/tips36.htm

ファイルの検索方法については上記あたりを参考に。

>以下のような構文の場合、比較で違ったときテキストに書き込みとなりますでしょうか?

For i = 0 to 10
If a(i) = b(i) Then
'書き込み処理
EndIf
Next i

大体合ってますが、こんな感じにした方がいいかと。
For文のStep 1については省略可能ですし、文字列の比較は=でも可能ですよ。
ただ、=での比較はアルファベットの大文字小文字が違うだけでも違う内容だと判断されるため、大文字小文字を問わずに比較したい場合はStrcomp関数を使った方が良いかも。

ちなみに、2つのファイルを読み込んだ配列の要素数が可変の場合はUBound関数を使うと良いですよ。
num = UBound(a)でnumの中にA配列の要素数が入ります。
同様に、num = UBound(b)だとB配列の要素数です。
    • good
    • 0

先日、他の方も言っておられましたが、ちょっとは自分で調べたら?



VBScriptのリファレンスをちょろっと読むだけで出てくるような
低レベルな質問ばっかりなんですが。

こんなところで、たまたま親切な人が通りかかって
回答をくれるのを待つよりも、よっぽど早いし確実ですよ。

FileSystemObjectの GetFolder に対象のフォルダのパスを指定して
フォルダオブジェクトを取得します。
フォルダオブジェクトの Filesコレクション をFor Each で回せば
特定のフォルダ内のファイルをひとつづつ処理できます。

このとき、拡張子がcsvを判定して、ループを抜けるようにしないと
どうでもいいファイルも処理するので気をつけてください。
ま、そのフォルダ内のファイルは全部csvという前提なら別に構いませんが。

csvが3個以上あった場合とか、
実際の処理でファイルの入力順序を意識する必要があるのか?ないのか?とか
いろいろ気になる部分はありますが・・・
    • good
    • 0
この回答へのお礼

調べてからの確認です。
プログラム自体初心者なので、リファレンスを読んでも自分のやりたい関数はどれを使用すれば実現できるのかなどなかなかわからないわけです。
すいません。

CSVは2個限定なのですが、
読み込む順番はどうなるのでしょうか。どちらを先に読み込むかがきになります。

お礼日時:2011/10/20 02:24

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