2017-04-03 16 views
1

Excel内に2つのセル内データ検証リストがあります。両方のセルには、テーブルの2つの列を指すドロップダウン矢印があります。私が望むのは、1つのセルに値が入っていて、もう1つのセルにテーブルの対応する行の値が入っていて、それ自身の列がで、逆の場合がです。私はcell1のドロップダウンから値を選択した場合 はだから、私はcell2のドロップダウンから値を選択する場合には、列cld持つテーブルGoalTblためcell1リンク2のセル内データ検証リスト

すなわちを上書きし、cell2上書き。 cl_valというセルには、GoalTbl[cl]を指すデータ検証リストが含まれています。 GoalTbl[d]

そしてそうにd_valポイントと呼ばれる別のセルは、d_val私はd_valに基づいてcl_valの値を取得するために=INDEX(GoalTbl[d],MATCH(cl_val,GoalTbl[cl],0))同様

のような式を使用cl_valに基づいて=INDEX(GoalTbl[cl],MATCH(d_val,GoalTbl[d],0))

を取得するために、私はできません

  1. それぞれのセルに次の2つの理由を入れます。私は値を選択するには、ドロップダウン矢印を使用した場合の式は、他の細胞を意味する、私は
  2. 循環参照になるだろう、それは

そのセルに数式を上書きだから私はでこのリンク機能を得ることができますデータ検証が指し示すリストを変更するか、またはVBAアプローチで変更しますか? これは、バリデーションのための動的デフォルトの式と、他の2つの領域に基づく1つのセルの上書きメカニズムの組み合わせであると思います。私は式と同時にどのように取り組むべきかわかりません。

+1

私はこれを数式と検証で行うことはできないと思いますが、間違いなくVBAでこれを行うことができます。 Worksheet_Changeイベントを使用し、ユーザーが2つのセルのいずれかを変更したときにトリガーし、もう一方のセルまたは値自体を入力します。エラーアラートをオフにすると、ドロップダウンリスト以外の値を入力することができます(例:式。しかし、これもまた、ユーザーがこれらのセルに何かを置くことを可能にします。興味深い問題。 – vacip

答えて

2

ポインタがWorksheet_Changeになってくれてありがとう、私はVBAのアプローチをしています。 UIは、単に画面の更新やイベントをオン/オフにするサブ*である

Private Sub Worksheet_Change(ByVal Target As Range) 
If Not Intersect(Target, [cl_val]) Is Nothing Then 
    With Application.WorksheetFunction 
    UI False 
    [d_val] = .Index([Goaltbl[d]], .Match([cl_val], [Goaltbl[cl]], 0)) 
    UI True 
    End With 
ElseIf Not Intersect(Target, [d_val]) Is Nothing Then 
    With Application.WorksheetFunction 
    UI False 
    [cl_val] = .Index([Goaltbl[cl]], .Match([d_val], [Goaltbl[d]], 0)) 
    UI True 
    End With 
End If 
End Sub 

(私はトリガーたくないWorksheet_Calculateマクロ他の場所を持っている)

それでも、関数アプローチがいいだろう私は何かが参照

Public Sub UI(t As Boolean) 
    Application.EnableEvents = t 
    Application.ScreenUpdating = t 
End Sub 
ため


リスト入力を変更* UIコードによって行うことができると確信している - について知っています

関連する問題