会计部门以不同的货币($、谢克尔和澳元)输入收款。如果货币符号与金额位于同一单元格中,是否可以按货币类型对包含混合货币的列进行排序,还是货币符号必须与金额位于不同的列中?
答案1
序言:一开始我不明白你的问题,但后来我意识到你不能处理文本值(货币符号+数字),所以你需要处理包含格式化的值的单元格,以便它们显示为货币金额,但实际上只包含数字(只是数字,没有货币符号)。
好吧,由于 Excel 目前仍然不提供基于单元格格式(颜色/图标除外)的排序,所以我想到的唯一解决方案基本上就是您假设的第二个解决方案:您需要在辅助列中为每个金额(行)添加一个相对货币符号;这样您就可以进行自定义多级排序(第一级在货币栏,第二级在金额栏)并整理您的数据。
现在,我能做的是建议您一种自动化流程的方法,以加快速度,并假设您不想手动为每个金额行编写货币符号(是吗?;-D)。
好的,如果您可以使用 VBA 来实现这一点,那么我们开始吧......
1)将以下VBA代码放入模块中:
Public Function GetCurrency(ByVal r As Range) As String
Application.Volatile
Static RegX As Object
If RegX Is Nothing Then Set RegX = CreateObject("VBScript.RegExp")
With RegX
.Global = True
.Pattern = "[0-9\-\.,\s]"
GetCurrency = .Replace(r.Text, "")
End With
End Function
2) 现在,假设金额值在“A”列,货币符号在“B”列,将此公式放在第一列 B 行(B1 单元格)中:
=GetCurrency(A1)
然后将该公式复制到同一列 (B) 的所有需要的后续行。
好的,现在您得到了两列,一列包含格式化的金额值(A),另一列包含您需要的相对货币符号(B)。
请注意,只有满足我的前言假设,并且因此您将包含数字值的“A”列格式化为正确的货币时,此方法才会起作用。如果不是,此时必须手动格式化每个“A”列的行/单元格,这与直接在每个“B”列的行/单元格上手动写入货币符号没有任何区别,也没有任何好处/收益
3)现在选择两列并进行自定义多级排序:
转到“数据”功能区,找到“排序和过滤”组,单击“排序”;
对 B 列值进行排序(第一级)
点击“添加级别”
对 A 列值进行排序(第二级)
然后...你就完成了!
附言:现在,如果您愿意,您甚至可以安全地隐藏“B”列。
参考文献: 更多信息基于多列的排序。
最后重要说明:
您无需以任何方式操纵/修改金额列中的值,为此,货币符号必须位于辅助列中。您不能只将货币符号添加到金额值列中,因为否则,您将获得文本值形式的金额,因此无法像数字值那样正确对其进行排序!(例如,想想当您有“$80”、“$30”、“$500”作为文本值时会发生什么:“$500”将排序在“$80”和“$30”之间,因为作为字符:"8" < "5" < "3"
...希望您明白了。)