• ベストアンサー

VBAの検索について

Excelシートに表の一覧があり、項目(5行目)のところでウィンドウの固定をしています。 検索したいNo.をセル(G2)に入力し、コマンドボタンをクリックします。 セル(G2)に入力されたNo.とA列に入力されているNo.が一致する行を検索し、一致した行(複数はない)を項目の下までスクロールさせた状態で表示したいと思っています。 検索までは下記プログラムでできているのですが、一致した行を項目の下までスクロールさせた状態で表示するのはどうしたらよいのでしょうか。 ************************************************************* Private Sub CommandButton1_Click()   Dim myClm As Integer, myFind As Integer, myRow As Integer   myClm = 1 'A列   If Sheet1.Range("G2") = "" Then Exit Sub   myFind = Sheet1.Range("G2")   For myRow = Cells(Rows.Count, myClm).End(xlUp).Row To 1 Step -1    With Cells(myRow, myClm)     If .Value Like myFind Then       .Activate       Exit For     End If    End With    Next End Sub ************************************************************

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

  • ベストアンサー
  • pauNed
  • ベストアンサー率74% (129/173)
回答No.2

こんにちは。 FindメソッドとGotoメソッドについて調べてみると良いかもしれません。 Private Sub CommandButton1_Click()   Dim myClm As Long   Dim myFind As Variant   Dim r   As Range   myClm = 1  'A列   With Sheet1     myFind = .Range("G2").Value     If myFind = "" Then Exit Sub     Set r = .Columns(myClm).Find(What:=myFind _                   , LookIn:=xlValues _                   , LookAt:=xlWhole)     If Not r Is Nothing Then       Application.Goto Reference:=r, Scroll:=True       Set r = Nothing     End If   End With End Sub

piopao
質問者

お礼

ご回答どうもありがとうございます。 無事解決することができました。 本当にありがとうございました。

その他の回答 (1)

noname#245936
noname#245936
回答No.1

然るに。 単に、Selectメソッドでいいような気がするのですが…。 例) Option Explicit Option Base 0 Private Sub CommandButton1_Click()   Dim lngCol  As Long   Dim lngRow  As Long   Dim strFind As string      On Error GoTo ErrH   lngCol = 1 'A列   '例外   If Sheets("Sheet1").Range("G2").Value = "" Then     MsgBox "G2に値が入っていません。"     Exit Sub   End If   strFind = Sheet1.Range("G2")   For lngRow = Cells(Rows.Count, lngCol).End(xlUp).Row To 1 Step -1     With Cells(lngRow, lngCol)       If .Value Like strFind Then         .Activate         '選択する         Cells(lngRow, lngCol).Select         Exit For       End If     End With   Next lngRow   Exit Sub    ErrH:   If Err.Number <> 0 Then     MsgBox "例外発生:(" & Err.Number & ")" & vbCrLf _         & Err.Description   End If End Sub なお。 1.変数をLong型に変えたのは、メモリは無駄だが32bitマシンでは   処理が速い+Excel2007ではCell数がintを超える為。 2.Option Explicit は宣言なしの変数利用不可   Option Base 0 は配列0スタート定義で双方ポカ除け。 …たぶん動くと思います。が。 如何でしょうか?

piopao
質問者

お礼

ご回答どうもありがとうございます。 とても詳しく教えていただき、勉強になりました。 本当にありがとうございました。

関連するQ&A

専門家に質問してみよう