即工作表中的列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
以上是行不通的(我相信你们大多数人的理由显而易见)你们能帮助我吗?
我们可以使用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
你可以在每次迭代中循环遍历一个范围并与单元格相关:
Sub macro64()
Dim rngCell as Range
For Each rngCell in Range("Q3:Q67").Cells
rngCell.Value = -1 * rngCell.Value
Next rngCell
End Sub
这样您就不必担心激活或选择单元格。而且你没有必须使用偏移和所有这些。只需一个快速循环即可完成。
我的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
如果你有一个备用列,你可以这样做
Range("R3:R67").Formula = "=-RC[-1]"
Range("Q3:Q67").value = Range("R3:R67").value
Range("R3:R67").clear