1

UserEntry2列のワークシートがBlockありAddressます。Validation同じ列名の別のワークシートに基づいて、これらの両方を検証したいと思います。シートのデータValidationは次のとおりです。

Block | Address
---------------
001   | 101
001   | 101.3
001A  | 35
020-1 | 203
020-1 | 203.5
020-1 | 204.1

...

約11000の異なるブロックと、約40000のブロック/アドレスのペアがあります。

私の目標は、ユーザーがシートのBlock列に値を入力すると、列UserEntryのドロップダウンの選択肢がAddressそれに対応するように変化することBlockです。

この式でカスタム検証を使用してみました:

=VLOOKUP(UserEntry!A2,Validation!A2:B40000)

しかし、それはエラーと評価されました。さまざまなフォーラムで、名前付き範囲を設定してからVLOOKUP()で適切な名前付き範囲を検索するソリューションをいくつか見ましたが、11000個の名前付き範囲を作成する必要があるため、ここでは機能しないようです。

Address特定の値に対応するすべての値を含めるための検証ドロップダウンを作成するにはどうすればよいBlockですか?

4

2 に答える 2

6

VBAについては触れていませんが、これを使用するソリューションを次に示します。

ステップ1

ブロックとアドレスの関係のマスターテーブルを作成します。これがでソートされていることを確認してくださいBlock。Sheet1を使用しました:

マスターテーブル

細胞E2は重要です。実際には何も配置する必要はありませんが、マクロはそれを使用します。セルE3は表示専用ですが、数式(ここでコメント化されているので、すぐに確認できます)を使用します。

ステップ2

名前付き範囲を作成します。の数式は上でRefers to:見たものであり、ここでE3セルへの参照を見ることができますE2。あなたの便宜のための公式は

=OFFSET($A$1,MATCH($E$2,$A:$A,0)-1,1,COUNTIF($A:$A,$E$2),1)

ダイナミックレンジ

ステップ3

データ入力が行われる新しいワークシート(Sheet2)を設定します。Address図のように、列のデータ検証を作成します。

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

ステップ4

VBAエディターを開き、このコードをのモジュールに貼り付けますSheet2Debug必要に応じて、ステートメントを削除できます。E2上のセルへの参照に再度注意してくださいSheet1

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Debug.Print "fired on " & ActiveCell.Address
  If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
    Sheets("Sheet1").Range("E2").Value = ActiveCell.Offset(0, -1).Value
  End If
End Sub

ステップ5

楽しみ。これで、データ検証はコンテキスト依存になります。例:

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

于 2012-05-18T23:00:50.023 に答える
4

これには、動的な名前付き範囲を使用できます。

仮定:

  1. 検証リストはソートされていますA..Z
  2. 検証リストは範囲内ですValidation!A:B
  3. 検証リストには、行1の見出しが含まれています
  4. シート上で検証さUserEntryれるAddressセルは、entedの右側にある1つのセルです。Block
  5. Excel2010で試してテストしました

検証ソースとして使用する名前付き範囲を作成します(私はnameを使用しましたValList):

=OFFSET(Validation!$B$1,MATCH(INDIRECT(ADDRESS(CELL("row"),CELL("col")-1)),Validation!$A:$A,0)-1,0,COUNTIF(Validation!$A:$A,INDIRECT(ADDRESS(CELL("row"),CELL("col")-1))),1)

必要なセルにデータ検証を追加します:許可List、ソース=ValList

  1. INDIRECTADDRESSを使用して、アクティブセルに関連してブロックCELLを入力したユーザーへの参照を取得します
  2. MATCHおよびを使用して、検証リスト内COUNTIFの一致するブロックの位置とサイズを取得します
  3. 入力されたブロックに一致するアドレスOFFSETへの戻り範囲を設定するために使用します
于 2012-05-18T22:57:01.933 に答える