2017-05-05 5 views
0

1つの部門が必要とする製品のリストを取得するマクロを構築しています(毎日新しいものを送信します)。倉庫内のすべての商品のすべての場所のこれまでは、製品IDがロケーションリスト(x)で発生した回数をカウントし、それを新しいシートxに何度もコピーするように設定しました。製品のサイズを取得し、別の列に値を入力して製品ID &のサイズを索引付けして場所を見つけることができるようになりました。そのシートは印刷され、製品を引っ張って、システムを見たり、リストのすべての場所を見つけることなく(現在は約1時間かかる)、製品を引っ張ることになります(現在は約1時間かかります)。「INDEX」配列式を自動入力してルックアップ列の新しいユニークな値を再調整するコード

問題は今です第2の一意の値の最初のインスタンスで中断することなく、自動入力する式を取得することはできません。私は回避策を見つけましたが、どのようにvbaで自動化を開始するのか分かりません。

D2におけるアレイ式=

{=INDEX(Report!D:G,SMALL(IF(Report!D:G=$A2,ROW(Report!D:G)),ROW(A1)),4)} 

が列Aに第2の一意的な値まで取得した場合、それが破壊し、それが

{=INDEX(Report!D:G,SMALL(IF(Report!D:G=$A7,ROW(Report!D:G)),ROW(A6)),4)} 

しかし変化などによって読み出し最後のROW関数はA1に戻り、それは次のように機能します。

{=INDEX(Report!D:G,SMALL(IF(Report!D:G=$A7,ROW(Report!D:G)),ROW(A1)),4)} 

Formula breaks in first instance of 2nd unique value in Column A

enter image description here

Formula works in first instance of 2nd unique value in Column A by changing final ROW function back to "A1" and dragging down.

enter image description here

私は式にIFERRORを追加してみました:

{=IFERROR(INDEX(Report!D:G,SMALL(IF(Report!D:G=$A2,ROW(Report!D:G)),ROW(A1)),4),INDEX(Report!D:G,SMALL(IF(Report!D:G=$A2,ROW(Report!D:G)),ROW($A$1)),4))} 

しかし、明らかにそれをうまくいかなかった。それはもっと絶望的だった。

列Aの変更を検出し、最後の行関数をA1に戻すだけで、VBAでプロセスを自動化する方法はありますか?

または、自動入力で動作する式がありますか?

何か助けていただければ幸いです。ありがとう!

答えて

0

は、この配列数式を試してみてください。

=INDEX(Report!G:G,SMALL(IF(Report!D:D=$A2,ROW(Report!D:D)),COUNTIF($A$2:A2,A2))) 

は、それが編集モードを終了するときはCtrl-Shiftキーを押しながら入力する代わりに入力して確認する必要が配列数式であること。 Excelが正しく実行されると、数式の周りに{}が置かれます。


注:配列数式を使用しているとき、それは価値があるか、ない場合、彼らは関係なく、すべてのセルを反復しますと、これは、貧しい人々の練習で、中に私はあなたの完全な列参照を残しています。これは、百万回の計算式を実行します。これはあなたの計算時間を遅くし、さらにクラッシュする可能性があります。

データが含まれているセルのみを参照することをお勧めします。

データを処理する1つの方法は、小さな変数の内部で参照を作成することです。

=INDEX(Report!G:G,SMALL(IF(Report!D$1:INDEX(Report!D:D,MATCH(1E+99,Report!D:D))=$A2,ROW(Report!D$1:INDEX(Report!D:D,MATCH(1E+99,Report!D:D)))),COUNTIF($A$2:A2,A2))) 

が、今式は自動的にレポートシートの列Dの番号とその最後のセルへの参照の終わりを設定し、余分な非必須ループは以下となります。私たちは、INDEX/MATCHでそれを行うことができます作られる。

+0

これは機能します。ああ、ありがとう!あなたが気にしない場合、あなたの答えについて2つの質問... 完全な列参照を持たないように数式を変更するにはどうすればよいですか? と あなたの作品はなぜ機能しましたか? COUNTIFとは何をしていますか? 編集:最初の質問に気を付けないでください。わかった。 – MadeFromMetal

+0

最初の質問は、私は編集、2番目を参照して答えた:countifの2番目の参照は、数式が見つかった行の上から範囲を増加させるため、重複するので、Aの各変更が1に戻ってカウンターを開始します。 –

+0

ご協力いただきありがとうございます。すべてが完璧に動作します。私のコメントの編集は気にせず、あなたの編集は私の解決策よりも優れていました。 – MadeFromMetal

関連する問題