即工作表中的第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
以上操作无效(我相信原因对于在座的大多数人来说都是显而易见的),你们可以帮助我吗?
答案 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