教えて! goo のコンテンツに対する取り組みについて

Excel VBAである特定文字列を含むシート名例えば「りんご(1)」「みかん(1)」「みかん(2)」「いちご(1)」のシート名があるファイルに対して「みかん*」で検索を行い、一致したシート(複数Sheet)=「みかん(1)」「みかん(2)」に対して処理を行う方法はありますでしょうか。
宜しくお願いいたします。
完全一致するファイルは下記のようなのですが、Scheck = 0の部分が理解でいません。
型は何にすればよいのでしょうか。
Sub Sheet_Add5()
Scheck = 0
For Each sheet_name In Worksheets
If sheet_name.Name = ("検索シート名") Then
Scheck = 1
Exit For
End If
Next
If Scheck = 0 Then
Sheets.Add.Name = "検索シート名"
End If
End Sub

gooドクター

A 回答 (4件)

for each s in worksheets


 if s.name like "みかん*" then
  'do みかん*
 elseif s.name = "りんご" then
  'do りんご
 else
  'do any other
 end if
next
のように。


#みかん1,みかん2,もしかしたらみかん3ぐらいまでに限定できますという話であるなら

select case s.name
case "みかん1" to "みかん9"
 msgbox "みかんs"
case "りんご"
 msgbox "りんご"
case else
end select

のようにもできます。
    • good
    • 0
この回答へのお礼

早速のお返事ありがとうございました。
「みかん」シートをコピーすると「みかん(1)」「みかん(2)」とかになりますよね。
今回はそういった形で運用されるシートに対してのみ処理をしたかったので、()をつけた場合どうも上手くいきませんでした。
色々試すうちに下記のやり方でなんとか行けそうという方法がわかりました。
今回も色々勉強させていただきました。
ありがとうございました。
Sub SelectCaseステートメントで○○を含むの書き方()
Dim msg As Variant
For Each myWS In Worksheets
msg = myWS.Name
Select Case True
Case msg Like "みかん*"
myWS.Activate
Case msg Like "Sheet1"
Range("a1").Select
Case msg Like "りんご*"
Range("b6").Select
Case Else
Range("c11").Select
End Select
Next
End Sub

お礼日時:2010/05/25 22:54

今のマクロでそこにExit Forを置いてしまったら最初のりんごで脱出してしまい,次以降のりんごがもう出来ません。




sub macro1()
 dim s as worksheet
 for each s in worksheets
  if s.name like "りんご*" then
   s.activate
   msgbox s.name
  end if
 next
end sub

この回答への補足

すみません
その該当するシートのみ2・3枚(=みかん1・みかん2シートなど)に対してのみ処理をしたいので
Sub シートチェックcase使用()
  For Each myWS In Worksheets
    select Case myWS.Name
      Case "みかん*"
          myWS.Activate
      Case "Sheet1"
         Range("a1").Select
      Case "りんご"
         Range("b6").Select
      Case Else
         Range("c11").Select
      End Select
Next
End Sub
こんな感じかと思いついたのですが、Case "みかん*" 部分の「みかん」を含むシートにヒットしません。
どのように記述すれば「みかん」を含むシートのみを対象にできるのでしょうか
お手数ですが、ご教授をお願い致します。

補足日時:2010/05/25 21:45
    • good
    • 0

>If Scheck = 0 Then


>Sheets.Add.Name = "検索シート名"
>End If


Scheckにはシート検索の判定結果が入ってます。
0初期値、見つかったときのみ1、見つからなかったら0(のまま)

If Scheck = 0 Then
 見つからなかったときの処理
else
 見つかったときの処理
End If
    • good
    • 0

Scheck の形を何にするかの質問に対しては、


"検索シート名" が有るか無いかのスイッチですので、
integer で良いと思います。


「みかん*」で検索を行うのは、
If left(sheet_name.Name,3) = ("みかん") Then
で良いと思います。

外していたらごめん
ではでは。
    • good
    • 1

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

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

gooドクター

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

人気Q&Aランキング