プロが教えるわが家の防犯対策術!

Excelで管理台帳を作っています

コマンドボタンをクリックすると、元データ「受給者情報」シートから今月利用終了となる人のリストを「利用終了者」シートに抽出できるようにしています
正しい作り方ではないのかもしれませんが、これでちゃんと抽出できているから抽出自体はこれでも問題ないと思います(^_^;)

それはいいのですが、対象となる人がいない場合、抽出先の「利用終了者」シートにはタイトル行しか出ません。

それでも構わないのですが、できたら抽出データがない場合(A2セルより下のデータがない場合)は、「今月で終了の利用者はいません」とメッセージを出し、「top_page」シートに移動させたいのです

そのやり方がうまくいきません

現時点はこのように入れています


Private Sub CommandButton2_Click()
Worksheets("利用終了者").Select
Worksheets("利用終了者").Range("A:M").Clear
With Worksheets("受給者情報")
.Range("A:M").Copy Worksheets("利用終了者").Range("A1")
.Range("A:Q").AdvancedFilter _
Action:=xlFilterCopy, _
criteriarange:=.Range("U1:V3"), _ 
CopyToRange:=Worksheets("利用終了者").Range("A:M"), _
unique:=False
End With
MsgBox "今月末で終了の利用者です!", vbOKOnly + vbInformation, "確認"
If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbNo Then
Exit Sub
End If
Worksheets("利用終了者").PrintOut
Sheets("top_page").Select
Range("a1").Select
End Sub




If elseを使うんだろうな、というのは何となくわかるのですが、どこにどう入れたらちゃんと反応するのかわかりません。

一度、

 (前略)
If Application.CountA(Range("A2")) = 0 Then
MsgBox "今月末で終了の利用者はいません", vbOKOnly + vbInformation, "確認"
Else
MsgBox "今月末で終了の利用者です!", vbOKOnly + vbInformation, "確認"
If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbNo Then
Exit Sub
End If
Worksheets("利用終了者").PrintOut
End If
Sheets("top_page").Select
Range("a1").Select
End Sub

と入れてみたのですが、これだと2行目以降もデータがあっても、「今月末で終了の利用者はいません」となってしまいます

2行目以降にデータがある場合は「今月末で終了の利用者です!」とメッセージボックスを出し、2行目以降にデータがない場合は「今月末で利用終了の利用者はいません」とメッセージボックスを出したいです

そのやり方を教えてください。お願いします
ちなみにバージョンはExcel2010です

A 回答 (3件)

End With 以降は、こうなるのでしょうか。


それと、Range("a1").Select は、エラーが出ないとヘンですよね。

'//...

 End With
 If Application.CountA(Worksheets("利用終了者").Range("A:A")) > 1 Then
  MsgBox "今月末で終了の利用者です!", vbOKOnly + vbInformation, "確認"
  If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbYes Then
   Worksheets("利用終了者").PrintOut
  End If
 Else
  MsgBox "今月で終了の利用者はいません", 64
 End If
 Application.Goto Sheets("top_page").Range("A1")
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。この通りやってみたらうまくいきました。
わかりづらい質問に回答してくださってどうもありがとうございました。

お礼日時:2011/02/03 10:24

質問が全体に長すぎるしコードをここまで読ませる必要あるのかな。


ーー
例データ
氏名年令住所
山田34東京
岩田43東京
内田21神奈川
大友56靜岡
山田21東京
大友25東京
山田36千葉
ーー
F1:F2 条件
氏名
木村
該当無しの氏名を指定
ーー
こういう方法もある。
コード
Sub test01()
With Worksheets("Sheet1")
.Range("A:C").AdvancedFilter _
Action:=xlFilterCopy, _
criteriarange:=.Range("F1:F2"), _
CopyToRange:=Worksheets("Sheet1").Range("K:M"), _
unique:=False
d = .Range("k65536").End(xlUp).Row
If d = 1 Then
.Range("k2") = "今月で終了の利用者はいません"
End If
End With
End Sub
ーー
IF EndIf  の間が望むものの1方法ではないか。
ーー
回答者がテストしやすいように上記のように、変形して質問してほしい。
・データ例を挙げる。
・データ範囲はA-C列ぐらいにする。データ行数は5-10行。
・Sheet1でも直ぐテストデータが作れるようにする
・直接疑問点に関係のないコード部分は省く。
    • good
    • 0
この回答へのお礼

わかりづらい質問に回答してくださってありがとうございました

お礼日時:2011/02/03 10:23

「やりたいこと」の方がよくわかりません。


文章でつらつら書くよりも、入力になる表とそこからどういう結果が欲しいのかを端的に図示した方がいいですよ。

まぁ複数行を一行ずつ判定するならフラグを使うのが一般的かと思いますが……
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2011/02/03 10:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!