- ベストアンサー
Excel VBAでの特定シートの発注日の検索に関する質問
- Excel VBAを使用して特定のシート内で発注日を検索する方法について質問があります。
- 特定のシートで発注日をリスト表示するマクロを組むことがうまくいかないため、解決策を求めています。
- すでに似たようなマクロ関連の質問を投稿していますが、初歩的な質問が多く申し訳ありません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> Set FoundCell = Cells.FindNext(FoundCell) Set FoundCell = mRange.FindNext(FoundCell) ではないでしょうか。 Cellsはすべてのセルになります。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
何を質問しているのかな? 文章で、聞きたいことを、箇条書きしたら。 希望は掲示したコードの添削ですか? 質問文章は長いが、主題がぼやけている。 ーー 小生の経験から、Find関連は、学習の苦労が多いテーマだが、そのボヤキと主題が混じって、聞きたいことが、わかりにくい。 Find、FindNextはRangeセル範囲に関しての検索なので、>「=備考欄の文字該当分も含まれる」というのはどうかな。 ーー 小生が、むつかしい(簡単な方法がない)と思うのは、年度ごとに(データ)シート(ブック?)を分けている点です。しかし分けるのも自然だとおもうが。 ーー それも繰り返し処理でも良いとして、やるなら、(For Each ・・Next)泥臭いが簡単です。 ただ処理時間がかかるような気がします。泥臭いので個人の好みではない点だけです。 Findメソッド以外に良い方法がない。 1つのシートを検索する(条件該当分はすべて拾う)のコード例は、「VBA Find」でWEB照会すれば、たくさん記事がある。 ややこしいとは思うが、まあ慣れでしょう。 アクセスにエクセルにある過去データをエクスポートしておいて、Select文でやれば速いかな。 ーー 参考・確認 WEB記事のコードを使って 下記で、範囲外セル(Range("A1:C8")外)に、「土屋」を入れて検索すると、出てこなかったが。 Sub macro3() Dim myRange As Range Dim myObj As Range Dim keyWord As String Set myRange = Range("A1:C8") keyWord = "土屋" Set myObj = myRange.Find(keyWord, LookAt:=xlPart) If myObj Is Nothing Then MsgBox "'" & keyWord & "'はありませんでした" Exit Sub End If Dim msg As String Dim myCell As Range Set myCell = myObj Do msg = msg & "'" & keyWord & "'は" & myCell.Row & "行目" & myCell.Column & " にあります" & vbCrLf Set myCell = myRange.FindNext(myCell) Loop While myCell.Row <> myObj.Row MsgBox msg End Sub ーー Set myRange = Range("B:B")とするとA列の土屋は拾わなかった。
お礼
imogasiさん、回答ありがとうございます。 まずは自分の文章が要点を得ておらず申し訳ありません。 コードの添削をいただいたうえで、より良いやり方があればお教えいただきたいという趣旨でした。 時間と手間がかかってもよければ大抵のことはifとfor文で解決できるんですよね。 でも、vbaをきちんと勉強するつもりならそれ以外のことも学んでいかなければ……と思い、今回findを使って過去の注文履歴を表示させる練習をしたのですが、基礎がわかっていないことを痛感させられました。 今回は先に回答をくださった方がいたのでそちらの方をベストアンサーに選ばせていただきましたが、丁寧にご指摘いただきありがとうございました!
- kkkkkm
- ベストアンサー率66% (1721/2591)
> ワークシートのインデックス番号を変数iとして、for文で繰り返し計算させれば実行できるのでしょうか? いけると思います。 ループごとの最後に For i = 1 To Sheets.Count 処理 Set mRange = Nothing Next みたいにオブジェクトの開放を入れておいた方が無難だと思います。
お礼
kkkkkmさん、重ね重ねありがとうございます! 最初にご指摘いただいた点を修正し、for文を入れたらうまくいきました!
補足
>kkkkkmさん ご指摘の部分を修正したらすぐに解決しました…きちんと理解していないので基礎的なところを見落としてしまうのですね…ありがとうございました! ちなみにもしお分かりでしたらお教えいただきたいのですが、これと同じ検索を複数シートで同時に行う場合は、ワークシートのインデックス番号を変数iとして、for文で繰り返し計算させれば実行できるのでしょうか?