8

hlookup複数の列にまたがる値に対して実行しています。私のデータはこれに似ています:

      A      B      C      D 
  ---------------------------  
1|       Col1          Col2
2|     x      y      z      w
3|
4|

3 行目と 4 行目 (A3、B3、C3、D3 など) に、ワークブックの別の場所で hlookup を実行する数式を配置したいと思います。秘訣は、列 A と B の "Col1" と列 C と D の "Col2" を検索することです。「Col1」は A1 にありますが、実際には A1 と B1 がマージされています。A1を参照すると「Col1」と出ますが、B1を参照すると戻り値が空です。

何か案は?

4

7 に答える 7

10

「Col1」および「Col2」ラベルにアクセスするには、次を使用できます。

=INDEX($1:$1,1,COLUMN()-MOD(COLUMN()-1,2))

注: これは、同じ数のセルをグループ化していることを前提としています。セルが 3 つの場合は、式の最後の数字を 3 に変更するだけです。

編集:これがどのように機能するかです:

INDEX($1:$1,1, x ) は、行 1、列 x のセルの値を返します。テーブルがワークシートの左上隅に実際に配置されていない場合は、これを、結合されたすべてのラベルを含む実際の範囲に変更できます。この場合、次のようになります: INDEX($A$1:$D$1,1, x )

COLUMN() は、現在のセルの列番号を返します (列 A に 1、列 B に 2 など)。

MOD(COLUMN()-1,x) は、現在の列から適切なラベルを保持する列までのオフセットを返します。

于 2009-01-15T17:43:47.020 に答える
6

この問題を解決する簡単な関数をvbaで作成しました。

Function mergedText(rngMergedCell As Range)

    If rngMergedCell.MergeCells = True Then
        mergedText = rngMergedCell.MergeArea(1, 1)
    Else
        mergedText = rngMergedCell
    End If

End Function

セルが結合されたセルの場合、関数は結合されたセルの最初の要素の値を返します-これは結合されたセルがその値を格納する場所です

于 2009-07-22T15:31:38.627 に答える
2

e.James の提案のより一般的な変形は次のとおりです。

={INDEX($A$1:A1, 1, MAX(NOT(ISBLANK($A$1:A1))*COLUMN($A$1:A1)-COLUMN($A$1)+1))}

これは、マージされたセルが最初のセルを除いて空であるという事実に依存しています (Martin の提案のような場合を除きます)。

注: 中かっこは、配列数式をマークするためにあります (中かっこは入力しないでください。セル内の数式を検証するには、alt + return を押してください)。

于 2016-12-22T11:34:24.243 に答える
1

私はこのスレッドに遅れていることに気づきましたが、これに対する本当に簡単な答えを見つけました。

たとえば、ラベルが 4 つの列 a1:d1 にマージされている場合、b1 を参照すると、"" が返されます。適切なラベルを動的に見つけるには、新しいテーブルで次の fx を使用します。

=if(OriginalTable!B1="",ThisTable!A1,OriginalTable!B1)

ドラッグすると、これにより e1:h1 などの範囲がキャプチャされることに気付くと思います。

それでおしまい。それが誰かを助けることを願っています。

于 2015-09-28T16:36:36.993 に答える
0

セル B1 と D2 には値が含まれておらず、A1 と C1 のみに値が含まれています。

したがって、列 A と B の両方の数式がルックアップ値として A1 を参照し、列 C と D の両方の数式がルックアップ値として C1 を参照していることを確認する必要があります。

于 2009-01-15T17:39:03.177 に答える
0

新しい動的参照により、より多くのオプションが利用できるようになりました。これは、セルの左側を検索して最初の値を返す、私が作成した汎用関数です。最適化されていませんが、私にとってはうまくいきます。

=LET(
TargetCell, A1,
TargetRow, ROW(TargetCell),
TargetCol, COLUMN(TargetCell),
RowReference, INDIRECT(TargetRow & ":" & TargetRow),
RowValues, TRANSPOSE(FILTER(RowReference,ISBLANK(RowReference)=FALSE)),
RowValueColumns, MATCH(RowValues, RowReference,0),
ReturnColumn, MAX(FILTER(RowValueColumns,RowValueColumns<=TargetCol)),
Return, INDIRECT(ADDRESS(TargetRow,ReturnColumn)),

Return
)
于 2021-06-29T17:39:54.963 に答える