質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1204閲覧

FindNextで下から上へ等の検索方法の指定はできるのでしょうか?

ma2hiro

総合スコア159

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

1グッド

0クリップ

投稿2021/12/06 06:00

お世話になっております。

自分で実装して納得出来てから実際のものに組み込みたいと思っております。

excel

1 5期 2 5期A 3 5期B 4 5 4期A 6 5期A+B

vba

1Option Explicit 2Dim year, month, kikawarime As Integer, gKi As String 3Private Function getTounenndoGyou() As Variant 4 Dim tmp As Integer 5 Dim rng As Range, tempRng As Range, searchRng As Range 6 tmp = year - 2015 7 gKi = Str(tmp) & "期" 8 gKi = Replace(gKi, " ", "") 9 Dim kiGyouArray(7), i As Integer 10 Set searchRng = Range("B5:B99") 11 ' 最初はFindで検索 12 Set rng = searchRng.Find(What:=gKi, LookAt:=xlPart) 13 ' 検索結果を一時保存 14 Set tempRng = rng 15 i = 1 16 ' 条件にあったセルが見つからなければNothingが返るので何もしません 17 Do While Not rng Is Nothing 18 Debug.Print rng.Row 19 kiGyouArray(i) = rng.Row 20 i = i + 1 21 ' FindNextで検索を継続 22 Set rng = searchRng.FindNext(rng) '←←←←←←←←←←←これでどう???rng付けた 23 ' すべて検索し終えると最初に戻るので、Addressで確認! 24 ' これを忘れると無限ループになるので注意! 25 If rng.Address = tempRng.Address Then 26 Exit Do 27 End If 28 Loop 29 getTounenndoGyou = kiGyouArray 30End Function 31 32 33'================================ 34' B列の”5期hogehoge”の行を返す 35'================================ 36Sub ボタン1_Click() 37 year = 2020 38 month = 9 39 Dim tounendoGyou() As Variant 40 tounendoGyou = getTounenndoGyou 41End Sub 42

上記
tounendoGyou = getTounenndoGyou
のVBAを動作したところ
5期A+B
のある7(行目)しか帰って来ませんでした……

5期 5期A 5期B

を見つけてくれないのでどうしてかと
Set rng = searchRng.Find(What:=gKi, LookAt:=xlPart)
でxlPart を指定しているのですが正解だと思います……
もしかしてexcel内の指定で下から上への検索が有効になっているのかと勝手に思ってしまったのでお問い合わせいたします。

FindNextの指定方法で下から上と明示的に指定する方法をご教授頂けないでしょうか?

それとも考え方まるっと違っていて
上記ソースの訂正方法をアドバイス頂けないでしょうか?

本当にお忙しい所大変申し訳無いのですがご助力頂けますと嬉しく思います。

hono112👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/12/06 06:22 編集

FindNext、日本語だと「次を検索」って名称から、その逆や他のFindは無いか、と考え至れば、Rangeオブジェクトのドキュメントのメソッドからすぐ探せるのではないでしょうか。 前回のあなたの質問で、hatena19さんの紹介しているページで検索のパターンも何種類か載っていますが、もし読んでたらそもそもこういう質問出てこないと思うんですけど。
bebebe_

2021/12/06 07:06

1行ずつ実行していけばどのように動作しているかわかると思うのですが・・・
ma2hiro

2021/12/06 07:19

radian様 https://www.moug.net/tech/exvba/0050116.html にはFindPreviousとありますね…… 何故最終行しか検索で引っかからなかったのか謎なのです…… bebebe_様 すいません。 一行ずつ実行していっても Set rng = searchRng.FindNext(rng) で同じ所しか見つけてくれないのです…… 皆様のお叱りは重々承知なのですが頼れる所がこちらしか思いつかないのです…… ご助力頂けますようお願い申し上げます。
退会済みユーザー

退会済みユーザー

2021/12/06 07:45 編集

> 一行ずつ実行していっても > Set rng = searchRng.FindNext(rng) > で同じ所しか見つけてくれないのです…… そりゃコード変えてないなら、同じ動きになるのは当たり前でしょう。一行づつ実行して期待通りの動きをしない行を探し、変数の値を見ておかしい所が無いか確認して、自分の期待する動きになるよう修正するという事です。(俗にいうデバッグ) teratailではデバッグは非推奨質問なので、最低限自分で調査出来る事くらいはやってください。 コードを丸投げして、答えを貰いに来る場所じゃありません。 [推奨していない質問] https://teratail.com/help/avoid-asking [1-1. teratailはサポートセンターではなく、思考するエンジニアの為のQ&Aコミュニティです] https://teratail.com/help/question-tips#questionTips1 > teratailを「サポートセンター」だとは思わないでください。 > 作業依頼のような投稿をして、課題や仕事を無償でやってもらえる場ではありません。
ma2hiro

2021/12/06 08:01

radian様 仰る通りですね…… ``` gKi = Str(tmp) & "期" gKi = Replace(gKi, " ", "") Set searchRng = Range("B5:B99") ' 最初はFindで検索 Set rng = searchRng.Find(What:=gKi, LookAt:=xlPart) ``` で何故か”5期A+B”しか見つけてくれないので そこが怪しいので見てみます。
退会済みユーザー

退会済みユーザー

2021/12/06 08:07

ウォッチウィンドウを使っていますか? [VBEの使い方:ウォッチ ウィンドウ|VBA入門 - エクセルの神髄] https://excel-ubara.com/excelvba1/EXCELVBA488.html "VBA ウォッチ" とかで検索したら他にも記事が出てくるので、読んでみて下さい。 (まずこれが使えないと厳しい)
bebebe_

2021/12/06 08:10

どこで「5期A+B」しか見つけてないと判断されていますか? Debug.Print rng 等ですかね? それでうまく行っていないならシートのB1から入力していたりしませんか
ma2hiro

2021/12/06 08:24

radian 様  もちろんウォッチウィンドウは使用して追っております…… bebebe_様 分かりました!!!!!!!!!!!!!!!!! Set searchRng = Range("B5:B99") とやっていたため Set searchRng = Range("B1:B99") とすれば解決しました。 ありがとうございました。この質問そのうち閉じます。 本当にありがとうございました。
guest

回答1

0

自己解決

Set searchRng = Range("B5:B99")

Set searchRng = Range("B1:B99")
で解決しました。

radian 様
bebebe_様
ご指摘本当にありがとうございました。

そのうち本質問はあまりにも基本的なことなので削除する可能性があります。

投稿2021/12/06 08:27

ma2hiro

総合スコア159

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/12/06 08:33 編集

結局、検索方向(上⇒下 or 下⇒上)は関係無かった感じですか?
ma2hiro

2021/12/06 08:35

radian様 関係なかった感じです…… 思い込みで質問してしまい大変失礼しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問