Excelは、記述した方法で配列を直接連結することはできません(つまり、単に背中合わせに組み合わせることはできません)。しかし、ヘルパー関数を使用しないでこの問題を解決する方法は複雑です。
あなたがする必要があるのは、{10;11;12;13}
を{10;11;12;13;0;0;0}
に変換し、{20;21;22}
を{0;0;0;0;20;21;22}
に変換することです。その結果が得られたら、長さ7の2つの配列を一緒に追加して、目的の結果を得ることができます。
どのように配列の先頭または末尾にゼロを追加しますか?
答えは、巧みな方法で行列乗算(MMULT
Excel組み込み関数)を使用することです。
私はそれがあまりにもプログラミングからトピックオフが、最終的に以下の行列の乗算方程式はあなたに望ましい結果与え得ると思うので、これは結果である理由として、数学のすべてを説明しません。
[1 0 0 0] [10] [10]
[0 1 0 0] * [11] = [11]
[0 0 1 0] [12] [12]
[0 0 0 1] [13] [13]
[0 0 0 0] [ 0]
[0 0 0 0] [ 0]
[0 0 0 0] [ 0]
を
またはExcelで、あなたはあなたの結果を得るためにこれを入力することができます(私は増加し読みやすくするために改行を追加しました)
= MMULT({1,0,0,0;
0,1,0,0;
0,0,1,0;
0,0,0,1;
0,0,0,0;
0,0,0,0;
0,0,0,0},A1:A4)
あなたがセルにこの数式を強調表示し、F9キーを押すと、あなたはそれに気づく必要があります希望の結果をに与えます。 {10;11;12;13;20;21;22}
ある所望の最終結果を取得すると共に、これらの2つの値を加算
= MMULT({0,0,0;
0,0,0;
0,0,0;
0,0,0;
1,0,0;
0,1,0;
0,0,1},B1:B3)
:
同様に、以下の式を使用すると、{0;0;0;0;20;21;22}
の所望の結果を得るであろう。
NOTE
この時点で、このはご要望/ニーズに十分な情報かもしれません。しかし、大規模な配列の場合、1と0の行列を数式にハードコーディングするのは面倒です。このような場合は、これらの行列をハードコーディングするのではなく、自動的に1と0の行列を生成する方法を説明しています。
上記の1と0の大きな行列を自動的に生成するにはどうすればよいですか?
= (ROW(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(ROWS(A1:A4)+ROWS(B1:B3),1)))
=COLUMN(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(1,ROWS(A1:A4)))))+0
:「なぜ」私は議論が長すぎるとオフトピックを取得すると思いますので、ここでは上記の1と0の最初の行列を生成する式があるの多くを説明せずに再
第2の1のマトリックスと0のための式はわずかに異なっている:
= (ROW(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(ROWS(A1:A4)+ROWS(B1:B3),1)))
=(COLUMN(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(1,ROWS(B1:B3))))+ROWS(A1:A4)))+0
FINAL FORMULA
2つ(垂直)配列を連結するための最終的な式は以下である:(増加可読性のために追加いくつかの改行)
= MMULT(
(ROW(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(ROWS(A1:A4)+ROWS(B1:B3),1)))
=COLUMN(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(1,ROWS(A1:A4)))))+0,
A1:A4)
+MMULT(
(ROW(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(ROWS(A1:A4)+ROWS(B1:B3),1)))
=(COLUMN(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(1,ROWS(B1:B3))))+ROWS(A1:A4)))+0,
B1:B3)
FINAL NOTES/THOUGHTS
利点使用しますこの式は、VBAを使用せずに配列を連結できるということです。欠点は、配列を連結するこのメソッドがテキストではなく数字でしか機能しないことです。 MMULT
に数値が必要です。
を結合する配列数式であります数式: '= MMULT( (行:$ A:$ A、行:$ A $ 1:$ A $ 4)+行($ B $ 1:$ B $ 3)) = COLUMN $ 1:INDEX($ 1:$ 1、ROWS($ A $ 1:$ A $ 4)))))+ 0、($ A:$ A、ROWS($ A $ 1:$ A $ 4)+ ROWS($ B $ 1:$ B $ 3)は、 )0) =(COLUMN($ A $ 1、INDEX($ 1:$ 1、ROWS($ B $ 1:$ B $ 3))))+ ROWS($ A $ 1:$ A $ 4))+ 0、 $ B $ 1: $ B $ 3) ' –
Scottに感謝します。私はいつも '間接(住所。(...'。)を使う方法があるかどうか疑問に思っていました。しかし、普通は行/列全体をチェックしないでください。あなたのメソッドを「間接」よりも効率的に使用していますか? – ImaginaryHuman072889
見た目の範囲を設定するだけで、完全な列/行に対するINDEXに損害はありません。 '$ A $ 7'よりもメモリを使用していません –