vba循环遍历列,如果某个值然后递增

时间:2013-03-06 07:28:07

标签: excel vba range increment

我的C列填充了空单元格或包含值“OK”的单元格。我需要每个包含文本“OK”的单元格将更改为增量值1,2,3等总共2642个单元格

   C

- 1 [empty]
- 2 [empty]
- 3 [OK]
- 4 [empty]
- 5 [OK]
- 6 [empty]

需要看起来像:        ç

- 1 [empty]
- 2 [empty]
- 3 [1]
- 4 [empty]
- 5 [2]
- 6 [empty]

基本上我需要自动增量但过滤数据自动增量不起作用

代码我使用自动增量所有值,而不是在包含单词“OK”的单元格上显示值,如下所示:

   C

- 1 [1]
- 2 [2]
- 3 [empty]
- 4 [4]
- 5 [empty]
- 6 [6]

代码:

    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

2 个答案:

答案 0 :(得分:1)

您的代码已关闭,但您遇到的问题是您的单元格值正在检查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

答案 1 :(得分:0)

您可以在没有宏的情况下执行此操作:

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

    1. 将自动筛选应用于列( Ctrl - Shift - L
    2. 过滤OK
    3. 选择所有已过滤的OK s
    4. 输入以下公式:=MAX($A$1:$A2)+1 - 使用 Ctrl - 输入输入。您需要稍微调整公式 - 将$A$1替换为数据开始的第一行(或标题行) - 并将$A2替换为活动单元格上方的单元格 - 甚至如果它被隐藏了!
    5. 删除自动筛选( Ctrl - Shift - L )并根据需要复制/粘贴特殊值