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

问题描述 投票:0回答:4

即工作表中的列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

以上是行不通的(我相信你们大多数人的理由显而易见)你们能帮助我吗?

vba excel-vba
4个回答
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

3
投票

你可以在每次迭代中循环遍历一个范围并与单元格相关:

Sub macro64()
    Dim rngCell as Range

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

这样您就不必担心激活或选择单元格。而且你没有必须使用偏移和所有这些。只需一个快速循环即可完成。


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

1
投票

如果你有一个备用列,你可以这样做

Range("R3:R67").Formula = "=-RC[-1]"
Range("Q3:Q67").value = Range("R3:R67").value
Range("R3:R67").clear
© www.soinside.com 2019 - 2024. All rights reserved.