Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7112 / 13644 ツリー ←次へ | 前へ→

【41052】セルの値が空白のときは印刷しない よん 06/7/28(金) 13:18 質問[未読]
【41057】Re:セルの値が空白のときは印刷しない ハト 06/7/28(金) 13:46 回答[未読]
【41071】Re:セルの値が空白のときは印刷しない よん 06/7/28(金) 15:24 お礼[未読]
【41087】Re:セルの値が空白のときは印刷しない ハト 06/7/28(金) 19:02 発言[未読]
【41126】Re:セルの値が空白のときは印刷しない よん 06/7/31(月) 14:16 お礼[未読]
【41065】Re:セルの値が空白のときは印刷しない Kein 06/7/28(金) 14:26 回答[未読]
【41073】Re:セルの値が空白のときは印刷しない よん 06/7/28(金) 16:14 お礼[未読]
【41080】Re:セルの値が空白のときは印刷しない Kein 06/7/28(金) 17:24 発言[未読]
【41083】Re:セルの値が空白のときは印刷しない よん 06/7/28(金) 17:56 お礼[未読]

【41052】セルの値が空白のときは印刷しない
質問  よん  - 06/7/28(金) 13:18 -

引用なし
パスワード
   はじめまして。

初心者です。教えてください。
お願いします。

現在、繰り返し印刷するマクロが設定してあります。(以下)

Sub 発行()
Worksheets("B").Activate
For 伝票 = 1 To Application.Count(Worksheets("A").Range("A1:A10"))
Range("B2") = 伝票
印刷
Next 伝票
End Sub

Sub 印刷()
  Range("A1:G3").Select
  ActiveSheet.PageSetup.PrintArea = Selection.Address
  ActiveWindow.SelectedSheets.PrintOut Copies:=1
End Sub

シートAのデータに空白がある場合、
入力されているデータだけを繰り返し印刷したいのですが、
空白分も印刷されてしまいます。
いろいろ調べて、挑戦してみましたができませんでした。。(以下)
どなたか教えてください。
お願いいたします。

Sub 発行()
Worksheets("B").Activate
For 伝票 = 1 To 10
Worksheets("B").Cells(伝票, 1) = Range("B2")
If Not IsNull(Range("B2")) Then
印刷
End If
Next 伝票
End Sub

【41057】Re:セルの値が空白のときは印刷しない
回答  ハト  - 06/7/28(金) 13:46 -

引用なし
パスワード
   おはようございます

▼よん さん:

>シートAのデータに空白がある場合、
>入力されているデータだけを繰り返し印刷したいのですが、

とありますが
空白のチェックが

>Worksheets("B").Activate
> If Not IsNull(Range("B2")) Then

となってますので

シートBのRange("B2")をチェックしています

シートAの値を空白かチェックしたいのであれば

Worksheets("A").Range("B2")

のようにどこのシートなのかを明確にする書き方にした方がよろしいかと思います

それと大きく勘違いなされているのは

『セルが空白』のチェックは

 If Range("B2") <> "" Then
   '空白ではない

です

【41065】Re:セルの値が空白のときは印刷しない
回答  Kein  - 06/7/28(金) 14:26 -

引用なし
パスワード
   "空白を除くセル数"の数え方は、いろいろありますが、例えば

Sub MyPrint()
  Dim Cnt As Integer

  Cnt = 10 - WorksheetFunction _
  .CountBlank(Worksheets("A").Range("A1:A10"))
  If Cnt = 0 Then Exit Sub
  Worksheets("B").Range("A1:G3").PrintOut Copies:=Cnt
End Sub

とか Cnt に代入する部分のワークシート関数を

 Cnt = WorksheetFunction _
 .CountA(Worksheets("A").Range("A1:A10"))

とするとか、SpecialCellsメソッドを使って

Sub MyPrint2()
  Dim Cnt As Integer

  On Error Resume Next
  Cnt = Worksheets("A").Range("A1:A10") _
  .SpecialCells(2).Count
  On Error GoTo 0
  If Err.Number <> 0 Then Exit Sub
  Worksheets("B").Range("A1:G3").PrintOut Copies:=Cnt
End Sub

などとすることも出来ます。

【41071】Re:セルの値が空白のときは印刷しない
お礼  よん  - 06/7/28(金) 15:24 -

