2017-11-01 17 views
0

私はこのマクロを持っていますが、シートをフィルタリングしてソートして、 "短い支払い済み"と書かれたセルの隣にvlookupの式を追加するように書きました。私のコードは、列Gに「短納税」を持つ行が複数ある場合は正常に動作します。VBAupでセルを塗りつぶし、他のセルにコピー&ペーストします。

列Gに「短期支払い」がある行が1つだけの場合、マクロはヘッダーの使用、ヘッダー(行1)内の行2の内容。私はちょうどそれが "短い支払"と複数の行がある場合は、マクロが全くヘッダーに触れていないことが奇妙に思える。ここではコードです:

Sub Prox2() 

Dim LastRow As Long 
Dim xRow As Range 
Dim xRg As Range 
Dim xRows As Range 

ActiveSheet.Range("A:O").AutoFilter Field:=7, Criteria1:= _ 
    "Short Paid" 

LastRow = Range("G" & Rows.Count).End(xlUp).Row 
Range("H2") = "=VLOOKUP(A2,Sheet2!A:B,2,FALSE)": Range("H2:H" & 
LastRow).FillDown 

Range("H2:H" & LastRow).Select 
Selection.Copy 

Range("A2").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=True, Transpose:=False 

Range("H2:H" & LastRow).Select 
Application.CutCopyMode = False 
Selection.ClearContents 

Range("H2") = "=VLOOKUP(A2,Sheet2!A:P,16,FALSE)": Range("H2:H" & 
LastRow).FillDown 

Range("C2:C" & LastRow).Select 
Application.CutCopyMode = False 
Selection.ClearContents 

Range("C2") = "=VLOOKUP(A2,Sheet2!A:F,6,FALSE)": Range("C2:C" & 
LastRow).FillDown 

Range("F2:F" & LastRow).Select 
Application.CutCopyMode = False 
Selection.ClearContents 

Range("F2") = "=VLOOKUP(A2,Sheet2!A:J,10,FALSE)": Range("F2:F" & 
LastRow).FillDown 

Range("E2:E" & LastRow).Select 
Application.CutCopyMode = False 
Selection.ClearContents 

Range("E2") = "=F2-30": Range("E2:E" & LastRow).FillDown 

ActiveSheet.Range("A:O").AutoFilter Field:=7 

End Sub 
+1

私はそれはかなり遅いよう '.Select'コピー/ペースト法を使用しないようお勧めを...私はお勧めしたいですそれははるかに速いので、 'Worksheet.Range([RANGE])。Formula = [FORMULA]'を使うだけです。 – Maldred

+0

@Maldredそうすれば、マクロはvlookupを必要とする行が1つしかないところでヘッダを使うことを解決できますか? –

+0

'Debug'ははるかに簡単ですが、あなたの問題を修正するとは確信できませんが、あなたのコードは間違いなくリワークを使う可能性があります。 – Maldred

答えて

0

あなたがLASTROWを見つけようどこに問題がある(LASTROW = ...)あなたはそこにはいない行によって得るという可能性をチェックされていません。あなたは追加する必要があります:

If LastRow = 1 Then 
    'This means no rows found. Exit or do something else. 

編集:

すると、このアプローチを試してみてください:

Range("H2:H" & LastRow).SpecialCells(xlCellTypeVisible).FormulaR1C1 = "=VLOOKUP(RC1, Sheet2!C1:C2, 2, FALSE)" 
+0

行があります。マクロが機能しないときは、ただ1つの行とヘッダーがあります。セル内に「短納期」という言葉が2行以上ある場合、マクロは機能します。しかし、セル内で短い支払われた単語を持つ行が1行だけであれば、マクロは行2にデータを挿入するためにヘッダー行を使い始めます。私は「短い支払い」の行を見ればこのマクロを呼び出します。 「短期支払い」が表示されない場合、最初に使用しないので、Exit文を使用する必要はありません。 –

+0

FillDownメソッドが上記の行からコピーする行が1つある場合はこれはヘッダー行です。したがって、行が1つしかない場合は、その行に数式を入力し、FillDownメソッドを使用しないでください。 –

+0

したがって、filldownメソッドを使用しないデータ(ヘッダー行はもちろん)を持つ行が1つしかない場合、コードを実装する方法はありますか?あなたが書いたように、LastRow = 2の場合(2行、ヘッダー行、およびvlookup式を必要とする1行のデータがあるため2と言う)のようなものですか? –

関連する問題