通过柱并且如果然后一定值递增VBA环(vba loop through column and if

2019-08-17 07:47发布

我充满了空单元格或包含值“OK”单元格的列℃。 我需要一个包含文本的每一个细胞“OK”将是改变递增值1,2,3等共2642个细胞

   C

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

需要看起来像:C

- 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

Answer 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


Answer 2:

你可以做到这一点没有一个宏:

  1. 更改为R1C1引用样式( 文件标签- > 选项 - > 计算 - > R1C1引用样式
  2. 选择整列
  3. 替换对话框( 按Ctrl - 1H)
  4. 更换所有OK=MAX(R1C1:R[-1]C)+1
  5. 如果你愿意,复制和粘贴特殊值
  6. 取消选中R1C1引用样式

或者,你也可以做到这一点没有R1C1样式通过使用自动筛选:

  1. 应用自动筛选将您的列( 按Ctrl - Shift键 - L)
  2. 为筛选OK
  3. 选择所有过滤OK小号
  4. 输入下面的公式: =MAX($A$1:$A2)+1 -以Ctrl进入它- 输入 。 你需要稍微调整配方-取代$A$1和-与第一行数据开始(或标题行) $A2 与活动单元格上方的单元格 -即使它是隐藏的!
  5. 删除自动筛选( 按Ctrl - Shift键 - L)和复制/如果你想粘贴特殊值


文章来源: vba loop through column and if certain value then increment