2017-07-11 22 views
1

VBAでExcelのフリーズ(セルの埋め込み)を行うコードがあり、 "実行するメモリが足りない" +エラー1004のような出力メッセージが表示されますが、それは本当に簡単な式だから...問題を引き起こし、ここにある完全なコードの一部のみがありますなぜトンを理解する:VBA:フォーミュラが間違っています - メモリが不足しています

Sub mismatches() 
Dim sht As Worksheet, cell As Range, areaToTrim As Range, LastRow As Long 
LastRow = Cells(Rows.Count, "A").End(xlUp).Row 
Set sht = ThisWorkbook.Worksheets("Mismatches") 
sht.Activate 
Range("O1").EntireColumn.Insert 
sht.Cells(1, 15) = "Mismatch DRP" 
Range("02:0" & LastRow).Value = _ 
"=IF(ISNA(VLOOKUP(K2,CDL_data!D:D,1,0)),""N/A"",I2)" 
Range("02:0" & LastRow).Select 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, 
SkipBlanks:=False, Transpose:=False 

を私は、コードの他の部分がほとんどであることを正確にしたいのですがまったく同じですが、数式だけが異なりますが、正しく実行されます。私が既にこの種の式を使っていたとしても、何かが "間違っている"か "あまりにも重い"という式でなければなりません。私は3つの行(シート "不一致")で完全なコードを試しましたが、シート "CDL_data"(Vlookupで使用される)に9000行あります。

+0

これは? .valueではありません – user1

答えて

1

おそらく、列参照の文字Oの代わりにゼロを使用すると、タイプミスが発生します。これは、おそらく9000個の行全体を参照し、Vlookupを計算する必要があるおよそ1億7,400万のセルである1行あたり16384個のセルにVlookup関数を挿入することを意味します。

おそらく列参照として手紙Oを使用して、これにゼロ

Range("02:0" & LastRow).Value = _ 
"=IF(ISNA(VLOOKUP(K2,CDL_data!D:D,1,0)),""N/A"",I2)" 
Range("02:0" & LastRow).Select 

を使用してから、このコードの一部を変更したい:

Range("O2:O" & LastRow).Value = _ 
"=IF(ISNA(VLOOKUP(K2,CDL_data!D:D,1,0)),""N/A"",I2)" 
Range("O2:O" & LastRow).Select 

あなたはあなたを変更することもできますVBEフォントは、大文字Oと比較してZeroにはっきりと異なる文字を使用して、そのような間違いを避けることができます。 Consolasは0に対角ストライクを使用するので、Oとの区別が非常に簡単になります。

一般に、コードをより速く実行したい場合は、選択を避けてから選択を実行します。ほとんどの場合、範囲に直接作用することが可能です。

+0

はい、実際に動作します!この貴重な助けをありがとうteylyn :)私はまだVBAの初心者です...私はあなたにもう一つ物事を尋ねますか?この場合、私はその範囲に直接行動する方法を教えてください。ありがとう – Jeofbist3

関連する問題