Excel vba循环通过列,如果是特定值,则递增

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列,其中填充了空单元格或包含值“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 [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

您可以在不使用宏的情况下执行此操作:

  • 更改为R1C1参考样式(文件选项卡->选项->计算->R1C1参考样式
  • 选择完整列
  • 替换对话框(Ctrl-H)
  • 将所有
    OK
    替换为
    =MAX(R1C1:R[-1]C)+1
  • 如果愿意,请复制并粘贴特殊值
  • 取消选中R1C1参考样式
  • 或者,您也可以使用自动过滤器在不使用R1C1样式的情况下执行此操作:

  • 对列应用自动筛选(Ctrl-Shift-L)
  • 过滤
    OK
  • 选择所有过滤的
    OK
    s
  • 输入以下公式:
    =MAX($A$1:$A2)+1
    -使用Ctrl-Enter键输入。您需要稍微调整公式-将
    $A$1
    替换为数据开头的第一行(或标题行)-并将
    $A2
    替换为活动单元格上方的单元格-即使它是隐藏的
  • 如果需要,请删除自动筛选(Ctrl-Shift-L)并复制/粘贴特殊值
  •     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