引用なし
パスワード
   ▼ハト さん:

ありがとうございます。

最初に、質問の投稿に記入ミスがありましたので、変更しておきます。
Worksheets("B").Cells(伝票, 1) = Range("B2")
 ↓
Worksheets("A").Cells(伝票, 1) = Range("B2")

>シートAの値を空白かチェックしたいのであれば
>
>Worksheets("A").Range("B2")
>
>のようにどこのシートなのかを明確にする書き方にした方がよろしいかと思います

>それと大きく勘違いなされているのは
>
>『セルが空白』のチェックは
>
> If Range("B2") <> "" Then
>   '空白ではない
>
>です

本当に初心者で、
あまり理解できていなくてすみません。。
教えていただいたのを
下記のようにしてみたところ、
Worksheets("伝票7").Range ("B2") 
のところで、
「オブジェクトはこのプロパティまたはメソッドをサポートしていません」
となりました。
どう変更すればよろしいでしょうか?

Sub 発行()
Worksheets("A").range("B2")
For 伝票 = 1 To 10
Worksheets("A").Cells(伝票, 1) = Range("B2")
If Range("B2") <> "" Then
印刷
End If
Next 伝票
End Sub

【41073】Re:セルの値が空白のときは印刷しない
お礼  よん  - 06/7/28(金) 16:14 -

引用なし
パスワード
   ▼Kein さん:

ありがとうございます。
いろいろやり方があるんですね。

>  Cnt = 10 - WorksheetFunction _
>  .CountBlank(Worksheets("A").Range("A1:A10"))

cnt = 10 の「10」は、A10の10ですか?

【41080】Re:セルの値が空白のときは印刷しない
発言  Kein  - 06/7/28(金) 17:24 -

引用なし
パスワード
   >cnt = 10 の「10」は、A10の10ですか?
A1:A10 の範囲には10個のセルがあるので、10から空白セル数を引く
という考え方です。

【41083】Re:セルの値が空白のときは印刷しない
お礼  よん  - 06/7/28(金) 17:56 -

引用なし
パスワード
   ▼Kein さん:

>A1:A10 の範囲には10個のセルがあるので、10から空白セル数を引く
>という考え方です。

ありがとうございます。
教えていただいたいろいろな方法でやってみたいと思います。

【41087】Re:セルの値が空白のときは印刷しない
発言  ハト  - 06/7/28(金) 19:02 -

引用なし
パスワード
   回答が遅くなりまして、申し訳ありません
▼よん さん:

>Worksheets("A").Cells(伝票, 1) = Range("B2")
>If Range("B2") <> "" Then

ここですが、
『シートBのB2にシートAの値を入れて、空白チェックを行っている』
ということでいいですか?

もしそうならば、

Range("B2") = Worksheets("A").Cells(伝票, 1)

となります


>Worksheets("伝票7").Range ("B2") 
>のところで、
>「オブジェクトはこのプロパティまたはメソッドをサポートしていません」
>となりました。
>どう変更すればよろしいでしょうか?

これだけでは、指定したセルをどうしたいのか書かれてません

Worksheets("伝票7").Range ("B2") 

また、Range と ( の間にスペースがあるように見えますね
とすると
Worksheets("伝票7")
が Worksheet オブジェクトではないと認識されている為だと思われます

とりあえず、↓のコードを実行してみてください

Sub 発行()

  Worksheets("B").Activate
  For 伝票 = 1 To 10
    Worksheets("B").Range("B2") = Worksheets("A").Cells(伝票, 1)
    If Worksheets("B").Range("B2") <> "" Then
      印刷
    End If
  Next 伝票
  
End Sub

【41126】Re:セルの値が空白のときは印刷しない
お礼  よん  - 06/7/31(月) 14:16 -

引用なし
パスワード
   ▼ハト さん:

お返事が遅くなり、申し訳ございません。

>>Worksheets("A").Cells(伝票, 1) = Range("B2")
>>If Range("B2") <> "" Then
>
>ここですが、
>『シートBのB2にシートAの値を入れて、空白チェックを行っている』
>ということでいいですか?

はい、その通りです。
最後に教えていただいたコードを実行してみたら、できました!
スペースが入ってしまうと認識されなくなるんですね。
勉強になりました。
本当にありがとうございました。

7112 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free