Michaelには、多数のワークシートを印刷するマクロがあります。印刷するワークシートの1つまたは2つにデータが含まれていない場合があります。彼は、ワークシートにデータが含まれているかどうかをテストし、それらのワークシートのみを印刷する手法を探しています。

空のワークシートをテストするには、いくつかの方法があります。

もちろん、少なくともある程度は、「空」が実際に何を意味するかによって異なります。たとえば、ワークシートにまったく何も含まれていない場合、つまりワークシートのどのセルにも何も含まれていない場合、空であると見なすことができます。

ただし、追加した列見出しがいくつか含まれているワークシートがあり、それらの見出し以外は何もない場合があります。 Excelはワークシートを空ではないと見なしますが、印刷目的では空であると見なす場合があります。

おそらく、ワークシートが空かどうかを確認する最も簡単な方法は、UsedRangeオブジェクトを使用して、ワークシートの内容を判別することです。

With ActiveSheet.UsedRange     IsSheetEmpty = .Rows.Count = 1 And _       .Columns.Count = 1 And _       .Cells(1,1) = ""

End With

UsedRangeオブジェクトは、ワークシート内の使用済みセルの範囲で構成されていることに注意してください。したがって、この範囲の行数が1で、この範囲の列数が1で、UsedRangeオブジェクトの最初のセルに何もない場合、ワークシートはおそらく空です。

データの特性によっては、コードをさらに短縮できる場合があります。

With ActiveSheet.UsedRange     IsSheetEmpty = .Count = 1 And .Cells(1,1) = ""

End With

このバージョンでは、UsedRangeオブジェクトのセル数が1であるかどうか、およびその特定のセルが空であるかどうかを確認するだけです。

ワークシートにヘッダー行(または2つ)がある場合は、この手法を調整して、それらのヘッダーにある行と列を変更できます。たとえば、A1:F4の範囲のヘッダーがある場合は、次のように手法を調整できます。

IsSheetEmpty = ActiveSheet.UsedRange.Rows.Count=4 _   AND ActiveSheet.UsedRange.Columns.Count=6

この場合、A1(および他のいくつかのセル)に情報(ヘッダー)が含まれていることがわかっているため、A1の内容を確認する必要はありません。ワークシートに追加情報があるかどうかを判断するには、これらのヘッダーのすべてを無視するだけです。

ワークシートが完全に空の場合(追加したヘッダー情報がない場合)、CountAワークシート関数を使用してワークシートのセルを分析できます。関数の結果がゼロより大きい場合、ワークシートは空ではありません。たとえば、分析するワークシートがオブジェクトshtによって指定されているとします。この手法は次のように使用できます:

IsSheetEmpty = Application.WorksheetFunction.CountA(sht.Cells) = 0

もちろん、ワークシートに情報以外の項目をセルに含めることは可能です。ワークシートにこれらのタイプのオブジェクト(オートシェイプ、グラフィック、埋め込みグラフなど)があると思われる場合は、「空」のテストをより完全にする必要があります。これらの各アイテムは、VBAでアクセス可能なコレクション内に含まれており、各コレクションのCountプロパティをチェックして、ゼロかどうかを確認できます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(9637)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。