Excel vba循环通过列,如果是特定值,则递增
我有一个C列,其中填充了空单元格或包含值“OK”的单元格。我需要每个包含文本“OK”的单元格将被更改为递增值1、2、3等。总共2642个单元格Excel vba循环通过列,如果是特定值,则递增,excel,vba,range,increment,Excel,Vba,Range,Increment,我有一个C列,其中填充了空单元格或包含值“OK”的单元格。我需要每个包含文本“OK”的单元格将被更改为递增值1、2、3等。总共2642个单元格 C - 1 [empty] - 2 [empty] - 3 [OK] - 4 [empty] - 5 [OK] - 6 [empty] 需要看起来像: C 基本上我需要自动递增,但当过滤数据时,自动递增不起作用 代码i使用自动递增所有值,不在包含单词“OK”的单元格上显示值,如下所示: C - 1 [1] - 2 [2] - 3 [em
C
- 1 [empty]
- 2 [empty]
- 3 [OK]
- 4 [empty]
- 5 [OK]
- 6 [empty]
需要看起来像:
C
基本上我需要自动递增,但当过滤数据时,自动递增不起作用
代码i使用自动递增所有值,不在包含单词“OK”的单元格上显示值,如下所示:
C
- 1 [1]
- 2 [2]
- 3 [empty]
- 4 [4]
- 5 [empty]
- 6 [6]
代码:
您的代码很接近,但问题是您的单元格值正在检查
OK
并认为它是一个变量。为了避免这种情况,您要做的第一件事是将Option Explicit
放在每个模块的顶部,告诉您何时没有声明变量
现在,您只需将“OK”设置为类似于的字符串“OK”
。您还需要在If
语句中增加您的数字,否则即使您不希望它继续增加,它也会继续增加
编辑:您也可以更简单地定义范围,只需在range
方法中定义单元格,如本代码所示。它不像使用End
那样灵活,但是如果你有一个固定的范围,就可以了
请尝试以下代码:
Option Explicit
Sub Macro1()
Dim r As Range, cell As Range, mynumber As Long
Set r = Range("C1:C2642")
mynumber = 1
For Each cell In r
If cell.Value = "OK" Then
cell.Value = mynumber
mynumber = mynumber + 1
End If
Next
End Sub
您可以在不使用宏的情况下执行此操作:
OK
替换为=MAX(R1C1:R[-1]C)+1
OK
OK
s=MAX($A$1:$A2)+1
-使用Ctrl-Enter键输入。您需要稍微调整公式-将$A$1
替换为数据开头的第一行(或标题行)-并将$A2
替换为活动单元格上方的单元格-即使它是隐藏的 Sub Macro1()
mynumber = 1
Dim r As Range, cell As Range
Set r = Range(Range("C1"), Range("C2642").End(xlDown))
For Each cell In r
If cell.Value = OK Then cell.Value = mynumber
mynumber = mynumber + 1
Next
End Sub
Option Explicit
Sub Macro1()
Dim r As Range, cell As Range, mynumber As Long
Set r = Range("C1:C2642")
mynumber = 1
For Each cell In r
If cell.Value = "OK" Then
cell.Value = mynumber
mynumber = mynumber + 1
End If
Next
End Sub