あなたにとってのゴールデンタイムはいつですか?

参照するファイルが日付によって以下のようになるので
ワイルドカードを使って【東】があるファイルだけを選択したいのですが、うまくいきません。
分かる方ご教示お願いいたします。

ファイル名
【東】1
【東】2

Sub test()
Dim wb1, wb2 As Workbook
Dim ws1, ws2 As Worksheet
Dim fName As Variant
Dim mys As String
Dim i, j As Long

Application.ScreenUpdating = False
mys = Workbooks("参照.xlsm").Sheets("Sheet1").Range("A1").Value '検索値

fName = Application.GetOpenFilename("ブック,*.xlsb")
Workbooks.Open fName

Set wb2 = Workbooks("【東】,*.xlsb") '検索対象ファイル
wb2.Activate
ReDim dary(10, 5) '10件まで
n = 1
With wb2.Worksheets(1) '検索ファイルの左側シートのみ対象
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(i, 2).Value Like mys And Cells(i, 3).Value = "1" Then
For j = 1 To 5
dary(n, j) = Cells(i, j + 1).Value
Next j
n = n + 1
If n > 10 Then Exit For
End If
Next i
End With

Set wb1 = Workbooks("参照.xlsm")
wb1.Activate
With wb1.Sheets("Sheet1")
For i = 1 To 10
For j = 1 To 5
.Cells(i + 2, j).Value = dary(i, j)
Next j
Next i
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub

A 回答 (3件)

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

ファイルを選択した段階でそのBookは開くので、

>Workbooks.Open fName

は不要になる。

>fName = Application.GetOpenFilename("ブック,*.xlsb")
>Workbooks.Open fName

>Set wb2 = Workbooks("【東】,*.xlsb") '検索対象ファイル

の代わりに、

Application.Dialogs(xlDialogOpen).Show "*【東】*.xlsb"
Set wb2 = ActiveWorkbook

にしてみるとか?
    • good
    • 1

投稿後気が付きました。


>ワイルドカードで指定したい
でしたね。

 For Each wb In Workbooks
  If wb.Name Like "【東】*" Then Set wb2 = wb: Exit For
 Next
こんな感じになります。
    • good
    • 1

こんにちは、


コード全体を見ると色々ありますが、【東】,*.xlsbは既に開いている状態でしょうか?
であれば、開いているBookを順次参照して該当の名前があればSet するようにしてはいかがでしょう。

後の処理も1ファイルに対してのみと思われますので、該当ファイル名が複数開いている状態でない事が条件になるかと


Dim wb As Workbook
 For Each wb In Workbooks
  If InStr(wb.Name, "【東】") > 0 Then Set wb2 = wb: Exit For
 Next

もし、開いてないファイルに対してであれば、フォルダ内を探すなどするようにします。

ご質問にない部分ですが、気になった点をお節介させて頂きますと
Dim wb1, wb2 As Workbook
この書き方の場合、VBAでは wb1 As Variant になってしまいます。
Dim wb1 As Workbook, wb2 As Workbook このように書きます。
Dim i, j As Longも同様です。

あと、
With wb1.Sheets("Sheet1") 内は正しく書かれていますが
With wb2.Worksheets(1) 内の各Rangeオブジェクト前の .がありません。
思わぬ結果になる場合がありますので、ご確認ください。
    • good
    • 1

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

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


おすすめ情報

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