ミッチェルのワークシートには、彼の会社のhttp://www.formville.com/C17_free-purchase-orders.html [注文書]の1年間のすべてを表す多くのデータがあります。データは、ベンダー名を含む列Cでソートされます。 Mitchellは、ベンダーごとに、それらの行のすべてのデータを含む個別のページを印刷したいと考えています。彼は、ベンダー固有のシートの印刷を自動化する方法があるかどうか疑問に思います。

Excelの多くのものと同様に、この問題に対して実行できるアプローチは複数あります。このヒントでは、4つのアプローチを見ていきます。 4つのアプローチはすべて、データがベンダー名の列(列C)に従ってソートされ、データの各列(名前、日付、PO番号、ベンダーなど)に列見出しがあることを前提としています。

小計の使用

小計を使用してベンダー固有のシートを印刷するには、データ内のセルを選択することから始めます。 (列Cのセルが最適です。)データが連続していない場合は、すべてを手動で選択する必要がある場合があります。ただし、隣接している場合は、単一のセルを選択するだけで十分です。次に、次の手順に従います。

。リボンの[データ]タブを表示します。

。 [アウトライン]グループで、[小計]ツールをクリックします。 Excelに[小計]ダイアログボックスが表示されます。 (図1を参照)

。 At Each ChangeInドロップダウンリストがVendorに設定されていることを確認します。 (列Cの名前を使用します。)これは、Excelが小計を挿入する場所を示します。

。 [関数の使用]ドロップダウンリストを[カウント]に設定する必要があります。

。 [小計の追加先]ボックスのリストを使用して、[ベンダー(列C)]列を選択します。ここにカウントが追加されます。

。 [現在の小計を置き換える]チェックボックスがオンになっていることを確認します。

。 [グループ間の改ページ]チェックボックスがオンになっていることを確認します。

。 [データの下に要約]チェックボックスがオンになっていることを確認します。

。 [OK]をクリックします。

Excelは小計をワークシートに配置しますが、新しいベンダーごとに改ページを配置する必要もあります。 (これは上記の手順7によるものです。)改ページはすぐにはわからない場合がありますが、ワークシートを印刷すると改ページが機能します。

印刷すると、最終的には各ベンダーの印刷ページになります。各ページの最後の行のすぐ下にある小計は、その特定のベンダーに対して印刷された注文書の数を示します。

フィルタリングされたデータの使用

データのフィルタリングは非常に簡単です。これらのタイプのレポートを頻繁に印刷する必要がない場合は、これが適切なアプローチです。繰り返しますが、データが連続していない場合を除いて、データ内のセルを選択することから始めます。

(その場合、すべてのデータを手動で選択する必要があります。)次に、次の手順に従います。

。リボンの[データ]タブを表示します。

。 [並べ替えとフィルター]グループ内の[フィルター]ツールをクリックします。 Excelは、行1の各列ラベルの横に[オートフィルター]ドロップダウンインジケーターを表示する必要があります。

。仕入先列(列C)のドロップダウンインジケータを使用して、印刷する仕入先の名前を選択します。リストは自動的にフィルタリングされ、そのベンダーからの注文書のみが表示されます。

。通常どおりにページを印刷します。印刷されたレポートには、手順3で指定したベンダーの注文書のみが表示されます。

他のベンダーのレポートを印刷する場合は、フィルターを変更して(ステップ3)、再印刷する(ステップ4)だけです。完了したら、リボンの[データ]タブにある[フィルター]ツールをもう一度クリックして、フィルターを削除できます。

ピボットテーブルの使用

必要なレポートを作成するもう1つの高速な方法は、Excelのピボットテーブル機能を使用することです。 _ExcelTips_の他の問題で取り上げられているため、ここではピボットテーブルの作成方法については説明しません。ピボットテーブルはほぼ任意の方法で設定できますが、[ベンダー]フィールドが[ピボットテーブルフィールド]ペインの[フィルター]グループにあることを確認する必要があります。 (図2を参照)

