2017-07-12 5 views
-1

2つの列(Prod_Format_AとProd_Format_Bとします)を作成するための "参照"スプレッドシートを作成します。これらは、製品識別子の2つのバージョンになります。私は、ユーザーがフォーマットAまたはフォーマットBのいずれかを入力して、もう1つを返すことができるようにしたいと思います...EXCEL VBA:動的ルックアップ - 2つの列、いずれかにデータを入力し、もう一方にデータを入力します。

フォーマットAコードを入力すると、フォーマットBコードが返されます。 フォーマットBコードを入力すると、フォーマットAコードが返されます。

これについては、最も簡単な方法はありますか?明らかに私は別のルックアップテーブルを解決する必要があります。

ありがとうございます。

+0

これは、Excel式をスマートに使用することで簡単に解決できます。何か '= IfError(IfError(Vlookup(Value、Table1、Column、False)、Vlookup(Value、Table1、Column、False))、" - ")'このようなものは、アイテムの 'Table1'をチェックしますそこに見つからなければ 'Table2'をチェックして、' - "(これは'#N/A'を置き換えることを意図しています)を返します。 –

答えて

0

私はBrandonに同意します。これは、式をスマートに使用することで解決できます。しかし、私はインデックスマッチの組み合わせを提案したいと思います。以来、テーブルには2つの列だけが含まれており、vlookupは一番左の列をルックアップとして取得します。

= IFERROR(INDEX(PROD_FORMATA、MATCH(PROD_FOMRATB))、INDEX(PROD_FORMATB、MATCH(PROD_FOMRATA)))

マッチテーブル インデックス上の位置に応じて番号が返されもう一方の手は数値を指定した範囲の値を返します。

| A   | B  | 
| ---------- | ------- | 
| Ball  | Sports | 
| Pen  | Writing | 
| Cookie  | Food | 
| Pencil  | Writing | 
| Test  | Object | 

= MATCH( "TEST"、A1:A5,0)
戻る5

= INDEX(B1:B5,5)
戻る "オブジェクト"

0

がオンにこれを試してくださいシート(ないモジュール)のコード

Private Sub Worksheet_Change(ByVal Target As Range) 

    On Error Resume Next 

    If Target.Column = 1 Then 
     Range(Target.Address).Offset(0, 1).Value = Application.WorksheetFunction.VLookup(Range(Target.Address), Sheet1.Range("E1:F20"), 2, False) 
    Else 
    End If 

    If Target.Column = 2 Then 
     Range(Target.Address).Offset(0, -1).Value = Application.WorksheetFunction.VLookup(Range(Target.Address), Sheet1.Range("F1:G20"), 2, False) 
    Else 
    End If 

End Sub 

あなたは2つのVLOOKUPテーブルE1持っている必要がありますでしょう:F20とF1:G20(列EとGは同じですが、私たちに必要なのGはvlookupがデータの一番左の列を参照するため)

関連する問題