2016-07-14 5 views
0

今、私は数式を使用して別のブックからデータを取得しているマクロを持っています。私はデータを処理するより速い方法があるのだろうかと思っていました。私は大きなデータセットを持っている時間があり、それが処理するためにはより長い時間がかかります。あるいは、これが最速の方法であり、その周りに道がない場合です。ここで私は情報を引き出すために使用しているものです:VBAの式を使用する以外の高速ルートを検索しようとしています

With Range("V2:V" & LastDataRow) 
    .Formula = "=IF(A2 = ""No Specific Program"",IF(F2 = """",""No PIN"",IFERROR(VLOOKUP(CONCATENATE(B2,F2),'\\NW\Data\Tech\Team\Data\DataMining\[PIN_TABLE.xlsx]Sheet1'!$C:$I,4,FALSE),""NO GAD DATA"")),IFERROR(VLOOKUP(CONCATENATE(A2,F2),'\\NW\Data\Tech\Team\Data\DataMining\[PIN_TABLE.xlsx]Sheet1'!$C:$I,4,FALSE),""NO GAD DATA""))" 
    .HorizontalAlignment = xlGeneral 
    .VerticalAlignment = xlBottom 
    .WrapText = True 
End With 

また、私は、Falseに手動、無効ステータスバー、およびFalseにEnableEventsに計算をScreenUpdatingを持っています。

+5

外部ワークブックを開き、値を配列に読み込み、配列を使用して処理します。 – Jeeped

+0

Jeepedのコメントは最適な解決策ですが、不要な複数の列を参照していないので、大量のデータセットで '= INDEX(MATCH())'が '= VLOOKUP'より効率的であることにも注意してください。 –

+0

私が採用している2つの方法は、@ Jeepedが述べたことです、またはADOで情報を照会します。特定の状況によって異なります。 – Kyle

答えて

0

あなたは故障にあれば、とELSEIFステートメントを使用してコードを必要とする -

for each y in rng 

If sheet("Name").range("A2") = "No Specific Program" AND sheet("Name").range("A2") = "" then' the A2 here can be controlled with "A" & y.row 
sheet(y.address) = "No PIN" 

Else if sheet("Name").range("A2").value & sheet("Name").range("A2").value = "something" then.... 
sheet(y.address) = "No PIN" 
end if 
next y 

それでも私はもしINDEX(マッチ(値、配列、0)、マッチ(値、配列、0))を推薦しますただ一つの価値がある、そうでなければ私はsumif/sumifsを使うでしょう。または単にマッチ。すべては、データの構造に依存します。

関連する問題