15

複数の値を持つExcel配列があります。256文字未満のものもあれば、256文字を超えるものもあります。

サンプル文字列を使用してVLookupを実行しようとすると、256文字未満の行と一致する場合に結果を得ることができます。256文字を超える行の場合、「#N/A」を返します。

Vlookupを使用する方法、またはこの制限を克服できるExcelの他の組み込み関数を使用する方法はありますか?

4

4 に答える 4

26

このようにVLOOKUPを使用している場合

=VLOOKUP(A2,D2:Z10,3,FALSE)

つまり、D2:D10でA2を検索し、F2:F10から結果を返す場合は、代わりにこの式を試してください。

=INDEX(F2:F10,MATCH(TRUE,INDEX(D2:D10=A2,0),0))

必要に応じて範囲を変更する

編集:

ここでサンプルをモックアップしました。A2:A10の値はG2:G10と同じですが、順序が異なります。これらの各値の長さは列Bに示され、列CのVLOOKUPは列Aの値が255文字を超えると失敗しますが、列DのINDEX/MATCH式はすべての場合に機能します。

https://www.dropbox.com/s/fe0sb6bkl3phqdr/vlookup.xls

于 2012-11-02T22:43:00.947 に答える
6

同じ問題が発生し、このカスタムプリミティブvlookupを作成しました。セルの値の長さは関係ありません。

Function betterSearch(searchCell, A As Range, B As Range)
        For Each cell In A
            If cell.Value = searchCell.Value Then
                    betterSearch = B.Cells(cell.Row, 1)
                    Exit For
            End If
            betterSearch = "Not found"
        Next

End Function

PSこの特定のケースでは、専門家によって作成された元のVLOOKUPが、この10行の関数よりも不十分に実装されているのはなぜか疑問に思わずにはいられません。

于 2017-06-02T13:47:45.337 に答える
4

これは、上記Match()とは異なり、vbaコードの代わりにドラッグされ、最適化されていますbetterSearch

Public Function Match2(search As String, lookupArray As Range, Optional match_type As Integer = 0) As Long
  Application.Volatile
  Dim vArray As Variant
  vArray = lookupArray.Value
  For i = 1 To UBound(vArray, 1)
    If match_type = 0 Then
      If search = vArray(i, 1) Then
        Match2 = i
        Exit Function
      End If
    Else
      If match_type = -1 Then
        If search <= vArray(i, 1) Then
          Match2 = i
          Exit Function
        End If
      Else
        If search >= vArray(i, 1) Then
          Match2 = i
          Exit Function
        End If
      End If
    End If
  Next
End Function

使用法:

Index(rangeA, Match2(LookupValue, LookupRange, 0)

アンスの上に言った:

この特定のケースでは、専門家によって作成された元のVLOOKUPが、この10行の関数よりも不十分に実装されているのはなぜか疑問に思わずにはいられません。

最適化とパフォーマンス。文字数を255に制限すると、CPUで2回の操作のみが必要になりますが、255文字の幅で繰り返し比較する必要があるため、可変長文字列の比較ではCPUでさらに多くの手順が必要になります。VBAのようなプログラミング言語は、すべてのサブ操作が自動的に処理されるため、これを非常にわかりにくくします。

たとえば、固定長5の2つの文字列「Hello」と「abc」を比較するには、CPUで次の操作を実行するだけです。

   0100100001100101011011000110110001101111 //Hello
-  0110000101100010011000110000000000000000 //abc
= -0000000000011000111111001111011010010100 //-419231380

これで、結果が、、、または約0であるかどうかを簡単に尋ねることができます< 0。これは、2つのCPU操作で実行できます> 0= 0セルが可変長(および数式も)の場合、操作を実行する前に、まずCPUを使用して値の末尾に0を埋め込み、文字列を同じ長さにする必要があります。

于 2018-10-25T12:18:49.880 に答える
1

XLookupにはそのような制限はありません。500文字以上を検索することができました。

于 2022-02-10T21:29:05.057 に答える