web-dev-qa-db-ja.com

Excelに合体のような機能はありますか?

同じ行の列のセット(左から右へ)の最初の空でないエントリをセルに入力する必要があります-SQLのCoalesce()と同様です。

次のサンプルシート

---------------------------------------
|     |  A   |   B   |   C   |    D   |
---------------------------------------
|  1  |      |   x   |   y   |    z   |
---------------------------------------
|  2  |      |       |   y   |        |
---------------------------------------
|  3  |      |       |       |    z   |
---------------------------------------

行Aの各セルにセル関数を配置して、次のようにします。

---------------------------------------
|     |  A   |   B   |   C   |    D   |
---------------------------------------
|  1  |  x   |   x   |   y   |    z   |
---------------------------------------
|  2  |  y   |       |   y   |        |
---------------------------------------
|  3  |  z   |       |       |    z   |
---------------------------------------

IF関数のカスケードでこれを実行できることはわかっていますが、実際のシートには30の列から選択できるので、もっと簡単な方法があれば幸いです。

40
Fabian
=INDEX(B2:D2,MATCH(FALSE,ISBLANK(B2:D2),FALSE))

これは配列式です。数式を入力した後、を押します CTRL + Shift + Enter Excelで配列式として評価する。これは、指定されたセル範囲の最初の非空白値を返します。例では、列にヘッダー「a」の数式が入力されています

    A   B   C   D
1   x   x   y   z
2   y       y   
3   z           z
45
Howard Renollet

私が使用した:

=IF(ISBLANK(A1),B1,A1)

これは、使用する最初のフィールドが空白かどうかをテストし、もう一方を使用します。複数のフィールドがある場合、「ネストされたif」を使用できます。

9
neil collins

または、個々のセルを比較する場合は、VBAでCoalesce関数を作成できます。

Public Function Coalesce(ParamArray Fields() As Variant) As Variant

    Dim v As Variant

    For Each v In Fields
        If "" & v <> "" Then
            Coalesce = v
            Exit Function
        End If
    Next
    Coalesce = ""

End Function

そして、Excelで呼び出します。あなたの例では、A1の式は次のようになります。

=Coalesce(B1, C1, D1)
7
AndyMc

VBAのアプローチをさらに一歩進めて、個々のセルとセル範囲の両方(またはいずれか)の組み合わせを許可するように書き直しました。

Public Function Coalesce(ParamArray Cells() As Variant) As Variant

    Dim Cell As Variant
    Dim SubCell As Variant

    For Each Cell In Cells
        If VarType(Cell) > vbArray Then
            For Each SubCell In Cell
                If VarType(SubCell) <> vbEmpty Then
                    Coalesce = SubCell
                    Exit Function
                End If
            Next
        Else
            If VarType(Cell) <> vbEmpty Then
                Coalesce = Cell
                Exit Function
            End If
        End If
    Next
    Coalesce = ""

End Function

したがって、Excelでは、A1で次の式のいずれかを使用できます。

=Coalesce(B1, C1, D1)
=Coalesce(B1, C1:D1)
=Coalesce(B1:C1, D1)
=Coalesce(B1:D1)
3
AndyMc

配列内に、許可されていない変数を入力します。

Function Coalesce(ParamArray Fields() As Variant) As Variant

    Dim v As Variant

    For Each v In Fields
        If IsError(Application.Match(v, Array("", " ", 0), False)) Then
            Coalesce = v
            Exit Function
        End If
    Next
    Coalesce = ""

End Function
0
Felipe