通过在VBA中乘以-1来更改列中值的符号

时间:2018-09-18 17:45:47

标签: vba excel-vba

即工作表中的第Q列,其中值以Q3开头,并且它们可以位于列中的不同行。我想在列中取正值并将其翻转为负值,并取负值并将其翻转为正值。我当时在考虑使用If语句。

sub macro4()

with thisworkbook
     Set uftrad = .Worksheets("Output - Trad NP reformatted")
End With

uftrad.Activate
Range("q3").Activate

For i = 0 To 64

If ActiveCell.Value <> 0 Then
ActiveCell.Value * - 1
Else
    ActiveCell.Offset(i, 0).Select
End If

End Sub

以上操作无效(我相信原因对于在座的大多数人来说都是显而易见的),你们可以帮助我吗?

4 个答案:

答案 0 :(得分:4)

我们可以使用Evaluate并消除循环的需要:

Sub macro4()
    With ThisWorkbook.Worksheets("Output - Trad NP reformatted")
        With .Range("Q3", .Cells(.Rows.Count, "Q").End(xlUp))
            .Value = .Parent.Evaluate("INDEX(-1 * " & .Address(0, 0) & ",)")
        End With
    End With
End Sub

如果要循环,请循环一个变量数组。

将值加载到数组中进行数学运算并将数组值放回原位:

Sub macro4()
    With ThisWorkbook.Worksheets("Output - Trad NP reformatted")
        With .Range("Q3", .Cells(.Rows.Count, "Q").End(xlUp))
            Dim rng As Variant
            rng = .Value
            Dim i As Long
            For i = LBound(rng, 1) To UBound(rng, 1)
                rng(i, 1) = -1 * rng(i, 1)
            Next i
            .Value = rng
        End With
    End With
End Sub

答案 1 :(得分:3)

您可以在每次迭代中循环遍历一个范围并用单元格猴子:

Sub macro64()
    Dim rngCell as Range

    For Each rngCell in Range("Q3:Q67").Cells
        rngCell.Value = -1 * rngCell.Value
    Next rngCell
End Sub

通过这种方式,您不必担心激活或选择单元格。而且您不必无所适从。只需快速循环就可以完成。

答案 2 :(得分:3)

我的2美分。

Sub ReverseValues()

    Dim rng As Range

    Set rng = Range("Q3:Q" & Cells(Rows.Count, "Q").End(xlUp).Row)
    rng = Evaluate(rng.Address & "*-1")


End Sub

答案 3 :(得分:1)

如果您有备用列,可以这样做

Range("R3:R67").Formula = "=-RC[-1]"
Range("Q3:Q67").value = Range("R3:R67").value
Range("R3:R67").clear