Omには、同じワークブックに何百もの異なる名前のワークシートがあります。各ワークシートの構造は基本的に同じです。彼は、固定範囲(A146:O146)を各ワークシートから新しいワークシートに1行ずつコピーしたいと考えています。

これを行うには、いくつかの方法があります。私のお金では、単純なマクロが最善の策です。ただし、マクロベースのアプローチに入る前に、数式を使用してそれを行う方法があります。かなりユニークな方法の1つは、NameManagerで式を定義することに依存しています。次の手順に従って開始します:

。リボンの[数式]タブを表示します。

。 [定義済みの名前]グループで、[名前マネージャー]ツールをクリックします。 Excelに[名前マネージャー]ダイアログボックスが表示されます。

。 [新規]ボタンをクリックします。 Excelに[新しい名前]ダイアログボックスが表示されます。 (図1を参照)

。 [名前]フィールドに、名前ListSheetsを入力します(これはスペースを含まない単一の単語であることに注意してください)。

。 [参照先]フィールドに、次の式を入力します。

。 [OK]ボタンをクリックして、名前付き範囲の作成を終了します。新しい範囲が[名前マネージャー]ダイアログボックスに表示されます。

。 [閉じる]ボタンをクリックして、[名前マネージャー]ダイアログボックスを閉じます。

このように定義された式を使用して、これらすべての範囲を統合するワークシートに移動できます。 (このワークシートの名前が「要約」であるとしましょう。)このワークシートがワークブックの最後のワークシートであることを確認することを強くお勧めします。概要ワークシートで、次の数式を任意の行の列Aに入力します。

=INDIRECT(INDEX(ListSheets,ROWS($A$1:$A1))&"!"&CELL("address",A$146))

数式をコピーしますが、すべてのワークシートを表すには多くの行が必要です。つまり、25個のワークシート(要約ワークシートは含まない)がある場合は、数式を24行下にコピーします。オリジナルを数えると、式が合計25行に表示されるはずです。

ここでの補足:ListSheets式(名前マネージャーで定義した式)は、ワークシート名の配列を返します。 ROWS関数は、その配列のどの要素がINDEX関数を介して返されるかを決定するために使用されます。概要ワークシートがブックの最後のワークシートでない場合は、ListSheetsから簡単に返すことができ、最終的にはそこから値を取得することになります。これは間違いなくあなたがやりたくないことです。そのため、Summaryがワークブックの最後のワークシートであることを確認することをお勧めしました。

次に、数式を列Aから右にコピーして、列O全体に表示されるようにします。その結果、数式を含むセルにA146:O146の値が表示されます。

先ほど、マクロベースのアプローチが最善の策だと思います。

これが当てはまる理由を示す短い小さなマクロです。

Sub CopyRange()

Dim w As Worksheet     Dim sRange As String     Dim lRow As Long

sNewName = "Summary" 'Name for summary worksheet     sRange = "A146:O146" 'Range to copy from each worksheet

Worksheets(1).Select     Worksheets.Add     ActiveSheet.Name = sNewName

lRow = 2     For Each w In Worksheets         If w.Name <> sNewName Then             'Comment out the following line if you don't want to             'include worksheet names in the summary sheet             Cells(lRow, 1) = w.Name             'If you commented out the previous line, make a change             'in the following line: change (lRow, 2) to (lRow, 1)

w.Range(sRange).Copy Cells(lRow, 2)

lRow = lRow + 1         End If     Next w End Sub

マクロの先頭に設定される2つの変数(sNewNameとsRange)があることに注意してください。これらは、マクロによって作成された新しい要約ワークシートに使用する名前と、各ワークシートからコピーするセルの範囲を表します。

次に、マクロはブックの最初のワークシートをアクティブにし、要約に使用する新しいワークシートを追加します。このワークシートには、sNewName変数で指定した名前が割り当てられます。次に、マクロはループをステップ実行して、他の各ワークシートをチェックします。ワークシートが要約のものでない限り、ワークシートの名前は要約シートの列Aに配置され、sRange変数(A146:O146)で指定された範囲が列Bから始まる要約ワークシートにコピーされます。 。

マクロアプローチは高速で簡単です。さらに、サマリーシートをやり直す必要がある場合は、古いシートを削除してマクロを再実行するだけです。

注:

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

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

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