在此之前,我需要澄清一些观点:
=SOMASE
是英语函数=SUMIF
; ;
完成的,而不是,
。我尝试在包含结构化和非结构化引用(例如.ConvertFormula
)的表中使用方法=SOMASE($B$4:$B$67;[@Nível]+1;$H$4:$H$67)
来转换具有相对非结构化引用的任何单元格绝对的。
我从ExtendOffice Kutools网站获得了有效的VBA代码,并对其进行了修改,因此我可以将任何非结构化引用从相对转换为绝对引用。代码如下:
(编辑:少一个问题;使用@jkpieterse sugestion,不会擦除非公式细胞。)
Sub ToAbsolute()
Dim c As Range
Dim textoFormula As Variant
Dim novaFormula As Variant
' Para evitar que dê erro na hora de passar o resultado da Sub para o Excel
Dim originalReferenceStyle
originalReferenceStyle = Application.ReferenceStyle
' Application.ReferenceStyle = xlA1
For Each c In Selection
If c.HasFormula = True Then
textoFormula = c.Formula
novaFormula = Application.ConvertFormula(textoFormula, _
fromReferenceStyle:=xlA1, _
toReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)
' MsgBox novaFormula
c.Formula = novaFormula
End If
Next c
' Application.ReferenceStyle = originalReferenceStyle
End Sub
在找到结构化参考之前,它就像魅力一样;它将excel错误#VALUE!
作为包含其公式中任何结构化引用的范围内的每个单元格中的文本。 另外,由于某种原因,它会删除任何不是公式的值。←(编辑:更正,使用@jkpieterse sugestion。)
我试图摆弄变量类型(Variant和String,两者都有),但我只得到:
novaFormula As String
,Type Mismatch Error
行上有ConvertFormula
(错误13); #VALOR!
(葡萄牙语为#VALUE!
)即使我可以使用Selection + F4手动将引用从一种类型切换到另一种类型(即使选择了整个单元格文本也不会导致任何错误),但对于1000多行来说这是不切实际的。
任何人都有任何线索如何解决这个问题?我认为类似于Rebecca's解决方案,但我认为它不会那么容易......
提前致谢