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

このQ&Aのポイント
  • VBA初心者の質問です。ブックAのシート1のA1の値が、同じブック内の別のシートに存在するかどうか検索し、存在する場合はそのセルをアクティブにして黄色に色づけし、存在しない場合はメッセージを表示する処理をVBAで行いたいです。
  • 参考にしたコードは、ブックBのシート1のA列から、ブックAのシート1のA1の値を検索するものです。検索方法は、値を完全一致で検索し、列ごとに順次検索しています。検索結果が見つからない場合は、「no data」というメッセージを表示します。
  • しかし、このコードは期待通りに動作しません。正しくセルを検索してアクティブにする方法を教えていただけると助かります。
回答を見る
  • ベストアンサー

エクセル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 というコードです どなたか、わかる方教えてください。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

#1です。 >If ws.Name < AAA > "Sheet1" Then If ws.Name <> "Sheet1" Then こうでは? 上記のIf文がTrue(成立)にならないので変数:chがFalseのままになっているため、 MsgBox"no data"がでてしまうのかと。

cad0113
質問者

お礼

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

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.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 こうゆう事なのかな?

cad0113
質問者

補足

早速のご回答ありがとうございます 自分ではとても思いつかず、いくら考えてもダメだったと思います 検索するのはブック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が出てしまいます 私にはこれで正しいように思えるのですが・・・・ どこがいけないのでしょうか・・・・

