find一个空单元格,并在一个巨大的文件中的另一列写东西

我有巨大的文件(超过50万行),我需要find“M”列是否等于“”,如果它等于“”,比我需要写下“N”列中的东西。

我用=来做“”,因为IsEmpty()在这些文件中不工作(不知道为什么)。

这是我目前的代码:(我删除了什么是不必要的)

 Sub sbVBA_COMMENTS_ExcelSheets() 'CONSTANTS SERVICENTRE FILES (PROD FOUR) Const SC_STRLINE As Integer = 4 'FIRST PART IS ALWAYS AT LINE 4 Const SC_COLNUM As String = "B" 'PART NUMBERS WILL ALWAYS BE IN THE B COLUM FOR EVERY EXCEL FILES Const SC_COLMKT As String = "K" 'NEW MARKETING CODE WILL ALWAYS BE IN THE K COLUM FOR EVERY EXCEL FILES Const SC_COLDCT As String = "M" 'NEW DISCOUNT CODE WILL ALWAYS BE IN THE M COLUM FOR EVERY EXCEL FILES Const SC_COLPRB As String = "N" 'NEW COMMENTS AND PROBLEM CODE WILL ALWAYS BE IN THE M COLUM FOR EVERY EXCEL FILES 'VARIABLES Dim RowCount As Long Dim ct As Long 'SET VARIABLES RowCount = 0 ct = SC_STRLINE Sheets(4).Select 'ADD COMMENTS With Sheets(4) RowCount = .Cells(.Rows.Count, "A").End(xlUp).Row End With While ct <= RowCount If Sheets(4).Range(SC_COLDCT & ct).Value = "" Then Sheets(4).Range(SC_COLPRB & ct).Value = "EMPTY" End If ct = ct + 1 Wend 'FILTER BY COMMENTS ActiveWorkbook.Worksheets(4).AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets(4).AutoFilter.Sort.SortFields.Add Key:= _ Range(SC_COLPRB & (SC_STRLINE - 1)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("PROD FOUR").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub 

这是工作…不知何故……但它是超慢,当我运行macros,我的Excel几乎70%的时间死亡。

有时候,这个macros也会导致一个问题,因为某些原因,它会在任何地方写下EMPTY。

基本上,我正在寻找更快,更干净的方式来做同样的事情。

在做同样的事情的时候有没有一种方法可以获得性能?

请注意,我不是一个编码器,所以如果你能以一种我能理解的方式来回答我,那将是值得赞赏的。

尝试使用下面的代码。 这不是处理范围,而是将范围转换成希望更快的数组。

 Sub sbVBA_COMMENTS_ExcelSheets() 'CONSTANTS SERVICENTRE FILES (PROD FOUR) Const SC_STRLINE As Integer = 4 'FIRST PART IS ALWAYS AT LINE 4 Const SC_COLNUM As String = "B" 'PART NUMBERS WILL ALWAYS BE IN THE B COLUM FOR EVERY EXCEL FILES Const SC_COLMKT As String = "K" 'NEW MARKETING CODE WILL ALWAYS BE IN THE K COLUM FOR EVERY EXCEL FILES Const SC_COLDCT As String = "M" 'NEW DISCOUNT CODE WILL ALWAYS BE IN THE M COLUM FOR EVERY EXCEL FILES Const SC_COLPRB As String = "N" 'NEW COMMENTS AND PROBLEM CODE WILL ALWAYS BE IN THE M COLUM FOR EVERY EXCEL FILES 'VARIABLES Dim RowCount As Long Dim varray As Variant Dim i As Long 'SET VARIABLES RowCount = 0 ct = SC_STRLINE 'disable unnecessary hindrances Application.ScreenUpdating = False Application.Calculation = xlManual With ThisWorkbook.Sheets(4) 'find last row RowCount = .Cells(.Rows.Count, "A").End(xlUp).Row varray = Range(SC_COLDCT & SC_STRLINE & ":" & SC_COLDCT & RowCount).Value For i = UBound(varray, 1) To LBound(varray, 1) Step -1 If varray(i, 1) = "" Then 'if nothing .Range(SC_COLPRB & i + 4).Value = "EMPTY" End If Next 'FILTER BY COMMENTS .AutoFilter.Sort.SortFields.Clear .AutoFilter.Sort.SortFields.Add Key:= _ Range(SC_COLPRB & (SC_STRLINE - 1)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal End With With ActiveWorkbook.Worksheets("PROD FOUR").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub 

下面的简单代码快速完成你想要的。 你也可以使用“”而不是vbNullString。

 Dim i As Long Dim lR As Long lR = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lR If Cells(i, "M").Value = vbNullString Then Cells(i, "N").Value = "Empty" End If Next i