如果一个字段中的值为x,则使用VBA

时间:2016-08-17 10:56:56

标签: excel vba excel-vba if-statement macros

我目前有一个有很多借款人的电子表格。我希望如果第V列中的借款人数量大于1,以便在列HD中返回NA值,并且如果它只是一个借款人,则返回ND值。

我目前有以下内容,但有人可以建议我如何从第五行开始,如果有更快的方式,因为有数万个字段,并且它正在手动执行每个字段。

Sub Change()

Dim lngLoop As Long

lngLoop = 1

对于lngLoop = 1到Rows.Count

If Cells(lngLoop,22).Value =“1”Then Cells(lngLoop,212).Value =“NA”

If Cells(lngLoop,22).Value> 1 Then Cells(lngLoop,212).Value =“ND”

下一个lngLoop 结束子

1 个答案:

答案 0 :(得分:0)

好的,所以我注意到你的代码有些问题。

首先,您的第一个“If”语句将值视为字符串,因为您的字符串值为“1”而不是正在测试的整数值1。

其次,如果您正在处理和阅读/写入数千行,则应始终关闭ScreenUpdating

最后,为了提高代码效率,请使用范围对象而不是Cells(x,y)

尝试一下,让我知道它是否适合你:

Sub Change()
Dim workingRange As Range
Dim workingCell As Range

'This will make your code run much faster. Make sure to turn it back on at the end as I did.
Application.ScreenUpdating = False

'Sets the range up. (Assumes you have no data below the 1millionth row)
Set workingRange = Range("V5:V" & Range("V1000000").End(xlUp).Row)

'Loops through all the cells in Column V that have data
For Each workingCell In workingRange.Cells
    If workingCell.Value = 1 Then Cells(workingCell.Row, 212).Value = "NA"
    If workingCell.Value > 1 Then Cells(workingCell.Row, 212).Value = "ND"
Next workingCell



'Turns Screen Updating back on
Application.ScreenUpdating = True

'Clean up
Set workingRange = Nothing
Set workingCell = Nothing
End Sub