[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロが動いたりエラーを返したりしているのですが・・・原因が解りません』(ところてん)
いつもお世話になっております。
以前検索するためのマクロを意見を参考に作成したのですが、
エラーを起こしたり、リセットをすると治って動いたりを繰り返します。
原因が判らずどうしてよいものか困っております。
教えていただけると幸いです。
現在は、似て非なる検索マクロと交互に動かしながら、リセットさせております。。。
Private Sub Sarch_Click()
Dim Findans As Range Dim FindStr As String Dim myCol
'検索列の設定
myCol = "K"
'検索文字列の設定---------------------------
FindStr = TextBox1.Value '探す文字列
'検索文字列が入力されているかの確認
If FindStr = "" Then
'入力されていなければ、処理中止
MsgBox "空欄です。( ̄〜 ̄;)"
Exit Sub
End If
'検索----------------------------------------------------------------
Set Findans = Worksheets("振込表").Columns(myCol).Find(What:=FindStr, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) '←ここが反転します
'検索結果の確認
If Findans Is Nothing Then
'ヒットしなければ、処理中止
MsgBox FindStr & " は、見つかりません。 Σ( ̄ロ ̄lll) "
Exit Sub
End If
'結果の表示
Findans.Activate
gyoshaname = Findans.Value
furikominame = Findans.Offset(0, -1).Value
kouzaNo = Findans.Offset(0, -3).Value
bankname = Findans.Offset(0, -9).Value
brname = Findans.Offset(0, -7).Value
kubunmei = Findans.Offset(0, -5).Value
kubuncode = Findans.Offset(0, -4).Value
TextBoxZ = Findans.Address
Set Findans = Nothing
End Sub
よろしくご指導お願いします
どこかで見たようなコードですね たぶん >After:=ActiveCell これが原因ではないでしょうか?
ActiveCellの次のセルから探すように指示していますが
上のコードですと
>myCol = "K"
>Worksheets("振込表").Columns(myCol).Find・・・・
ですから、K列を検索したいのですよね?
で、ActivecellがK列に無い場合にActiveCellの次のセルがK列ではないので
エラーになってしまいます。
こんな場合、私はいつも
With Worksheets("振込表").Columns(myCol)
Set Findans = .Find(What:=FindStr, After:=.Cells(1), LookIn:=xlFormulas, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
End With
のように書きます。
蛇足ですが >LookIn:=xlFormulas >LookAt:=xlPart は、本当によろしいのですか? ヘルプを見て確認してみてください。 (momo)
すいません。色々参照し、組み合わせながら勉強しながら組んでいるのでみた事あるかもしれません(汗)
確かにLookInは要らなさそうですね。。。
LookAtは一部検索なので要ると思っていました。要らなかったですかね?
上記のコードだとそのまま連続で動いてくれないのですが、Nextを弄っていないのですがなぜでしょうか?After:=.Cells(1), だと1つで固定と言う事になりませんか?
例えば、K列に『青山、緑区、赤山、赤座、青海、青梅、黄海・・・』とあり"青"と検索を打ち込んだ場合、"青"で掛る物を検索表示してボタンを押すたびに次候補に移る・・・といった形にしたいのです。
一応検索に掛らないものはMsgで表示する形式になっていると思っていたのですが。。。。
すいません。教えを買うているのに出しゃばって注文までして。。。。
(ところてん)
要る要らないではなく、必要です。 Findメソッドは省略すると前回検索時のパラメータを引き継いでしまうので 必ず指定するようにしてください。
>LookAtは一部検索なので という事であれば、そのままで大丈夫です。
>After:=.Cells(1), だと1つで固定と言う事になりませんか? .Cells(1)ですから、K列の1つめのセル つまりK1からという事になります。 1行目から検索したいのであれば、最終行から検索すれば良いので .Cells(.Cells.Count)のようにします。
>連続で動いてくれないのですが 連続で動かすように書いていないからです。
サンプルを掲示してみるので、新規ブックで以下のコードを試して動作を確認してください。
Sub test() Dim Findans As Range Dim FindStr As String Dim FirstAddress As String
Worksheets("Sheet1").Range("K1:K7").Value = _
Application.Transpose(Array("青山", "緑区", "赤山", "赤座", "青海", "青梅", "黄海"))
FindStr = "青"
With Worksheets("Sheet1").Columns("K")
Set Findans = .Find(What:=FindStr, After:=.Cells(.Cells.Count), _
LookIn:=xlFormulas, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If Findans Is Nothing Then
MsgBox "見つかりません"
Else
FirstAddress = Findans.Address
Do
MsgBox Findans.Address & " セルが見つかりました"
Set Findans = .FindNext(Findans)
Loop Until Findans.Address = FirstAddress
End If
End With
Set Findans = Nothing
End Sub
(momo)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.