0

マクロ/vlookup のヘルプが必要です。もともと、私はマクロを記録し、常に機能すると考えて手動で VLOOKUP を実行しました。最近、それが適切に機能していません (列が時々同じ場所にあるとは限らないということを除けば、その理由はわかりません)。毎回動作するようにこのマクロを書き出す方法はありますか?

これが私がやろうとしていることです:

マスター スプレッドシートと欠員スプレッドシートがあります。マスター スプレッドシートには、欠員スプレッドシートに移動する必要がある情報が含まれています。マスター スプレッドシートの全員が必要要員スプレッドシートにリストされているわけではなく (逆も同様です)、指定された順序になっているわけではありません。欠員スプレッドシートに必要な列名を追加するマクロが既にあるので、それが設定されています。そこから情報を得るしかない。

次のことを行うものが必要です: 欠員スプレッドシートから従業員番号を取得し、マスター スプレッドシートでそれを検索してから、特定の列名 (マスター スプレッドシートから) からの情報を (同じ名前の) 列にコピーします。空室スプレッドシート

例: 従業員番号 12345 は欠員スプレッドシートにあります。マクロは、マスター スプレッドシートで従業員番号 12345 を検索し、(マスター スプレッドシート内の) 情報を [カテゴリ]、[センター名]、[ジョブ]、[場所]、[コード]、[追跡]、[理由]、[給与] の列から同じ名前の列に移動します。空室スプレッドシート.

情報が必要な列は他にもたくさんありますが、これはサンプルです。これらのスプレッドシートは、数万行のデータがある巨大なものです。あなたが提供できるどんな援助も大歓迎です!

これがすべて理にかなっていることを願っています。

4

1 に答える 1

1

ワークブック ファイルの例に基づいて編集する

SAMPLE Milestone Report.xlsx ファイルの列 M に、次の式を配置します。

=INDEX('[SAMPLE Master Active.xlsx]Sheet1'!$1:$4,MATCH($A2,'[SAMPLE Master Active.xlsx]Sheet1'!$A:$A,FALSE),MATCH(M$1,'[SAMPLE Master Active.xlsx]Sheet1'!$1:$1,FALSE))

次に、この数式をコピーして残りの行/列に貼り付けることができます。#N/A列ラベルが正確に一致しないため、それらの一部が返されます。従業員番号が見つからない場合、同様のエラーが返されます。

Index 関数は、Master Active ワークブックのシート 1 の行 1:4 を参照します。

次の引数は、MATCH() 関数を使用して、Master Active Workbook のシート 1 の列 A にある従業員番号の行番号を検索します。

次の引数は MATCH() 関数を使用して、シート 1 のマスター アクティブ ワークブックの行 1 にある列ラベルの列 # を見つけます。

このようにして、Master Active ワークブックのすべてのデータを含む範囲を参照し、従業員番号が存在する ROW と列ラベルが存在する COLUMN を動的に識別することができます。次に、Index 関数は、この交差から値を返します。

元の回答

このVLOOKUP関数には、オプションの 4 番目の引数を含む 3 つの引数が必要です。

  1. Lookup_Value - これはあなたが探している値です
  2. Table_Array - これは、検索している範囲/テーブルですlookup_value
  3. Column_# - 数式は、table_array.
  4. Range_lookup (オプション) - 近似一致または完全一致のどちらを返すかを Excel に指示します。近似一致を使用する必要がなかったため、常にこれを に設定していFalseます。

あなたがする必要があるのは、Column_#他の基準に基づいて動的な値にすることです。おそらくMATCH()関数でこれを行うことができます。

次の例では、ワークシート関数の規則を使用していますが、VBA に簡単に変換できます。

=VLOOKUP("steve", "A:C", 3, False)列 A で「steve」が見つかった行から列 3 の値を返します。

しかし、データが常に列 3 にあるとは限らないと仮定します...「Category」を探していて、それが任意の列にある可能性がありますが、ccolumn ラベルが行 1 にあることがわかっているとしましょう。次に、「3 の代わりに"VLOOKUP...式で、次のようにします。

Match("Category",'Vacancy_Sheet_Name'!1:1, False)

したがって、最終的な式は次のようになります。

=VLOOKUP("steve", "A:C", Match("Category",'Vacancy_Sheet_Name'!1:1, False), False)

vba では、これは次のようになります。

= Application.WorksheetFunction.Vlookup("steve", "A:C", Application.Match("Category",Sheets("Vacancy_Sheet_Name").Range("1:1"),False), False)

重要な注意:VLOOKUPの最初の列を常に検索しTable_ArrayますLookup_Value。データの構造が変更され、lookup_valueが FIRST 列になくなった場合VLOOKUPは、使用する適切な関数ではありません。INDEX()このような場合、機能しないため、とMATCH()関数を組み合わせて使用​​する必要がありますVLOOKUP

于 2013-03-19T18:31:48.347 に答える