質問: Cnt(4) + 1 End If Next m Application.ScreenUpdating=True EndSub ``` (一部省略しています) ### 試したこと ループで、AQ列に99があるか確認し、 IFステートメントで、99があればメッセージボックスを出すというコードを書いてみましたが、 上手くいきませんでした。 知識不足のため、これ以上のやり方が思い浮かびませんでした。 ご教授宜しくお願い致します。 ### 補足情報(言語/FW/ツール等のバージョンなど)
回答: 処理の最初の方で新規ブックを作成していますが、AQ列に値が99のセルが存在したらブックの作成もしたくないのですよね。 ですので、新規ブック作成よりも前の処理として99セルのチェックを行ってあげる必要があります。 チェック処理は、 1AQ列の最終データ行を取得する 2AQ列8行目から最終データ行の範囲で99セルを検索する 399のセルが見つかった場合は処理を終了する のような流れを作ればいいと思います。 1最終データ行の取得 `=Cells(Rows.Count, "AQ").End(xlUp).Row`という式で最終データ行の行番号が取得できます。 解説すると、`Rows.Count`はそのExcelのバージョンで使用可能な最大の行番号を返すので、`Cells(Rows.Count, "AQ")`はAQ列の最終行のセルという意味です。 続く`.End(xlUp)`は、そのセルから[Ctrl+↑]操作をした時のセルを指します。 AQ列最終行のセルから[Ctrl+↑]の操作をすると、AQ列を一番下から順に探していって最初にデータが入力されているセル(つまりAQ列で一番最後にデータ入力されているセル)に移動します。 最後の`.Row`でそのセルの行番号が取得されるので、`Cells(Rows.Count, "AQ").End(xlUp).Row`は`AQ列で最後にデータが入力されている行番号`となるわけです。 2対象範囲を検索 対象範囲から値が一致するセルを検索するにはFind関数を利用します。 Find関数は、検索に一致するセルが見つかるとそのセルを返してくれますが、見つからなかったときはNothingを返します。 検索結果がNothingが否かで対象セルがあったかどうかが判断できるという訳です。 サンプル AQ列に値が99のセルがあるかどうかを調べるだけの簡単なサンプルを作ってみました。 ``` Sub test() 'AQ列の最終データの行番号を取得 Dim iLastRow As Integer iLastRow = Cells(Rows.Count, "AQ").End(xlUp).Row 'AQ列8行目~最終行の範囲を検索要の範囲に設定 Dim rngSearch As Range Set rngSearch = Range(Cells(8, "AQ"), Cells(iLastRow, "AQ")) '検索範囲で値が99のセルを検索 If Not rngSearch.Find(99) Is Nothing Then 'Nothingでない場合(99のセルが見つかった) MsgBox "見つかりました" Exit Sub Else 'Nothingの場合(99のセルが見つからなかった) MsgBox "見つかりません" End If End Sub ``` このようなチェック処理を新規ブック作成前に行い、結果に応じてメッセージ出力や処理の中断をすれば目的は達せられルと思いますのでがんばってみてください。 参考になれば幸いです。