許せない心理テスト

フォルダに入っている複数のブックを別ブックに転記するという処理をしたいのですが、
シートが複数ありまたシート名が毎回異なる為、ある特定の文字を含んだシート名が入っていた場合処理を適用する、ということをしたいです。しかしFor ~ の構文を使ってもうまくいきません。。。
どなたか下記★部分のマクロのコードを教えていただけないでしょうか。

Dim fpath As String, fname As String
Dim wb As Workbook
Dim sh As Worksheet
Dim no As Variant
Dim no2 As Variant

Application.ScreenUpdating = False
With Worksheets("メニュー")
fpath = .Range("コピー元フォルダ指定パス").Value & "\"
Set sh = Worksheets(.Range("コピー先指定シート名").Value)

Do Until fname = ""
Set wb = Workbooks.Open(fpath & fname)
★コピー元ブック内のシート名に"A"が含まれているシートがある場合以降の処理をする、無かった場合は処理をせず、次のブックへ。。。という事がしたいです。

★ Aが含まれているシートがあった場合、下記のnoとno2に指定したシートのセルの情報を入れますが指定シートの名前が毎回異なります。仮でSheet1,2とそれぞれしていますが、
noはシート名に"B"という文字が含まれている場合セルA2、no2はシート名に"C"という文字が含まれている場合セルB2の情報を入れるという事をしたいです。
no = wb.Worksheets("Sheet1").Range("A2").Value
no2 = wb.Worksheets("Sheet2").Range("B2").Value

★ Withステートメントでコピー元シートを指定して転記処理をしたいのですが、
シート名がブック毎に異なります。この場合はどのように指示をすれば良いでしょうか。
With wb.Worksheets("sheet3")

以下転記処理(ここは省略させていただきます)

End With
wb.Close
fname = Dir()
Loop
Application.ScreenUpdating = True
End Sub

わかりづらく申し訳ありませが、何卒よろしくお願いします・・・。

A 回答 (1件)

こんにちは



>ある特定の文字を含んだシート名が入っていた場合処理を適用する
シート名をチェックするのには、一旦当該ブックを開く(=Open)必要があります。
ブック内のシートを順にチェックして、「特定文字」を含んでいるか調べれば良いですね。

ご提示のコードでは変数 wb がチェック対象のブックであると解釈しました。
以下のようなループで調べれば宜しいかと。

For Each sourceSh In wb.Worksheets
 If sourceSh.Name Like "*特定文字*" Then
   ' 当該シートに対する処理を記述する

 End If
Next sourceSh

※ 1ブック内に対象は1シートのみなどと決まっていれば、発見した後は、残りのシートを調べる必要はなくなると思われます。
    • good
    • 2
この回答へのお礼

助かりました

お礼が大変遅くなり申し訳ありません。。。教えていただいたコードを試してみてやりたいことが無事できました。大変助かりました。ありがとうございました。

お礼日時:2023/05/28 08:57

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

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


おすすめ情報

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