お世話になっております。
今現在”今期””をエクセル内検索して配列に格納しようとしております……
ネット上で ”vba 検索 Find複数” で検索して出てきた
【エクセルVBA】FindNextメソッドで指定範囲内の検索条件にヒットする値をすべて取得する方法
にてFindNextというものがあり使えそうだと思って実装したのですが
excel
1 23期A1 60 34期A1 70 45期A1 80 5 63期B1 55 74期B1 66 85期B1 77 9 103期A+B 555 114期A+B 666 125期A+B 777 13 143期A+B 55 154期A+B 66 165期A+B 77 17 18[利益シート]
のようなデータがあった場合
実装として
VBA
1Dim year, kikawarime As Integer, gKi As String 2 3Private Function getTounenndoGyou() As Variant 4 Dim tmp As Integer 5 Dim rng As Range, tempRng As Range, searchRng As Range 6 7 tmp = year - 2018 8 gKi = Str(tmp) & "期" 9 gKi = Replace(gKi, " ", "") 10 Dim kiGyouArray(7), i As Integer 11 12 Set searchRng = Range("B:B") 13 ' 最初はFindで検索 14 Set rng = searchRng.Find(gKi) 15 ' 検索結果を一時保存 16 Set tempRng = rng 17 18 i = 1 19 20 ' 条件にあったセルが見つからなければNothingが返るので何もしません 21 Do While Not rng Is Nothing 22 23 Debug.Print rng.Row 24 kiGyouArray(i) = rng.Row 25 i = i + 1 26 27 ' FindNextで検索を継続 28 Set rng = searchRng.FindNext() '←←←←←←←←←←←これでどう??? 29 30 ' すべて検索し終えると最初に戻るので、Addressで確認! 31 ' これを忘れると無限ループになるので注意! 32 If rng.Address = tempRng.Address Then 33 Exit Do 34 End If 35 Loop 36 37 getTounenndoGyou = kiGyouArray 38 39End Function 40 41Sub 全社支社利益の色更新_Click() 42 Dim wb As Workbook 43 Dim fname As String 44 Dim tounendoGyou() As Variant 45 fname = Range("B1").Value 46 47 Set wb = Workbooks.Open(fname) 48 With Worksheets("利益") 49 Worksheets("利益").Select ' 50 tounendoGyuu = getTounenndoGyou 51 52: 53End Sub
以上の上記URLを参考に実装しました……
ですが一回 searchRng.Findをすると上記の場合だと
rng が 5期A1 とセットされてしまい
5期のみで検索した次の文言が取得出来ません……
Set rng = searchRng.FindNext()
を
Set rng = searchRng.FindNext(gKi)
とすると実行時エラー'1004'と出て「ヘルプ」を押下すると
https://docs.microsoft.com/en-us/office/client-developer/excel/excel-home?redirectedfrom=MSDN
に飛んでしまうのでen-usをja-jpにして右上の検索窓で
FindNextと検索して探した
https://docs.microsoft.com/ja-jp/office/vba/api/excel.range.findnext
を見てWhat:="X"と指定してあったので
Set rng = searchRng.Find(What:=gKi, LookAt:=xlPart)
としても駄目でした……
どうやったら検索の文言を変更せずにFindNextが使用出来るのか
なんという語句で調べれば良いかお問い合わせしてよろしいでしょうか?
長々と大変申し訳ないのですが何か情報をお持ちな方はコメント頂けますと嬉しく思います。
追記
[利益シート]
に
3期A+B 55
4期A+B 66
5期A+B 77
3期A+B 55
4期A+B 66
5期A+B 77
と同じものがあった場合
Set rng = searchRng.FindNext(rng)
では何か先に進めない気がします……
もうちょっと調べてみます。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/06 00:28