Excel VBA-插入公式并随后删除筛选行

Excel VBA-插入公式并随后删除筛选行,excel,vba,Excel,Vba,我想加速下面的代码,但我不知道如何开始。在插入其他公式之前,是否可以进行vlookup并删除不匹配的行?我认为这将把行数从35000减少到800 代码如下: Sub INSERTDATA() Dim Wb1 As Workbook, wb2 As Workbook, wB As Workbook Dim rngToCopy As Range Application.ScreenUpdating = False Application.Calculation = xlCalculationMan

我想加速下面的代码,但我不知道如何开始。在插入其他公式之前,是否可以进行vlookup并删除不匹配的行?我认为这将把行数从35000减少到800

代码如下:

Sub INSERTDATA()
Dim Wb1 As Workbook, wb2 As Workbook, wB As Workbook
Dim rngToCopy As Range

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Worksheets("INPUT").Range("A2:BN35000").ClearContents

For Each wB In Application.Workbooks
    If Left(wB.Name, 17) = "Backorders Detail" Then
        Set Wb1 = wB
        Exit For
    End If
Next

If Not Wb1 Is Nothing Then
    Set wb2 = ThisWorkbook

    With Wb1.Sheets(2)
        Set rngToCopy = .Range("A2:BN2", .Cells(.Rows.Count, "A").End(xlUp))
    End With
    wb2.Sheets("INPUT").Range("A2:BN2").Resize(rngToCopy.Rows.Count).Value = rngToCopy.Value

End If

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

Range("BO3").Formula = "=IF(H3="""","""",CONCATENATE(H3,""/"",TEXT(I3*10,""0000"")))"
Range("BO3").Copy
Range("BO3:BO35000").PasteSpecial (xlPasteAll)

Range("BP3").Formula = "=IF(AN3="""","""",VALUE(AN3))"
Range("BP3").Copy
Range("BP3:BP35000").PasteSpecial (xlPasteAll)

Range("BQ3").Formula = "=VLOOKUP(BP3,DATA!A:L,12,FALSE)"
Range("BQ3").Copy
Range("BQ3:BQ35000").PasteSpecial (xlPasteAll)

Range("BR3").Formula = "=VLOOKUP(BP3,DATA!A:K,11,FALSE)"
Range("BR3").Copy
Range("BR3:BR35000").PasteSpecial (xlPasteAll)

Range("BS3").Formula = "=IF(R3="""","""",LEFT(R3,4))"
Range("BS3").Copy
Range("BS3:BS35000").PasteSpecial (xlPasteAll)

Range("BT3").Formula = "=IF(W3="""","""",W3)"
Range("BT3").Copy
Range("BT3:BT35000").PasteSpecial (xlPasteAll)

Range("BU3").Formula = "=IF(W3="""","""",W3)"
Range("BU3").Copy
Range("BU3:BU35000").PasteSpecial (xlPasteAll)

Range("BV3").Formula = "=IF(BH3="""","""",BH3)"
Range("BV3").Copy
Range("BV3:BV35000").PasteSpecial (xlPasteAll)

Range("BW3").Formula = "=IF(AF3="""","""",AF3)"
Range("BW3").Copy
Range("BW3:BW35000").PasteSpecial (xlPasteAll)

Range("BX3").Formula = "=IF(A3="""","""",IF(ISERROR(BQ3),""x"",""""))"
Range("BX3").Copy
Range("BX3:BX35000").PasteSpecial (xlPasteAll)

Selection.AutoFilter Field:=10, Criteria1:="x"
lr = Cells(Rows.Count, 1).End(xlUp).Row
If lr > 1 Then
    Range("A3:A" & lr).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End If

End Sub

我为这个“garbrage”代码感到抱歉,但这是我自己拼凑的。

不是在一个单元格中设置公式,然后复制它,而是一次设置所有单元格的公式,例如
范围(“BO3:BO35000”)。公式=“=IF(H3=“”,“”“”,串联(H3),“/”,文本(I3*10),“0000”)”
,将
屏幕更新=True
计算=xlCalculationAutomatic
移动到子例程的末尾。此函数是否仅插入不带公式的文本?这对我来说是重要的部分。非常感谢。不,它插入公式好的,有没有一种只插入结果的快速方法(没有公式)?用VBA进行计算,或者简单地将单元格的值设置为自己的值,例如
Range(“BO3:BO35000”)。Value=Range(“BO3:BO35000”)。Value