编写相同公式的不同方法会产生不同的结果?

时间:2019-09-11 14:10:37

标签: excel vba formula with-statement

我对这个公式还不太了解(但比上次更好;)How to add a Dollar $ sign to a complex formula?),并对其进行了编辑以在其他地方使用它...

我的问题很简单,我采用完全相同的公式,但是根据我在“ with”中的书写方式,它不会给出相同的结果:(

我的目标是制作一个很好的“ with”,在单元格中插入公式,还要格式化单元格(颜色等)

我有两种写法:

第一个给了我我想要的结果:=AVERAGE('C Labour Rate'!c6:g6)

第二个给出:=AVERAGE('C Labour Rate'!E9:I9)

With Worksheets(YearToFill) 
            .Cells(PosStartLine + (TPINb * 3) - 3, PosStartColumn + (ActiveColumn - 1)).Formula = "=AVERAGE('" & LabourSheet & "'!" & .Cells(PosStartLine + (TPINb * 3) - 1, PosStartColumn + (ActiveColumn - 1) * NbRepairCodes) _
            .Address(False, False) & ":" & .Cells(PosStartLine + (TPINb * 3) - 1, PosStartColumn + (ActiveColumn - 1) * NbRepairCodes + NbRepairCodes - 1).Address(False, False) & ")"
        End With

(这个给了=AVERAGE('C Labour Rate'!C6:G6)

With Worksheets(YearToFill).Cells(PosStartLine + (TPINb * 3) - 3, PosStartColumn + (ActiveColumn - 1)) 'Formula for the average occurences of the TPI in Europe
            .Formula = "=AVERAGE('" & LabourSheet & "'!" & .Cells(PosStartLine + (TPINb * 3) - 1, PosStartColumn + (ActiveColumn - 1) * NbRepairCodes) _
            .Address(False, False) & ":" & .Cells(PosStartLine + (TPINb * 3) - 1, PosStartColumn + (ActiveColumn - 1) * NbRepairCodes + NbRepairCodes - 1).Address(False, False) & ")"
        End With

(第二个数字为=AVERAGE('C Labour Rate'!E9:I9)

那里发生了什么? 我什至尝试将两个公式一个接一个地写下来,然后通过逐步运行代码来检查结果,显然结果并不相同...

我猜是由“ .cells”引起的,但是为什么呢?没有“偏移”或其他功能,取决于活动单元格...

我不理解,也没有在互联网上找到帮助,主要是因为我不知道如何搜索:'(

先谢谢您的帮助! :)

1 个答案:

答案 0 :(得分:2)

是的,因为您在公式中使用.Cells,所以将其附加到with上:

第一:

Worksheets(YearToFill).Cells(PosStartLine + (TPINb * 3) - 1, PosStartColumn + (ActiveColumn - 1) * NbRepairCodes + NbRepairCodes - 1).Address(False, False) 

第二:

Worksheets(YearToFill).Cells(PosStartLine + (TPINb * 3) - 3, PosStartColumn + (ActiveColumn - 1)).Cells(PosStartLine + (TPINb * 3) - 1, PosStartColumn + (ActiveColumn - 1) * NbRepairCodes + NbRepairCodes - 1).Address(False, False) 

单元格相对于父级:

  

Worksheets().Cells()

相对于A1

但是

  

Worksheets().Range("B10:B20").Cells(1,1).Address(0,0)

将返回B10而不是A1,从而使地址偏移。