関連するQ&A

  • VBAエクセルにて開いてないエクセルシートを開いてるシートに所得

    お世話になります。 「同じフォルダー内にBOOKが2つ有ります。1つ(AK.xls)を立上げて もう1つの(EX.xls)を立上げずに、EX.xls内のSheet1をコピーして AK.xlsのシート(STEP1)に貼り付けようとしています。」 どうしてもエラーが出てしまいます。 何方か、分かる方教えて下さい。 また記述して戴ければもっと助かります。 エラーは”1004”EX.xlsが見つかりません。と出てしまいます。 Sub ST() Dim wsSrc As Worksheet, WS As Worksheet Dim PasteR As Range Dim x As Long Sheets("STEP1").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select   Set wsSrc = ActiveSheet Workbooks.Open "EX.xls" For Each WS In Worksheets x = WS.Range("A1").CurrentRegion.Rows.Count If WS.Index = 1 Then Set PasteR = wsSrc.Range("A1") Else Set PasteR = wsSrc.Range("A65536").End(xlUp).Offset(1) End If WS.Range(WS.Cells(1, 1), WS.Cells(x, 44)).Copy PasteR Set PasteR = Nothing Next ActiveWorkbook.Close False Set wsSrc = Nothing End Sub デバックでは Workbooks.Open "EX.xls"この部分が黄色になります。 是非、回答を宜しくお願い致します。

  • Excel VBA 指定シートの取込

    こんにちは。 ExcelのVBAを使用して、異なるBookのシートを取込みたいのですが、 シートが無かった場合の処理方法がわかりません。 現在のコードは下記の様になっております。 With Workbooks.Open"BOOK1.xls" .Worksheets("Sh1").Cells.Copy ThisWorkbook.Sheets("Sheet1").Range("A1") .Worksheets("Sh2").Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") .Worksheets("Sh3").Cells.Copy ThisWorkbook.Sheets("Sheet3").Range("A1") .Close End With Book1に指定したシートが無い場合、何もしないようにしたいのですが、 どの様に書き換えれば宜しいでしょうか? よろしくお願いします。

  • エクセルVBA 無駄な部分をおしえてください

    VBA初心者です。 多数のシートを条件によって二つのブックに分ける、というVBAを作ろうとしています。 なにぶん素人なので、無駄な文章が多いのではないかと心配で、 お知恵を拝借できればと思い投稿いたしました。どうぞよろしくお願いいたします。 やりたいこと:Book1のA列に100程度の文字列があり、そのいずれかと一致するシート名(Book1のSheets(2)以降)を持つシートはBook2の最終シートの後ろへ、どの文字列ともシート名が一致しないシートはBook3の最終シートの後ろへ移動。(「最終シートの後ろへ移動」がうまくいっていません) VBAの内容:Book1のH1に「=countif(A:A,G1)」と入力しておき、G1にシート名を入力させ H1>0ならば該当シートをBook2へ、それ以外はBook3へ移動 の繰り返し   Application.ScreenUpdating = False Dim j As Integer, k As Integer j = Workbooks("Book2.xls").Worksheets.Count k = Workbooks("Book3.xls").Worksheets.Count Do While Workbooks("Book1.xls").Sheets.Count > 1 Range("G1").Value = Worksheets(2).Name If Range("H1").Value > 0 Then Worksheets(2).Move after:=Workbooks("Book2.xls").Sheets(j) Else Worksheets(2).Move after:=Workbooks("Book3.xls").Sheets(k) End If Loop

  • エクセルのシートのコピーについて

    シートのコピーをVBAで行いたいのですが、エラーになってしまいます。 間違っている箇所が分からないのでご教授お願いします。 貼り付けというブックにマクロが組まれています。 ”データ”のブックにあるシート名が”貼り付けのブックのリスト”のシートに記載されています。 リストのシートに記載されているシートを貼り付けのブックにコピーしたいです。 よろしくお願いします。 Sub シートコピー() 行数 = 2 Do Until IsEmpty(Cells(行数, 3).Value) コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) Workbooks("データ.xls").Worksheet(コピー元).Copy After:=Workbooks("貼り付け.xls").Sheets(Workbooks("貼り付け.xls").Sheets.Count) 行数 = 行数 + 1 Loop End Sub

  • エクセルVBAで解らない部分があります。

    エクセルVBAで解らない部分があるのでどなたか教えてください。 ある表から特定の日付を探して抜き出すVBAを組み込んだファイルに下記のような記述がありました。 y=1:i=1 do   set tmp=workbooks("B").sheets(1).rows(2).find(workbooks("A").sheets(1).cells(y,1),lookat:=xlwhole)   if not tmp is nothing then     Workbooks("B").sheets(2).cells(i,1)=workbooks("A").sheets(1).cells(y,1)     '~略~     i=i+1   end if   y=y+1 loop until y=workbooks("A").sheets(1).range("A65536").end(xlup).row この中の「y=1:i=1」がよくわかりません。どなたか解る方どういう意味か教えてくれませんか? よろしくお願いします。

  • VBA(エクセル)で教えて下さい。開いていないBOOKの貼り付け

    VBA(エクセル)で教えて下さい。開いていないBOOKのシートを開いているBOOKのシートに貼り付けで、開いているBOOKから開いていないBOOK名を指定したいのですが、 現在開いているエクセルです。 SHEETS(Type)のRANGE(A1)に閉じているBOOK名を入力します。 SHEETS(In)に閉じているBOOKのSHEETSを貼り付けたいのですが、 Ex = Sheets("Type").Range("A1")  が無いと閉じているEx.xlsを貼り付けます。 このExと言うBOOK以外も多々コピーしたいのですが、どのように書けば良いか分からず、 是非、教えて下さい。 Sub a1() Dim wsSrc As Worksheet, WS As Worksheet Dim PasteR As Range Dim x As Long Sheets("In").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select 'If Worksheets(1).Name = "STEP1" Then ' Worksheets(1).Activate ' Cells.ClearContents ' Else 'Worksheets.Add(Before:=Worksheets(1)).Name = "一覧" 'End If   Ex = Sheets("Type").Range("A1")   Set wsSrc = ActiveSheet Workbooks.Open "C:\WINDOWS\デスクトップ\test\Ex.xls" For Each WS In Worksheets x = WS.Range("A1").CurrentRegion.Rows.Count If WS.Index = 1 Then Set PasteR = wsSrc.Range("A1") Else Set PasteR = wsSrc.Range("A65536").End(xlUp).Offset(1) End If WS.Range(WS.Cells(1, 1), WS.Cells(x, 44)).Copy PasteR Set PasteR = Nothing Next ActiveWorkbook.Close False Set wsSrc = Nothing End Sub

  • VBA Excel処理の追加を2点教えてください

    Office2003(SP3) 以下は、昔、教えてもらったExcel VBAスクリプトで、よく使わせて もらってます。「C:\mybooks\」にあるxlsファイル(a001.xls、a002.xls、 a003.xls・・・・)を片っ端から開き、 1つのBookに束ねる動作をします。 これだけでも大変便利なのですが、もう少し改善いたしたく。 (1) 束ねられたBookのSheet名が、Sheet1、Sheet1 (2)、Sheet1 (3)、 Sheet1 (4)・・・ になってしまいます。そこで、ファイル名から拡張子を落 とした文字列をSheet名にセットする記述をご教示下さい。 (2) a001.xls、a002.xls、a003.xls・・・は、それぞれSheet1、Sheet2、 Sheet3を含みます。Sheet1だけが抜き取られてSheet2、Sheet3が残された大量 の残骸Bookが開きっぱなしになります。これら、保存せずに閉じる記述を追加 したいのですが。 よろしくお願い致します。 Sub OpenFiles() Dim i As Integer Dim wb As Workbook Dim fname Dim dirname As String ' i = 1 dirname = "C:\mybooks\" fname = Dir(dirname + "*.htm") If fname <> "" Then Do While fname <> "" If fname <> "." And fname <> ".." Then If i = 1 Then ' 最初のファイルを開く Workbooks.OpenText FileName:=dirname + fname Set wb = ActiveWorkbook ' 最初のファイルを新規ブックに複製して閉じる。 ActiveSheet.Copy wb.Close Set wb = ActiveWorkbook Else ' 2番目以降のファイルは複製した最初のファイルに追加 Workbooks.OpenText FileName:=dirname + fname ActiveSheet.Move After:=wb.Worksheets(wb.Worksheets.Count) End If i = i + 1 End If fname = Dir Loop Else MsgBox "検索条件を満たすファイルはありません。" End If Set wb = Nothing End Sub

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • エクセルVBAで検索してシートへ貼り付け。

    どうも。 エクセルでVBAをやっています。 表に映画のデータベースのように打ち込んで VBAフォームでタイトルを検索して、ヒットした行を別シートに出力するというのがやりたいのですが、できないのです。 Private Sub CommandButton1_Click() '変数の宣言 strTitle = "" intEndIndex = 0 intTate = 1 intYoko = 1 With Workbooks("book1.xls").Sheets(1) strTitle = UserForm3("TextBox1") i = 1 Do Until .Cells(i, 1) = "" i = i + 1 Loop 'A1から下へ空白がでるまで検索する感じです。 intEndIndex = i - 1 Do Until intTate > intEndIndex If strTitle = "" Then Exit Do ElseIf InStr(1, .Cells(intTate, intYoko), strTitle) > 0 Then End If intTate = intTate + 1 Loop End With End Sub 検索することはできるのですが、 ヒットした行(タイトルや監督や制作年、出演者などが表に書いてある)を別シートに貼り付ける方を教えてください。 よろしくお願いします。

  • エクセルVBAで別ブックの条件検索

    VBA初心者です。エクセルは2007です。 『データのあるブック(Book1,Book2,Book3)』と、『検索条件シート+出力先シートをもつブック』の4つのブックがあります。 検索条件シートで、L22でブック、P22でシートを指定してN22に入力した数に対応するデータをVlookupで出力先シートのセルに抽出されるようにしたいのですが、※の部分で「エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」とでて実行できません。 データのあるブックは同じ形式でシートには表があります。 数 a b c d 1 A B C D 2 ○ × △ ■ 3 Z Y X W     ・     ・ 検索条件がL22=3,P22=2,N22=2だとすると、Book3の2枚目のシートを検索し、 出力先シートのD1=○,J6=×,L23=△,J69=■となるようにしたいです。 本やインターネットで調べましたがわかりませんでした。 解決方法を教えていただきたいです。お願いします。 Sub 検索() Dim a, b, c, d As Range Dim 番号, ブック, シート As Integer With Workbooks("検索.xlsm").Sheets("検索条件") 数 = .Range("N22").Value ブック = .Range("L22").Value シート = .Range("P22").Value End With Dim wb As Workbook Dim sh As Worksheet Dim set範囲 As Variant With Workbooks("検索条件.xlsm").Sheets("出力先") Set a = .Range("D1") Set b = .Range("J6") Set c = .Range("L23") Set d = .Range("J69") End With Select Case ブック Case 1 Set wb = Workbooks("Book1.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case 2 Set wb = Workbooks("Book2.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case 3 Set wb = Workbooks("Book3.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case Else MsgBox "nothing", vbExclamation, "nothing" End Select ※Set set範囲 = wb.sh.Range("A4:E42")  ←エラー438 a = Application.WorksheetFunction.VLookup(数, set範囲, 2, False) b = Application.WorksheetFunction.VLookup(数, set範囲, 3, False) c = Application.WorksheetFunction.VLookup(数, set範囲, 4, False) d = Application.WorksheetFunction.VLookup(数, set範囲, 5, False) End Sub