アプリ版:「スタンプのみでお礼する」機能のリリースについて

ExcelでIF関数で他のシートのあるセルが未入力ならnullを返すようになっているのですが、
マクロでそのセルがnullであれば、その行を非表示にし、印刷し終わったら再度表示したいのですが、
どのようにすれば可能でしょうか?以下ではセルに式が入っているため、""(null)状態では空白と
判断されず、行が非表示になりません。どなたかご教示お願い致します。
Range("E15:E50").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Hidden = True
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
Range("E15:E50").Select
Selection.EntireRow.Hidden = False

A 回答 (3件)

記録マクロを使っているようですので#1の処理を少しだけ説明します


コードの内容から想像せず 少し判り難い回答をしたかもしれません

Null と言う事でしたが
If IsNull(r) Or Not r <> "" Then は
If r = "" Then で良いかな・・・と思います

下記は所謂VBAです 変数 繰り返し処理を使っています
Dim r As Range
Dim hdnRow As Range
変数宣言  変数(入れ物)を使っています
For Each r In Range("E15:E50")
範囲内を順繰り処理をします 処理する r は入れ物で範囲内の当該セル
If r = "" Then セルが "" なら (空白を含む)
If hdnRow Is Nothing Then
変数hdnRowが空ならば
Set hdnRow = r
hdnRowに1セルを入れる
Else 変数hdnRowが空でなければ (not変数hdnRowが空ならば)
Set hdnRow = Union(hdnRow, r)
hdnRowに追加で入れる
End If 変数hdnRowが空ならば 終わり
End If セルが "" なら 終わり
Next 次のセルへ (範囲が終わるまで繰り返し)

If Not hdnRow Is Nothing Then hdnRowが空でなければ
hdnRow.EntireRow.Hidden = True
hdnRow(セル群)を含む行を非表示にする
'PrintOutメイン処理
hdnRow.EntireRow.Hidden = False
戻す
End If hdnRowが空でなければの処理終了

行や列、セルを操作する場合、出来るだけ纏めて行うのが理想です
また、元に戻す必要がある事からUnionメソッドを使いました
少し判り難くなってしまったかと思います

メイン処理は印刷なので
記録マクロではフィルタを使えば記録できるような気がします
Range("E15:H50").Select
Selection.AutoFilter
ActiveSheet.Range("$E$15:$E$50").AutoFilter Field:=1, Criteria1:="<>"
’メイン
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False

    • good
    • 0
この回答へのお礼

今まで結果だけ得られればいいと言うスタンスで記録マクロしか使っていませんでしたが、ご丁寧な分かり易い説明ありがとうございました。

お礼日時:2023/03/14 05:36

こんにちは



直接関係ありませんけれど、nullと空文字は異なるものです。
(同一の意味の言語もあるでしょうけれど)
 TstVar = ""
 MsgBox IsNull(TestVar) ' False


SpecialCells(xlCellTypeBlanks)は何の入力もされていない空白セルを意味しますので、関数式のあるセルは対象になりません。
値が空文字ということを判定したければ、値をチェックすれば良いでしょう。
簡単にやるなら
 For Each c In Range("E15:E50")
  If c.Value = "" Then c.EntireRow.Hidden = True
 Next c

フィルターを利用するとか、まとめて非表示にするとかいろいろありそうですけれど・・・
    • good
    • 0
この回答へのお礼

ありがとうございました。なんとかなりそうです。

お礼日時:2023/03/14 05:34

こんにちは


Null と言うより長さ0の文字と言う事でしょうか・・
1ずつループで見つける一例です
Dim r As Range
Dim hdnRow As Range
For Each r In Range("E15:E50")
If IsNull(r) Or Not r <> "" Then
If hdnRow Is Nothing Then
Set hdnRow = r
Else
Set hdnRow = Union(hdnRow, r)
End If
End If
Next
If Not hdnRow Is Nothing Then
hdnRow.EntireRow.Hidden = True
'PrintOut
hdnRow.EntireRow.Hidden = False
End If
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています