こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBA セルを参照した文字検索でシートをアクティブにする

VBA初心者で困っています。

ブックAのシート1の“A1”の値が、同一ブック内の違うシートにあるかどうか検索し、あればそのセルをアクティブにして黄色に色づけ、なければメッセージを返すという処理をVBAで行いたいです。

似たような質問があってそれを参考にしてみましたが
どうも上手く動いてくれません。

参考にさせていただいたのは
  Set r = Workbooks("ブックB.xls").Sheets("シート1").Columns("A") _
    .Find(What:=Workbooks("ブックA.xls").Sheets("シート1").Range("A1").Value, _
       LookIn:=xlValues, _
       LookAt:=xlWhole, _
       SearchOrder:=xlByColumns, _
       SearchDirection:=xlNext, _
       MatchCase:=True)
  If r Is Nothing Then
    MsgBox "no data"
  Else
    Application.Goto r
    Set r = Nothing
  End If
End Sub

というコードです

どなたか、わかる方教えてください。

投稿日時 - 2009-05-31 00:02:59

QNo.5004049

困ってます

質問者が選んだベストアンサー

#1です。

>If ws.Name < AAA > "Sheet1" Then
If ws.Name <> "Sheet1" Then
こうでは?

上記のIf文がTrue(成立)にならないので変数:chがFalseのままになっているため、
MsgBox"no data"がでてしまうのかと。

投稿日時 - 2009-05-31 14:59:26

お礼

出来ました!!
ありがとうございました!!
感激です、これで会社に役立てそうです!!!
ありがとうございました!

投稿日時 - 2009-05-31 22:48:16

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

参考にしたコードではなく、実際に作成し動かないコードを提示し且つどのように
上手くいかないのか書かれた方が宜しいかも。

例えるなら
Sub try()
 Dim ws As Worksheet
 Dim r As Range
 Dim ch As Boolean

 ch = False
 For Each ws In Worksheets
     If ws.Name <> "Sheet1" Then
        Set r = ws.Cells.Find(Worksheets("Sheet1").Range("A1").Value, _
                              LookIn:=xlValues, _
                              LookAt:=xlWhole, _
                              SearchOrder:=xlByColumns, _
                              SearchDirection:=xlNext, _
                              MatchCase:=True)

        If Not r Is Nothing Then
           ws.Activate
           r.Select
           r.Interior.ColorIndex = 6
           ch = True
        End If
     End If
 Next
 If ch = False Then MsgBox "no data"
 Set r = Nothing
End Sub

こうゆう事なのかな?

投稿日時 - 2009-05-31 07:27:28

補足

早速のご回答ありがとうございます
自分ではとても思いつかず、いくら考えてもダメだったと思います

検索するのはブックAAA の Sheet1 のセルQ13に入っているBBBという内容だとします

Sub try()
Dim ws As Worksheet
Dim r As Range
Dim ch As Boolean

ch = False
For Each ws In Worksheets
If ws.Name < AAA > "Sheet1" Then
Set r = ws.Cells.Find(Worksheets("Sheet1").Range("Q13").Value, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, _
MatchCase:=True)

If Not r Is Nothing Then
ws.Activate
r.Select
r.Interior.ColorIndex = 6
ch = True
End If
End If
Next
If ch = False Then MsgBox "no data"
Set r = Nothing
End Sub

として試してみましたが
他のシートに BBB という単語があるにも関わらず
no dataが出てしまいます

私にはこれで正しいように思えるのですが・・・・
どこがいけないのでしょうか・・・・

投稿日時 - 2009-05-31 08:26:15

あなたにオススメの質問