[[20190225150442]] 『VBA実行後にシート内検索が出来なくなる』(おーじさん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA実行後にシート内検索が出来なくなる』(おーじさん)

初めまして。
VBAについてお伺いしたいことがあり質問させていただきます。
※VBAは「汚いコードだけど動く」レベルの素人です。

−−−−−−−−−−−−−−−−−−−−−−−−−−
Sheet1のB列より該当の番号(1〜10000)を探し出し、
一致した番号の行をSheet2の8行目に挿入。
その後、Sheet1の元あった行を削除。
−−−−−−−−−−−−−−−−−−−−−−−−−−

上記処理は問題なく実行できるのですが、この処理を行うとその後シート内検索(Ctr+F)が正しく機能しない現象に陥ってしまっています。
(検索対象が見つかりません。「オプション」をクリックして〜)
※再度Excelを開き直すとこの減少は治ります。

VBAが影響しているのか、別の原因なのかもわからない状況なので、お教えいただけると恐縮です。

 Sub test()

 DimansAsString
 ans=InputBox("Sheet2へ移動する番号を入力してください")

 IfStrPtr(ans)=0ThenExitSub
 Ifans<>""Then

 Application.CutCopyMode=False
 Sheets("Sheet2").Rows(8).Insert

 OnErrorGoToSkip
 r_num=Range(Cells(7,2),Cells(2000,2)).Find(What:=ans,LookAt:=xlWhole).Row
 Rows(r_num).CopySheets("Sheet2").Rows(8)
 Rows(r_num).Delete

 EndIf
 EndIf
 ExitSub

 Skip:
 Sheets("Sheet2").Rows(8).Delete
 MsgBox("該当の番号がありません")

 EndSub

宜しくお願いいたします。

< 使用 Excel:Excel2013、使用 OS:Windows10 >


 こんにちは ^^ 
FINDって新たに指定しなおさないと。前回指定した設定が
そのままになっている。というお話を聞いた事が有ります。
検索すればどの値がそのまま残るとか。詳細に説明が有る
サイトが有ったとおもいましたですよ。気が付いた点だけ
ですみません。
違っていましたらお許しを。。。。でわ m(__)m

(隠居じーさん) 2019/02/25(月) 15:40


 検索に失敗するとき(Findメソッドの引数省略時に起きる失敗)
https://www.moug.net/tech/exvba/0150111.html

 LookInで検索対象を指定すれば回避できるみたいなので

 Sub test()

     Dim ans As String, r_num As Long
     ans = InputBox("Sheet2へ移動する番号を入力してください")

     If StrPtr(ans) = 0 Then Exit Sub
     If ans <> "" Then
        Application.CutCopyMode = False
        Sheets("Sheet2").Rows(8).Insert

        On Error GoTo Skip
        r_num = Range(Cells(7, 2), Cells(2000, 2)).Find(What:=ans, LookIn:=xlValues, LookAt:=xlWhole).Row
        Rows(r_num).Copy Sheets("Sheet2").Rows(8)
        Rows(r_num).Delete
     End If

 Exit Sub

Skip:

 Sheets("Sheet2").Rows(8).Delete
 MsgBox ("該当の番号がありません")

 End Sub
(bi) 2019/02/25(月) 15:52

 >>隠居じーさん さん

 ありがとうございます。
 言われてみればオプションは完全に盲点でした。
 そして確かに完全一致のチェックが入ったままでした。

 >>bi さん

 私も同じサイトを見て試してみましたが、LookInを入れただけではダメでした。
 LookAtの完全一致の設定がそのまま残っているのが原因のようなので、
 もう少し探してオプションの設定ができるかどうか試してみます。
 ありがとうございました。
(おーじさん) 2019/02/25(月) 20:03

すぐにパソコン開けないので、確認してないですが、
Dim ans As String
ですから、ansは数値ではなく文字列ですよね?
そうなると、inputboxには、どのような文字を入れているのでしょうか?(全角半角、大文字小文字含めて確認します。)
あと、そのコードを標準モジュールに記述しているなら、対象のシートを省略している部分は、アクティブシートを指定したと見なされるので注意したほうがよいとおもいます。

…と書いていて、お困りの点は、マクロじゃなくて、手動で検索したときに、あるはずなのに見付からないということだったりします?

(もこな2) 2019/02/25(月) 20:33


 >>もこな2 さん

 inputboxには1〜10000の数字のみの場合と、
 1〜10000の数字の後ろに半角ハイフンと半角英数(大文字)を組み合わせた2パターンとなります。
 例)
 1245
 5607
 1645-X
 7752-UY

 使用するコードは一報方向で、
 Sheet1に設置されたボタンでSheet1からSheet2へ移動するのみなので、今のところ問題は出ておりません。
 (コードにおかしな部分や改善点があれば別途ご教授いただけると助かります。。。)

 >マクロじゃなくて、手動で検索したときに、あるはずなのに見付からないということだったりします? 
 その通りです。
 実行後の検索と置換のダイアログのオプションの
 ・セルの内容が完全に同一であるものを検索
 ・半角と全角を区別する
 この2つにチェックが入ってしまい、部分一致が出来なくなってしまっていることに困っていました。

 手動で外せば問題はないことが分かりましたが、一々外すのも面倒なので
 With Range("A1")
 .Select
 .Find What:="", LookIn:=xlValues, LookAt:=xlPart _
        , SearchOrder:=xlColumns, MatchByte:=False
 End With
 こちらのコードを試してみて、問題があればまた質問させていただければと思っております。

(おーじさん) 2019/02/26(火) 13:38


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.