在Excel中按货币过滤


Answers:


2

VBA

因为您使用“格式”选项来格式化这些单元格,格式化不包含在单元格的值中,因此我们需要在VBA中定义一个函数。把这个()放在一个新模块中:

Public Function sumFormats(rng As Range) As String
Application.Volatile
Dim cell As Range, dblDollar#, dblPound#
dblDollar = 0: dblPound = 0
For Each cell In rng
If Len(cell.Value) > 0 Then
If Left(cell.Text, 1) = "$" Then
dblDollar = dblDollar + cell.Value
Else
dblPound = dblPound + cell.Value
End If
End If
Next cell
sumFormats = "Sum of currency: $" & dblDollar & "; Sum of Pounds: " & ChrW(163) & dblPound
End Function

然后将新函数=sumFormats(A1:A20)用于您想要的任何单元格,它将为您提供1行的总和。如果您需要在不同的行上使用小计,我们将需要修改该函数的输出。


非VBA

如果你不想搞乱VBA,你需要在你的号码旁边有一个帮助栏。在该列中使用该函数=cell("format",A1),这将返回,2£和C2$。然后运行=sumif小计的函数。

=sumif(helpcolumncell,"C2",currencycell)总结美元,并C2,2磅代替。如果您不喜欢,可以随时隐藏帮助列。在这种情况下,我们假设您的数据在B列中,帮助者是C列。

A             B    C

             Data  Format
              $1    =cell("format",B2) = C2
              £2    =cell("format",B3) = ,2  
              £3    =cell("format",B4) = ,2
              $4    =cell("format",B5) = C2 
sum dollar =sumif($C$2:$C$4,"C2",$B$2:$B$4) = 5

sum pound  =sumif($C$2:$C$4,",2",$B$2:$B$4) = 5

然后,您需要格式化这些sumif单元格以获取货币符号,或添加=concatenate("$"&sumif(...))函数


我尝试了两种方法。对于VBA,我总是在每个单元格的ELSE块(磅)中结束。使用非VBA方法,=cell("format",A1)总是返回2...
lorenzo-s

你把细胞范围改成了你的范围吗?你使用了每种定义的货币格式吗?这些都工作时,我使用它们,让我们找出差异
Raystafarian

我用的是€和HKD。
洛伦佐 -

我不知道为什么,但Excel在货币符号之前放置一个空格(ASCII 32)。因此,细胞价值就像␢€␢1234.56。所以我使用Mid(cell.Text, 2, 1)而不是Left(cell.Text, 1)在VBA代码中,我解决了。谢谢。
洛伦佐 -

很高兴你弄清楚了!
Raystafarian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.