带有计数器的for循环中的if语句

时间:2014-08-03 13:14:48

标签: excel-vba if-statement for-loop excel-2013 vba

我有以下情况我无法弄明白。有没有办法在if循环中获取计数器而不覆盖自身。

我有这段代码:

lastrow = Sheets("sheetx").Cells.SpecialCells(xlCellTypeLastCell).Row

For a = 1 To lastrow
    If Sheets("sheetx").Cells(a, 1).Value = "aa" Then
        Sheets("sheetx").Cells(a, 2).Value = "zz"
    End If
    If Sheets("sheetx").Cells(a, 1).Value = "bb" Then
        Sheets("sheetx").Cells(a, 2).Value = "yy"
    End If
    If Sheets("sheetx").Cells(a, 1).Value = "cc" Then
        Sheets("sheetx").Cells(a, 2).Value = "zz"
    End If
    If Sheets("sheetx").Cells(a, 1).Value = "dd" Then
        Sheets("sheetx").Cells(a, 2).Value = "ww"
    End If
Next a

picture I get - picture I want to get

左边的数据就是我得到的。但我希望数据在右边。当“aa”的if语句分配超过“zz”的8倍时,它必须停止(见右图)分配“zz”。有没有一种简单的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用单独的计数器来计算"aa"被替换的次数。像这样:

Dim aaCounter As Integer

lastrow = Sheets("sheetx").Cells.SpecialCells(xlCellTypeLastCell).Row

aaCounter = 1
For a = 1 To lastrow
    If Sheets("sheetx").Cells(a, 1).Value = "aa" Then
        If aaCounter <= 8 Then
          Sheets("sheetx").Cells(a, 2).Value = "zz"
          aaCounter = aaCounter + 1
        End If
    End If
    If Sheets("sheetx").Cells(a, 1).Value = "bb" Then
        Sheets("sheetx").Cells(a, 2).Value = "yy"
    End If
    If Sheets("sheetx").Cells(a, 1).Value = "cc" Then
        Sheets("sheetx").Cells(a, 2).Value = "zz"
    End If
    If Sheets("sheetx").Cells(a, 1).Value = "dd" Then
        Sheets("sheetx").Cells(a, 2).Value = "ww"
    End If
Next a

如果您愿意,可以对其他值执行类似操作。