不确定如何准确地表达问题,所以我会让代码开始说话!
lROW = 10 '
Sheet1.Range("A1:A" & lROW).Formula = "=SUM(" & Cells(1, 2).Address & ":" & Cells(1, 3).Address & ")"
使用正确的行(=SUM(B1:C1)
)
然后,我可以使用Sheet1.Range("A1:A" & lROW).value2 = Sheet1.Range("A1:A" & lROW).value2
有没有我可以通过直接使用工作表功能跳过一步?我知道我可以使用某些范围地址执行此操作,但它不适用于例如:
Sheet1.Range("A1:A" & lROW).Value2 = _
Application.WorksheetFunction.Sum(Sheet1.Range(Cells(1, 2).Address(False, True) & ":" & Cells(1, 3).Address(False, True)))
我只是在col A的每一行得到第1行答案
即使我使用地址参数(false,true)来表示行上没有绝对引用......有没有办法一举做到这一点?
答案 0 :(得分:3)
应该这样做:
Dim ar As Variant
Dim rg As Range
Dim i As Long
Set rg = Sheet1.Range("A1:C10")
ar = rg.Value
For i = 1 To UBound(ar, 1)
ar(i, 1) = ar(i, 2) + ar(i, 3)
Next
rg.Columns(1).Value = ar
修改强>
我根据提问者的方法有不同的想法。这短而甜的怎么样 - 不需要循环:
Dim rg As Range
Set rg = Sheet1.Range("A1:A10")
rg.FormulaR1C1 = "=sum(RC[1]:RC[2])"
rg.Value = rg.Value
甚至......
With Sheet1.Range("A1:A10")
.FormulaR1C1 = "=sum(RC[1]:RC[2])"
.Value = .Value
End With
答案 1 :(得分:2)
使用数组的示例。
test = {1:'a',2:'b',3:'c',4:'d',5:'e'}
in_scope = set(sorted(test)[:3])
print({k: v for k, v in test.items() if k in in_scope})
# {1: 'a', 2: 'b', 3: 'c'}