[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Findによる検索について』(ばばこ)
Findによる検索で、思うような検索ができず、困っています。
現在、エクセルのシートに項目ごとに情報が羅列されたものがあります。
3) 日付 名前 性別 部署
4) 5/14 A 男 あ
5) 5/14 B 男 あ
6) 5/14 C 男 い
7) 5/15 D 男 い
8) 5/15 E 男 う
3)行は、項目になります。
4)行からは項目に基づくデータになります。
そこで、Findで、5月14日の行範囲を取得をしたく、現在のコードとしては
Set sh = Range(Cells(4, 1), Cells(n_row, 1)).Find(What:=inputday, LookAt:=xlWhole, SearchOrder:=xlByColumns)
としています。尚、日付は1列目にあり、n_rowは最終行番号で8行目になります。inputdayは5月14日 です。
私の認識では、この場合、範囲に対して上から検索をするので、範囲の最初の行番号が、4が返ってきてほしいのですが、5が返ってきてしまいます。
これを4が返ってくるようにするにはどうすればよいでしょうか?
単に検索範囲をCells(4, 1)⇒Cells(3, 1) にするしかありませんか?
でも、Set sh = Range(Cells(4, 1), Cells(4,1)).Find(What:=inputday, LookAt:=xlWhole, SearchOrder:=xlByColumns)
とすると、sh.row が4で返ってきます。
また、
3) 日付 名前 性別 部署
4) 5/14 A 男 あ
5) 5/15 B 男 あ
このように日付が連続しない場合で、
Set sh = Range(Cells(4, 1), Cells(n_row, 1)).Find(What:=inputday, LookAt:=xlWhole, SearchOrder:=xlByColumns)
sh.rowは4が返ってきます。
何なのですかこの仕組み?
分かる方ぜひ教えてください。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
なので、After:=Cells(n_row, 1) を追加すればOKです。
ちなみに、↓はA4セルだけしかみてないから
Range(Cells(4, 1), Cells(4,1))
見つかれば、sh.row で4が返り、
見つからない場合、実行時エラーになります。
>日付が連続しない場合
連続するしないでなく、A4セルの次のA5セルから探していったら、A4セルで見つかっただけです。
なので、たとえば、A6セルに条件に合うものがあれば、そちらが返ります。
(もこな2) 2020/05/15(金) 08:53
再度質問なのですが、findが次のセルから検索する仕様ということは理解致しました。
After:=Cells(n_row, 1)
を追加すると、指定範囲の最終行になりますが、その次は指定範囲の最初の行になるのでしょうか?
(ばばこ) 2020/05/15(金) 08:59
ちなみに、以下は書き方が悪かったです。
↓のように読み替えてください。
見つかれば、sh.row で4が返り、
見つからない場合、実行時エラーになります。
↓
見つかっていれば、sh.row で4が返り、
見つかっていなければ、sh.row は、実行時エラーになります。
>型が一致しません
あれ…、ちょっとスマホなので、直ぐに確認できませんが、どの行でエラーになります?
(もこな2) 2020/05/15(金) 09:05
なるほどです!とてもすっきりしました。
そして、エラーについてですが、私の書きミスでした。
本当にありがとうございます!!!
(ばばこ) 2020/05/15(金) 09:10
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.