Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2053 / 13645 ツリー ←次へ | 前へ→

【70282】一致する行の先頭となる行の番号について IatK 11/10/28(金) 8:54 質問[未読]
【70283】Re:一致する行の先頭となる行の番号について kanabun 11/10/28(金) 10:48 発言[未読]
【70284】Re:一致する行の先頭となる行の番号について IatK 11/10/28(金) 11:46 お礼[未読]

【70282】一致する行の先頭となる行の番号について
質問  IatK  - 11/10/28(金) 8:54 -

引用なし
パスワード
   元データをソートして


 A B 01 1
 A B 01 2
 A B 02 1
 A B 02 2
 A B 02 3


のようにしました。
このとき、例えば3列目を02で検索して、その先頭にある行(上図だと3行目の「A B 02 1」です)の行番号を取得するにはどのようにすればよろしいでしょうか?

よろしくお願いします。
 

【70283】Re:一致する行の先頭となる行の番号につ...
発言  kanabun  - 11/10/28(金) 10:48 -

引用なし
パスワード
   ▼IatK さん:

ワークシート関数のMatchを使ったらどうでしょう。
シートのどこかのセルに、 =MATCH("02",C:C,0)
これでヒットした最初のセルの行番号が返ります。

VBAなら

Sub Try1()
  Dim m
  m = Application.Match("02", Range("C:C"), 0)
  If IsNumeric(m) Then
    MsgBox m
  End If
End Sub

とかで。
検索範囲はなるべく限定したほうが速いので、
C列のたとえば「2行目から」データのある範囲だけを検索ということなら、
Sub Try2()
  Dim m
  Dim r As Range
  Set r = Range("C2:C" & Cells(Rows.Count, 3).End(xlUp).Row)
  m = Application.Match("02", r, 0)
  If IsNumeric(m) Then
    MsgBox r(m).Row
  End If
  
End Sub
のような感じでいかがでしょう。

【70284】Re:一致する行の先頭となる行の番号につ...
お礼  IatK  - 11/10/28(金) 11:46 -

引用なし
パスワード
   ありがとうございます。

おかげさまで、無事組み上げることができました。

2053 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free