image

図2.ピボットテーブルの設定。

次に、Excelのバージョンに応じて、リボンの[オプション]タブまたは[分析]タブを表示します。 (これらのタブは、ピボットテーブル内のセルを選択した場合にのみ表示されます。)リボンの左側にある[ピボットテーブル]グループで、[オプション]ドロップダウンリストをクリックし、[レポートフィルターページの表示]を選択します。 (このオプションは、前述のように、[ベンダー]フィールドが[フィルター]グループにあることを確認した場合にのみ使用できます。)Excelは、[レポートフィルターページの表示]ダイアログボックスを表示します。 (図3を参照)

image

図3. [レポートフィルターページの表示]ダイアログボックス。

[フィルター]グループに[ベンダー]フィールド以外を追加した場合を除き、ダイアログボックスには1つのフィールドのみが表示されます。リストされているフィールドが複数ある場合は、必ずベンダーフィールドをクリックしてください。 [OK]をクリックすると、Excelはデータテーブル内のベンダーごとに個別のピボットテーブルワークシートを作成します。ピボットテーブルに含めることを選択した情報に応じて、これらはベンダーに優れたレポートを作成できます。その後、ワークシートを印刷して、必要なレポートを取得できます。

マクロの使用

必要なデータを提供するためにマクロを設定する方法はたくさんあります。個人的には、データを調べてベンダーごとに新しいワークシートを作成するマクロが好きです。これが次のマクロの機能です。データからベンダーのリストをコンパイルし、ベンダーごとに名前が付けられたワークシートを作成します。次に、元のワークシートから新しく作成されたワークシートに情報をコピーします。

Sub CreateVendorSheets()

' To use this macro, select the first cell in     ' the column that contains the vendor names.



Dim sTemp As String     Dim sVendors(99) As String     Dim iVendorCounts(99) As Integer     Dim iVendors As Integer     Dim rVendorRange As Range     Dim c As Range     Dim J As Integer     Dim bFound As Boolean

' Find last row in the worksheet     Set rVendorRange = ActiveSheet.Range(Selection, _       ActiveSheet.Cells(Selection.SpecialCells(xlCellTypeLastCell).Row, _       Selection.Column))



' Collecting all the vendor names in use     iVendors = 0

For Each c In rVendorRange         bFound = False         sTemp = Trim(c)

If sTemp > "" Then             For J = 1 To iVendors                 If sTemp = sVendors(J) Then bFound = True             Next J             If Not bFound Then                 iVendors = iVendors + 1                 sVendors(iVendors) = sTemp                 iVendorCounts(iVendors) = 0             End If         End If     Next c

' Create worksheets     For J = 1 To iVendors         Worksheets.Add After:=Worksheets(Worksheets.Count)

ActiveSheet.Name = sVendors(J)

Next J

' Start copying information     Application.ScreenUpdating = False     For Each c In rVendorRange         sTemp = Trim(c)

If sTemp > "" Then             For J = 1 To iVendors                 If sTemp = sVendors(J) Then                     iVendorCounts(J) = iVendorCounts(J) + 1                     c.EntireRow.Copy Sheets(sVendors(J)). _                       Cells(iVendorCounts(J), 1)

End If             Next J         End If     Next c     Application.ScreenUpdating = True End Sub

マクロの冒頭で述べたように、マクロを実行する前に、ベンダー列のデータの最初のセルを選択する必要があります。完了すると、ベンダーごとに1つのワークシートが作成され、必要に応じてフォーマットして印刷できます。 (作成された各ワークシートに列見出し情報やその他の情報を配置するコードを追加することで、マクロをさらに便利にすることができます。)完了したら、次にマクロを実行するときに、それらのベンダーのワークシートを削除する必要があります。問題が発生することはありません。

注:

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

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

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

このヒント(13633)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。