![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつもお世話になっております。
下記のコードは
B列に
ABC AACという文字を
すべて選択するというコードを作成しましたが、
以下のコードを実行すると
最終行だけ選択されます。
わかる方おしえてくれませんでしょうか
Dim myRng As Range, c As Range, Target As Range, i As Long
Set myRng = Range("B1", Cells(Rows.Count, "B").End(xlUp))
For Each myStr In Array("ABC", "AAC")
Set c = myRng.Find(What:=myStr, LookAt:=xlPart, After:=myRng.Cells(myRng.Count))
If Not c Is Nothing Then
Set Target = c
Else
Set Target = Union(Target, c)
End If
Next
If Not Target Is Nothing Then
Target.Select
End If
No.3ベストアンサー
- 回答日時:
補足のコードで気になる点では『変数の強制宣言(だったかな?)』にチェックを入れていないのでは?
宣言されていない変数を使っても動いてはいるみたいですし。
あとは記憶頼りのテキストエディタでの作成なので、綴りミスや未検証についてはごめんなさい。
sub try()
Dim myRng As Range, c As Range, Target As Range, myStr, firstAdd as string
Set myRng = Range("B1", Cells(Rows.Count, "B").End(xlUp))
For Each myStr In Array("ABC", "AAC")
Set c = myRng.Find(What:=myStr, LookAt:=xlPart, After:=myRng.Cells(myRng.Count))
if not c is nothing then
firstAdd = c.Address
do
if target is nothing then
set target = c
else
set target = union(target , c)
end if
set c = myrng.findnext(after:=c)
loop until c.Address = firstAdd
end if
next
if not target is nothing then target.select
end sub
No.2
- 回答日時:
何か補足が並んでいるようですが、補足については気づかない可能性が高いので遅れる場合はありますよ。
で、質問文においてですけどまず1つの語句を検索した際に
・1つしか見つからない⇒基本は質問のコードで構わない(修正と言うか勘違いがあるようですが)。
・2つ以上ヒットする⇒FindNext を使う必要あり。
まず前者において質問文のコードのミスは
Set c = myRng.Find(What:=myStr, LookAt:=xlPart, After:=myRng.Cells(myRng.Count))
If Not c Is Nothing Then
Set Target = c
Else
ここでしょう。
https://www.moug.net/tech/exvba/0050116.html
・LookAt:=xlPart
部分一致であってますか?
・If Not c Is Nothing Then
もし検索した語句がヒットしたら Set Target = c により変数:Target は書き換えられます(1つのセルに)。
For Each により複数の語句を順次検索させてもその限りです。
If Not c Is Nothing Then
if target is nothing then
Set Target = c
Else
Set Target = Union(Target, c)
end if
End If
でしょうかね?
検索して見つかった場合とヒットしたセルオブジェクトの情報を持っていないかと言う2つの条件判断が必要かと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) excel でグループの最後に行を追加。 3 2022/06/14 13:14
- Excel(エクセル) マクロで列を加えたら上手くいかなくなりました。 2 2022/05/23 17:59
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データが入力されている隣のセ...
-
EXCELマクロ 保護されているシ...
-
エクセルテキストボックスの文...
-
MSFlexGrid オブジェクトについて
-
Jtableの特定のセルの背景色や...
-
VBA セルに合わせて移動するが...
-
Windowsで動くVBAがmacOSで動か...
-
Excel VBA セルを指定個数ラン...
-
VBAでの入力
-
ダブルクリックすると現在の時...
-
エクセルのVBAでダブルクリック...
-
セル色を5秒間隔で変える
-
検索HITしたら全選択 複数条件
-
VBAで、貼り付け禁止命令を実現...
-
StringGridでの文字入力制限
-
エクセル: セルの枠を超えて表示
-
-1234 を (1234) と表記する由...
-
EXCELで特定のセルに表示...
-
エクセルのセル内の余白の設定...
-
Excel 1の位の数字で処理を分岐...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データが入力されている隣のセ...
-
EXCELマクロ 保護されているシ...
-
エクセルテキストボックスの文...
-
VBAで、貼り付け禁止命令を実現...
-
ハイパーリンクされているファ...
-
VBAで丸をつけたいです。
-
メッセージを1度だけ表示したい。
-
エクセルVBA(実行時エラー438...
-
ダブルクリックすると現在の時...
-
VBA セルに合わせて移動するが...
-
(VBA)アクティブセルを起点に...
-
Jtableの特定のセルの背景色や...
-
Windowsで動くVBAがmacOSで動か...
-
エクセルVBA セル選択後にカレ...
-
Excelのセル内にある図形を削除...
-
Excel VBA ダブルクリックで入...
-
セル色を5秒間隔で変える
-
StringGridでの文字入力制限
-
【VBA】参照値を1ずつ増やして...
-
マクロでのカーソル移動
おすすめ情報
下記のコードは問題なく全選択されます。
ただ、木の場合だと 条件1つだけてす
For Each を利用してやりたいのですが、
Dim Target As Range
For i = 134 To 137
If InStr(Cells(i, 1).Value, "Pro_VBA") > 0 Then
If Target Is Nothing Then
Set Target = Cells(i, 1)
Else
Set Target = Union(Target, Cells(i, 1))
End If
End If
Next
If Not Target Is Nothing Then
Target.Select
End If
End Sub
If InStr(Cells(i, 1).Value, "Pro_VBA") > 0
Or
InStr(Cells(i, 1).Value, "End Sub") > 0 Then
でいきますが、For Eachでおしえてくれませんでしょうか
FindNextメソッドですか。
やってみます。
ありがとうございます。
For Each mystr In Array("ABC", "AAC")
Set c = myRng.Find(What:=mystr, LookAt:=xlPart, After:=myRng.Cells(myRng.Count)) '〇
Next
If Not c Is Nothing Then
Set Target = c
Else
Do
Set myRng = Cells.FindNext(Target)
Loop While myRng.Address <> firstCell.Address
End If
If Not Target Is Nothing Then
Target.Select
End If
'〇の部分黄色反転致します。もうすこしなんだと思います。ヒントくれませんでしょうか
Set myRng = Range("B1", Cells(Rows.Count, "B").End(xlUp))
がぬけてました。
しかしながら最後のとろだけ選択されます。
Union(Target, c).Selectでもおなじです。