- ベストアンサー
マクロ FINDについて
いつも回答して頂きありがとうございます。 ネット等で調べましたがさっぱり分かりません。指定した文字が下から数えて2番目にくる場合の記述方法について教えて頂けないでしょうか?宜しくお願い致します。 Find("定期", , xlValues, 1, , 2) のどこを変えたらよろしいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
少し手直しました。 sub macro2() dim res as range dim N as long, i as long N = 3 ’そもそも指定数(以上)の「定期」が無かったらダメ if application.countif(range("A:A"), "定期") < N then msgbox "NA" exit sub end if ’A1から逆向き(一度一番下に回ってから上向き)に定期を探す=一番下の定期がヒットする ’必ずVBAのヘルプでfindを確認し、各名前付き引数の説明を理解してください set res = range("A:A").find(what:="定期", lookin:=xlvalues, lookat:=xlwhole, searchdirection:=xlprevious) for i = 2 to N ’そのひとつ前(上)にある定期を取得する set res = range("A:A").findprevious(res) next i res.select end sub #参考 3個程度なら、下記の方が分かりやすければそれでも。 sub macro2r1() dim res as range if application.countif(range("A:A"), "定期") < 3 then msgbox "NA" exit sub end if with range("A:A") set res = .find(what:="定期", lookin:=xlvalues, lookat:=xlwhole, searchdirection:=xlprevious) ’そのひとつ前にある定期を取得する set res = .findprevious(res) ’さらにそのひとつ前の定期を取得する set res = .findprevious(res) end with res.select end sub
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
>指定した文字が下から数えて2番目にくる場合 文字通りに理解すると、たとえばA列に 定期 あれ 定期 これ 定期 ←下から2番目にある定期 定期 それ と記入してあったら、下から2番目の定期が記入されているセルを取ってきたい という意味ですが。そういう事でいいんですね。 違うなら、具体的に例を挙げて何をしたいのか質問してください。 sub macro1() dim res as range if application.countif(range("A:A"), "定期") < 2 then msgbox "NA" exit sub end if set res = range("A:A").find(what:="定期",after:=range("A65536"), lookin:=xlvalues, lookat:=xlwhole, searchdirection:=xlprevious) set res = range("A:A").findprevious(res) res.select end sub
お礼
私の質問内容が悪かった事により、推測で回答させてしまい誠に申し訳ありませんでした。回答内容ですが、自分の考えていた内容そのものでした。ありがとうございます。 問題無く動作したのですが、〇番目とか指定する箇所はどこなんでしょうか?たぶん、findpreviousで指定していると思うのですが、どうして2番目からなっているのか理解できないので説明してて頂けないでしょうか?あと、3番目の場合の記述方法も書いて頂けると嬉しいです。お手数をお掛けしますが、宜しくお願い致します。
お礼
御手数お掛けしまして申し訳ありませんでした。 エラー処理も完璧に出来ていて脱帽です。質問する前に、FINDをヘルプで確認しましたが、何処の箇所が何番目とかに指定出来るか書いていなくて。そんな機能なかったんですね。やっぱり応用力がないと難しいです。これで、自分が今考えているマクロが出来そうなので、組み込んでみます。ありがとうございました。