
Excelでセルに任意の文字列をペーストします。そのセルは別のブックにリンクしているのでペーストする度にリンク先のセルでは文字列が更新されます。リンク先のブックにはワークシートが10あっていづれかのシートのA列にその文字列がある事になっています。更新された文字列を検索する作業を繰り返すのでマクロで組み込もうと思ったのですがFIND関数にしても、VBでCell.Find(What:=....と書くにも参照する文字列を直接指定してやらないと動きません。参照する文字列が相対的に変化するので「特定のセルの中に入力された文字列」を参照してブック内を検索したいということなのですが、実現するにはどうしたらようでしょうか?と質問して
moji = "B1"
Set c = Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then c.Select
というコードをしめしていただきました。このままだと検索対象がRangeオブジェクトになっているのでActivesheet上でしか検索がかからないのでCellsにすればブック内のすべてのシートに検索がかけられるかな?と思っていたのですがエラーがでます。ブック内を検索範囲に入れるためにはどうしたらよいでしょうか?
No.1ベストアンサー
- 回答日時:
全てのワークシートを検索するのなら、
Sub test()
Dim ws As Worksheet
Dim moji As String
Dim c As Range
moji = "B1"
For Each ws In Worksheets
With ws
Set c = .Range("A:A").Find(What:=moji, After:=.Range("A" & Rows.Count), _
LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
.Activate
c.Select
Exit Sub
End If
End With
Next
MsgBox "なかったよ"
End Sub
順番に見ていくしかないのでは。
この回答への補足
ありがとうございます。順番に見ていくしかないという一言が一番利きました(笑い)。午後の間、格闘してみましたが
Sub test()
moji = Sheet1("B1")
Set c = Sheet1.Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole)
Set b = Sheet2.Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole)
Set d = Sheet3.Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then c.Select
ElseIf Not b Is Nothing Then b.Select
ElseIf Not d Is Nothing Then d.Select
End If
End Sub
というようにSheet1のB1を検索文字欄に固定して検索項目を分け、それぞれを条件つきで表示してはどうかと思いました。が、Elseに対応する
Ifがないとエラーが出ます。なぜなんでしょうか?
No.2
- 回答日時:
moji = Sheet1("B1")
ここも変なのですが。
If Not c Is Nothing Then c.Select
ElseIf Not b Is Nothing Then b.Select
ElseIf Not d Is Nothing Then d.Select
End If
1行目の
If Not c Is Nothing Then c.Select
でIF文は終了しています。なので以降のELSEIFに対してのIFが見つからないのです。
(1行で終わるのであれば書き方は問題ないですが、以降にELSEがあるので問題になります。)
If Not c Is Nothing Then
c.Select
ElseIf Not b Is Nothing Then
b.Select
ElseIf Not d Is Nothing Then
d.Select
End If
と言うように改行すれば解決かと。
たびたびありがとうございます。
>moji = Sheet1("B1")
ここも変なのですが。
確かにトンちきなことを書いてますね。
この時間までいろいろ試してエラー400と戦いながら(笑)
Sub test()
'
'test macro
'
Dim moji As String
Dim c As Range
Dim b As Range
Dim d As Range
moji = Sheet1.Range("B1")
Set c = Sheet1.Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole)
Set b = Sheet2.Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole)
Set d = Sheet3.Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
Sheet1.Select
c.Select
ElseIf Not b Is Nothing Then
Sheet2.Select
b.Select
ElseIf Not d Is Nothing Then
Sheet3.Select
d.Select
End If
End Sub
となりました。これだと指定したシート範囲内にsheet1のB1に入力した文字列を検索できます。朝から四苦八苦していましたが今日中に目処が立ったのもご指導のおかげです。今後は改行の効果についても頭に入れて勉強します。ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数 ENTERを押...
-
VBAマクロで作成した新規ブック...
-
WorkBooksをオープンさせずにシ...
-
【マクロ】【画像あり】❶ブック...
-
エクセルでSheetの数は最大限ど...
-
エクセルを開くと最大化などの...
-
複数ファイルから特定シートの...
-
Excel VBA セルと同じ名前のブ...
-
エクセルで開いていないbookの...
-
ワードやエクセルで「時間が来...
-
ワークシートの構成を確認する...
-
Excel 2013 の[最近使ったブッ...
-
Excel VBAでブックを閉じる時、...
-
ブックのピボットを別ブックに...
-
【マクロ】【画像あり】ファイ...
-
エクセルにおける,「ブック」...
-
データのリンク元を一部だけ変...
-
祭の祝儀 掲示・集計ソフト
-
1ヶ月分の日付を一度に出す方法...
-
Nintendo Switch 2 キャリング...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
【マクロ】【画像あり】ファイ...
-
【マクロ】【画像あり】❶ブック...
-
Excelファイルをダブルクリック...
-
エクセルで参照しているデータ...
-
WorkBooksをオープンさせずにシ...
-
フォルダ内の複数ファイルから...
-
Excel(2010)のフィルターが保...
-
複数ファイルから特定シートの...
-
エクセルでウィンドウの枠固定...
-
Excelで複数ブックの同一セルに...
-
同じフォルダへのハイパーリン...
-
エクセルを開くと最大化などの...
-
ブックのピボットを別ブックに...
-
vbaでpdfを開いて1ページ目のみ...
-
Excelでブックの共有を掛けると...
-
指定ファィルの指定シートをシ...
-
エクセルにおける,「ブック」...
おすすめ情報