連続する列の最後の空白でないセルの値を複数連結する方法

連続する列の最後の空白でないセルの値を複数連結する方法

Excel の数式を使用して、連続する列の最後の空白でない複数のセルの値をきちんと結合する方法を知りたいです。つまり、予想される値は図で緑色で強調表示されます。 図

ここに画像の説明を入力してください

1つの列から最後の空白でないセルの値を取得する方法を知っています。

=IFERROR(LOOKUP(2,1/(INDIRECT("A1:A"&ROW())<>""),INDIRECT("A1:A"&ROW())),"")

私はまた、複数の値を結合する方法を知っています

=TEXTJOIN("",TRUE,G4:L4)

私が考えられる可能性のある方法は次のとおりです。

  1. ソース データを 2D 配列から 1D 配列に変換し、配列数式として返します。私のアイデアは、数式を適用して、空白セルの値を最後の空白でないセルで埋めることができるというものです。

ソース式 ={1,0,0;0,2,0;0,0,3;4,0,0;0,5,0;0,0,6} 式を適用した後に返される配列 ={1,0,0;1,2,0;1,2,3;4,0,0;4,5,0;4,5,6}

  1. 配列を使用する場合は、
  2. 列ではなく行ごとにループします。

しかし、適切な処方を開発することができませんでした。

ご協力いただければ幸いです。ありがとうございます。

文字の解決策はリンクに記載されています 大文字と小文字の区別に関するソリューション

答え1

データが表示されているとおり、行の 4 つの列のそれぞれに 1 つのエントリしかない場合は、次のようになります。

E1: =A1
E2: =TEXTJOIN("",,IF(A2="", E1,""),A2:D2)

そして埋める

ここに画像の説明を入力してください

編集入力と出力の更新された例は次のとおりです。
これは、Windows Excel 2010+ および Excel 365 (Windows または Mac) で利用可能な Power Query を使用して実現できます。

Power Queryを使用するには

  • データテーブル内のセルを選択します
  • Data => Get&Transform => from Table/Range
  • PQ エディターが開いたら:Home => Advanced Editor
  • 表をメモする名前2行目
  • 表示されている部分の下のMコードを貼り付けてください
  • 2 行目のテーブル名を、元々生成されたものに戻します。
  • コメントを読んでApplied Stepsアルゴリズムを理解するために調べてください

基本的なアルゴリズムは、横方向に行を埋め、縦方向に列を埋め、各行から個別のエントリのリストを返すというものです。

Mコード

let

//Change next line to reflect your actual data source (table name)
    Source = Excel.CurrentWorkbook(){[Name="Table14"]}[Content],

//set the data types to text
    #"Changed Type" = Table.TransformColumnTypes(Source,
        List.Transform(Table.ColumnNames(Source), each {_, type text})),

//Fill across all rows, then down all columns
    #"Transposed Table" = Table.Transpose(#"Changed Type"),
    fillRows = Table.FillDown(#"Transposed Table", Table.ColumnNames(#"Transposed Table")),

    #"Transposed Table1" = Table.Transpose(fillRows),
    fillCols = Table.FillDown(#"Transposed Table1", Table.ColumnNames(#"Transposed Table1")),

//Results column combines the Distinct entries only in each of the four columns
    #"Added Custom" = Table.AddColumn(fillCols, "Output", 
        each Text.Combine(List.Distinct({[Column1],[Column2],[Column3],[Column4]}),""), type text),

//Remove uneeded columns
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Column1", "Column2", "Column3", "Column4"})
in
    #"Removed Columns"

ここに画像の説明を入力してください

関連情報