2016-04-04 13 views
1

右の列のセルを左側の隣接セルに従って1つのセルに結合したいと思います。私は合併を試みたが、私はこれまでにしか得ることができなかった。そして、オンラインで検索した後、各行を解析して、左のセルのスパンの長さのために結合できるものは見つかりませんでした。私はCONCATENATE関数だと知っていますが、スプレッドシート全体を解析するにはどうしたらいいですか?左の列セルに応じて隣接する行セルを結合する

Adjacent Cells

これは、私が上記のために望む結果の一例である:

enter image description here

+0

を最初の列の最大マージ量は?それは常に1行か2行ですか?それとも3つ以上のことができますか? –

+0

それは様々です。私が持っている最大のものは、同じ左の列セルを持つ20の行です。最小のものは重複しません。 –

+0

私は2つの組み合わせを考慮したバージョンを作ったが、それ以上のことをしたいと思えば、VBAはそれをより簡単にするだろうと思う。だから、必ずしもフォーミュラのすべてであるとは限りません。 –

答えて

1

これは複雑すぎるかもしれ - 私は戻って描画ボードに行くだろう、その場合にと完全なVBAバージョンを作成しますが、最初は数式を使用してソリューションを構築するという難題を探していました。残念ながら、可変数の細胞を連結するための標準的なフォーミュラベースのアプローチは存在しないようである。

Function CombineRange(ByRef rng As Range, ByVal delim As String) 
    Dim arr 
    Dim i As Long 

    arr = rng.Value 

    CombineRange = "" 
    For i = 1 To UBound(arr) 
     If i > 1 Then 
      CombineRange = CombineRange & delim 
     End If 

     CombineRange = CombineRange & arr(i, 1) 
    Next i 

End Function 

仮定:

  • データがある
  • あなたのマージされたデータ "YourData" と呼ばれるシートにある列
  • ので、これを達成するために、私は1つの機能を追加しました

  • "1行"データは列B
  • 行1は何らかのヘッダー行です。

your data

次に、新しいシート(私はそれが "折りたたみ" と呼ぶ)の上に4つの列を設定

A - あなたのデータは上で起動どんな行開始行=(最初の行)(2 、私たちの場合)

A - 開始行=(他のすべて)A2+B2

B - オフセット= {IFERROR(MATCH(FALSE,ISBLANK(INDIRECT(ADDRESS(A2+1,1,,,"YourData")&":A200")),0),0)}

注意あなたがシフト+

C、それを入力するときに入力し実行する必要があるので、これは、配列関数である - レベル1 = =INDEX(YourData!A:A,A2)

D - 複合レベル2 = =IF(B2<=1, INDIRECT(ADDRESS(A2,2,,,"YourData")), CombineRange(INDIRECT(ADDRESS(A2,2,,,"YourData")&":"&ADDRESS(A2+B2-1,2)),"; "))

enter image description here

+0

開始行を検出する式がありますか、または手動で入力する必要がありますか? –

+0

申し訳ありませんが、最初の部分である「開始行」はわかりません。 –

+0

最初の行は2番目の番号です(これはデータの先頭行です)。 他の行については、上記の列Aの式を使用してください。 –

関連する問題