Excel 2010 で別のシートに列をミラーリングする

Excel 2010 で別のシートに列をミラーリングする

同じ Excel ブック内の 1 つの Excel シートから別のシートに列をミラーリングしようとしています。目標は、最初のシートが編集されると 2 番目のシートが更新されるようにすることです。基本的に、最初のシートで行を追加または削除すると、2 番目のシートでも自動的に同じ処理が行われます。

私の列には従業員名があり、オフィスに出入りする人が増えると、それに応じて従業員を追加または削除します。シートはさまざまなデータを追跡しますが、従業員はすべて同じです。最初のシートがプライマリ シートで、残りのシートはそれに応じてデータを取得します。ミラーリング式は機能しますか? また、列全体に適用するにはどうすればよいですか?

答え1

ここで、VBA を使わないアイデアを紹介します:「オフセット」。

元のデータが「Sheet1」にあり、「Sheet2」のすべてのセルをミラーリングするとします。Sheet2 のどのセルでも、次のコードを使用できます。

=OFFSET(Sheet1!$A$1,Row(A1)-1,COLUMN(A1)-1,1,1)
  • Sheet1!$A$1: はメインの参照セルです。これは移動または削除できない唯一のセルです。これを防ぐには、列 1 を空白のままにして非表示にすることができます。
  • Row(A1)-1: 「Row(A1)」は、Sheet2 のどの行にいるかを判断します。「-1」はオフセットを中和します (次の行ではなく、現在いる行と同じ行を読み取ります)。
  • COLUMN(A1)-1: 上記と同じですが、列を把握するためのものです。
  • ,1,1): 範囲のサイズをセルに設定します (1 x 1)

メインの参照セル (この例では A1) を削除しない限り、Sheet1 で何を実行しても機能するはずです。

この方法では、いくつかの問題が発生する可能性があります。

  1. データ間に空白がある場合 (Sheet1)、多数のゼロが表示されないようにするために、何らかの書式設定や追加の数式が必要になることがあります。
  2. 何らかの数式を「counta」または「average」として使用しようとすると、これらのゼロによって結果が変わる可能性があります (ゼロを非表示にすることはできますが、数式には影響します)。

答え2

これは単純な数式では実行できません。Sheet1 で行を追加または削除する場合、Sheet2 で行を追加または削除するには数式だけでは不十分です。そのためには別のアプローチが必要です。

1 つのオプションは、新しい行の削除と追加を管理する VBA を作成することです。

別の方法としては、行を削除するのではなく非表示にする方法があります。従業員がアクティブまたは非アクティブとしてマークされている列を追加します。次に、テーブルをフィルターして非アクティブな従業員を非表示にします。

数式を使用して、Sheet1からSheet2に名前を引き出し、各行のアクティブ/非アクティブ値も引き出す​​ことができます。たとえば、名前がSheet1の列Aにある場合は、Sheet2でこれを使用します。

=index(Sheet1!$A:$A,行())

ステータス (アクティブ/非アクティブ) が列 B にある場合は、=index(Sheet1!$A:$A,row())別の列で使用し、その列でフィルター処理します。

ただし、大きな危険が 1 つあります。Sheet1 で従業員の順序が変更されると、Sheet2 のデータがすべて間違ってしまいます。従業員の順序は Sheet1 の順序と一致しますが、残りのデータは新しい並べ替え順序では移動されません。

VBA を使用したアプローチの方が堅牢です。

関連情報