2016-06-22 4 views
1

中1へ5つの列を組み合わせる:私はこの数式を持っていると私は適応しようとしているこの私はこのような単一のものに5列をマージしたいエクセル

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 

1 4 7 10 13 
2 5 8 11 14 
3 6 9 12 15 

それは、それが失敗した:(

= IF(ROW()を< = COUNTA(A:A)、INDEX(A:A、ROW())、IF(ROW()< = COUNTA(A: B)、INDEX(B:B、ROW() - COUNTA(A:A

この文では3つのIFを使用していますが、IF(ROW():COUNTA(A:C)それは3列結合する必要があるため、機能は、:カラムAについて

  1. を、機能は と空でない列のセルの合計数を、セルの行数を比較します。 結果が真の場合、関数は行の()にある 列Aからセルの値を返します。結果がfalseの場合、関数 は次のIF文に移動します。
  2. 列Bの場合、この関数はセルの行番号を空でないA:B範囲内のセルの合計数を と比較します。結果が であれば、ファンクションは列Bで でない最初のセルの値を返します.Falseの場合、関数は次のIF ステートメントに移ります。
  3. 列Cの場合、この関数はセルの行番号と、空でないA:C範囲のセルの合計数を と比較します。結果が の場合、この関数は空白のセルを返し、それ以上の計算を行わない。 falseの場合、この関数は列Cで空でない最初の セルの値を返します。

ご意見はありますか?

答えて

0

私はあなたの数式をテストし、期待どおりに動作しますが、数式で参照する列の1つに数式を配置して循環参照を作成している可能性があります。

つまり、A、B、C以外の列で数式を試してみて、何が起こるかを見てください。

サイドノート:あなたが達成しようとしているものの代わりに、VBAマクロを作成することをお勧めします。あなたの数式は、より多くの列を追加するにつれて、任意の数の列でこれを実行します。

0

結果が元のデータと同じ行または列でなく(別のワークシート上にある可能性がある)限り、次の式を使用できます。さらに、最初の行または最初の列に空のセルがある場合、数式は失敗します。あなたはそれを離れていじめる場合

=IFERROR(INDEX($A$1:$E$3,MOD(ROWS($1:1)-1,COUNTA($A:$A))+1,INT((ROWS($1:1)-1)/COUNTA($A:$A))+1),"") 

row引数とINDEX関数の引数column、あなたは彼らが、引数の適切なシーケンスを返すことがわかります。ただし、配列に任意の数の列または行を追加できます。

あなた本当配列は、例えば、myArtrayがある別のワークシート、(たとえばSheet2の)、に、そして、式を変更することなく展開することができますので、もし、任意の大きさであるとして、配列を定義したい場合は、 Sheet1!$A$1:$Z$100、試してみてください。

=IFERROR(IF(INDEX(myArray,MOD(ROWS($1:1)-1,COUNTA(Sheet1!$A:$A))+1,INT((ROWS($1:1)-1)/COUNTA(Sheet1!$A:$A))+1)="","", 
INDEX(myArray,MOD(ROWS($1:1)-1,COUNTA(Sheet1!$A:$A))+1,INT((ROWS($1:1)-1)/COUNTA(Sheet1!$A:$A))+1)),"") 
0

をあなたはそれがワークシート関数として使用するために利用可能になるだろう

Public Function OneDimensionalRange(source As Range) 
    Dim index As Integer 
    index = Application.Caller.Row 
    OneDimensionalRange = source.Cells(index).value 
End Function 

コードモジュールでこれを貼り付けることができます。

= OneDimensionalRange($ A $ 3:$ E $ 3)

関連する問題