使用vba地址填写Excel范围和工作表函数结果

时间:2018-01-26 13:46:05

标签: excel vba excel-vba

不确定如何准确地表达问题,所以我会让代码开始说话!

lROW = 10 ' 
Sheet1.Range("A1:A" & lROW).Formula = "=SUM(" & Cells(1, 2).Address & ":" & Cells(1, 3).Address & ")"

使用正确的行(=SUM(B1:C1)

输入从A1到A10的公式

然后,我可以使用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)来表示行上没有绝对引用......有没有办法一举做到这一点?

2 个答案:

答案 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'}