人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルVBAについて質問です。【良回答500?250ポイント】
急ぎで解決したい課題があります。早く解決できればポイント送信にて多く差し上げます。
ファイルの検索が2つのフォルダで行うのでどういう処理にすればよいか困っています。

Aフォルダのファイルを順次開く

Aフォルダの1つ目のファイルを開いたまま

AフォルダのファイルとBフォルダのファイルの
ファイル名の頭から10文字ぐらいが一致しているファイルをBフォルダから検索する

一致したらBフォルダのファイルのRange("A1") を Aフォルダのファイル Range("A1") に転記する

Aフォルダのファイル2つ目を開く、繰り返し

よろしくお願いします。


イメージ的には下記ような処理になります。

Do While dataFile1 <> ""
With Workbooks.Open(dataPath1 & dataFile1)
tmp = Workbooks.Name

Do While dataFile2 <> ""
With Workbooks.Open(dataPath2 & dataFile2)
If True Then
'処理

Exit Do
End If
dataFile2 = Dir
End With
Loop

.Close
dataFile2 = Dir
End With
.Close
dataFile1 = Dir
Loop

●質問者: pochi1234
●カテゴリ:ビジネス・経営 コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● TransFreeBSD
●500ポイント ベストアンサー

デバッグしてません。あしからず。

Sub Macro1()
 Dim fso, dataFilesB, fA, fB, tmp
  ' ファイルを扱うオブジェクトを取得する
 Set fso = CreateObject("Scripting.FileSystemObject")
  ' あらかじめBフォルダのファイル一覧を取得しておく
 Set dataFilesB = fso.GetFolder(dataPathB).Files
  ' Aフォルダのファイル毎に繰り返す
 For Each fA In fso.GetFolder(dataPathA).Files
 For Each fB In dataFilesB
  ' 一つ一つBフォルダのファイルと比較する 
 If nearly(fA.Name, fB.Name) Then
  ' おおよそ同じファイル名なら値をコピーして保存する
 With Workbooks.Open(fB.Path)
 tmp = .ActiveSheet.Range("A1").Value
 .Close
 End With
 With Workbooks.Open(fA.Path)
 .ActiveSheet.Range("A1").Value = tmp
 .Save
 End With
 Exit For
 End If
 Next fB
 Next fA
End Sub

' 比較関数:適宜作ってください
Function nearly(nameA, nameB)
 If nameA.left(10) = nameB.left(10) Then
 nearly = True
 Else
 nearly = Fales
 End If
End Function

ファイルは毎回開く必要はないですよね?

一致した時だけ開いてコピーします。

本当はファイルをソートしておくとか比較回数を減らす方法がありますが、そこまではやりませんでした。


忘れてました。参考リンクです。

http://home.att.ne.jp/zeta/gen/excel/c04p24.htm

http://officetanaka.net/excel/vba/filesystemobject/index.htm


pochi1234さんのコメント
ご回答ありがとうございます。fsoでできるんですね、今デバックしていますが、 なかなかうまく行かなくて困っています。 passはなぜか絶対パスでないと動きませんでした。

pochi1234さんのコメント
デバックできました。 補足 ・pathは絶対パスに変更 ・letfの使い方は If Left(nameA, 10) = Left(nameB, 10) Then ・tmpはobjectは使えないので、variantに変更 ありがとうございます。

TransFreeBSDさんのコメント
Leftの使い方が……ぼけてましたね(^^; GetFolderについては、リファレンスには相対もOKとありますが、カレントディレクトリの問題とかかもしれませんね。GUIだとそのあたり、曖昧になりがちなので絶対指定の方が確実かもしれません。 いずれにしろ、お手数おかけしました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