0

我有一个超过 6000 行和 300 列的电子表格。我需要知道如何在 vba 中编写代码,这将允许我读取列中的单元格,如果说“否”,那么它将右侧的 3 个单元格设置为零。我调试它时没有错误,但错误在 cell.Offset 行中。想法?

先感谢您

Sub Macro1()

Dim rng As Range
Dim cell As Object

 With Sheets("Sheet1")
    Set rng = .Range("C1:C6000")
    For Each cell In rng
        If cell.Value = "no" Then
            cell.Offset(0, 1).Value = 0
            Exit For
        End If
    Next
 End With
End Sub
4

2 回答 2

0

借用chuff的代码:

Sub SetTo0IfNo()
    Dim rng As Range
    Dim lastRow As Long
    Dim cell As Range

    With Sheets("Sheet1")
        lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
        Set rng = .Range("A1:A" & lastRow)
        For Each cell In rng
            If cell.Value = "no" Then
                'cell.Offset(0, 3).Value = 0
                cell.Range("B1:D1").Value = 0
            End If
        Next
    End With
End Sub
于 2013-07-10T22:43:31.867 回答
0

以下代码应该可以完成这项工作。使用 For/Next 循环,它将工作表 1 中的每个单元格从 A1 读取到 A 列中包含数据的最后一个单元格。如果当前单元格的值为“no”,则它将右侧三列单元格的值设置为值 0。

    子集To0IfNo()
        调暗为范围
        将 lastRow 变暗
        变暗单元格作为变体
        Application.Calculation = xlCalculationManual
        Application.ScreenUpdating = False
        使用工作表(“Sheet1”)
            lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
            设置 rng = .Range("A1:A" & lastRow)
            对于每个单元格
                如果 cell.Value = "no" 那么
                    cell.Offset(0, 3).Value = 0
                万一
            下一个
        结束于
        Application.ScreenUpdating = True
        Application.Calculation = xlCalculationAutomatic
    结束子

要将列 A 单元格右侧的一系列单元格设置为 0,您将使用稍微不同的语法,但仍依赖于 offset 函数。例如,要将三个单元格立即设置为 0,请将上面的代码行替换cell.Offset(0,3).Value = 0为以下代码。

Range(cell.Offset(0, 1), cell.Offset(0, 3)).Value = 0

这种方法是必要的,因为与OFFSET可以返​​回对单元格范围的引用的工作表函数不同,VBA OFFSET 只能引用单个单元格。

于 2013-07-10T22:19:47.417 回答