【发布时间】:2019-11-04 09:07:45
【问题描述】:
我正在创建一个私有 excel 程序,该程序在工作簿中具有多个不同的货币格式单元格。
我想将工作簿中的所有货币单元格从一种货币更改为选定的货币。
这个过程必须快速有效地进行。
有什么想法吗?
我一直在查看多个线程,但没有运气。我没有找到任何可以快速更改每个货币单元的货币符号的线程。
以下是我尝试过的一些网站的链接: - https://www.pcreview.co.uk/threads/vba-code-to-change-currency-format.3861711/ - https://social.msdn.microsoft.com/Forums/office/en-US/5828423e-96dd-4cae-8404-7d5d8adb328c/finding-all-currency-formatted-cells-and-change-the-currency-symbol?forum=exceldev - https://www.reddit.com/r/excel/comments/4dcha1/i_need_a_way_to_change_all_currency_cells_across/ - https://www.ozgrid.com/forum/forum/help-forums/excel-general/67104-change-currency-symbol-from-list?t=77206 -https://chandoo.org/forum/threads/how-to-change-the-currency-symbol-dynamically-in-excel.7673/ -https://contexturesblog.com/archives/2010/06/23/conditional-formatting-for-currency-symbol/
我没有包括我之前看过的所有主题。 我只需要快速高效的东西。
代码:
Dim cur As Range
Set cur = Range("e12")
If Not Application.Intersect(cur, Range(Target.Address)) _
Is Nothing Then
If cur = "Dollar" Then
If Sheets("Summary").Range("e15").NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ " Then
Application.FindFormat.NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ "
Application.ReplaceFormat.NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ "
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ "
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ "
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ "
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)" Then
Application.FindFormat.NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Application.ReplaceFormat.NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ "
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
End If
ElseIf cur = "Euro" Then
If Sheets("Summary").Range("e15").NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ " Then
Application.FindFormat.NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ "
Application.ReplaceFormat.NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)" Then
Application.FindFormat.NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Application.ReplaceFormat.NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
End If
ElseIf cur = "Pound" Then
'dollar to dirham
If Sheets("Summary").Range("e15").NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ " Then
Application.FindFormat.NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ "
Application.ReplaceFormat.NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)" Then
Application.FindFormat.NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Application.ReplaceFormat.NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
End If
ElseIf cur = "Dirham" Then
'dollar to dirham
If Sheets("Summary").Range("e15").NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ " Then
Application.FindFormat.NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ "
Application.ReplaceFormat.NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)" Then
Application.FindFormat.NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Application.ReplaceFormat.NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
End If
ElseIf cur = "Rand" Then
If Sheets("Summary").Range("e15").NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ " Then
Application.FindFormat.NumberFormat = _
"_-[$$-en-US]* #,##0.00_ ;_-[$$-en-US]* -#,##0.00 ;_-[$$-en-US]* ""-""??_ ;_-@_ "
Application.ReplaceFormat.NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-* #,##0.00 [$€-de-DE]_-;-* #,##0.00 [$€-de-DE]_-;_-* ""-""?? [$€-de-DE]_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-[$£-en-GB]* #,##0.00_-;-[$£-en-GB]* #,##0.00_-;_-[$£-en-GB]* ""-""??_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-" Then
Application.FindFormat.NumberFormat = _
"_-* #,##0.00 [$?.?.?-ar-AE]_-;-* #,##0.00 [$?.?.?-ar-AE]_-;_-* ""-""?? [$?.?.?-ar-AE]_-;_-@_-"
Application.ReplaceFormat.NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
ElseIf Sheets("Summary").Range("e15").NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)" Then
Application.FindFormat.NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Application.ReplaceFormat.NumberFormat = _
"_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
End If
'
'
'
'
End If
End If
【问题讨论】:
-
工作簿有多大?
-
@Underverse 35 张
-
您可以编写一个宏来下载当前的转换表,然后使用它来处理更改并重新格式化。另请查看 Chip Pearson 在VBA arrays and worksheet ranges 上的最新文章,因为在 VBA 数组中进行处理可能比直接处理/形成工作表快一个数量级。如果您在使用这种方法时遇到问题,请编辑您的问题以显示您的代码和问题。
-
到目前为止你尝试过什么?为什么不将这些范围定义为变量并在代码中操作格式?如果您还需要转换值,您也可以更改 cell.Value。您是否熟悉为变量分配范围和操作它们的属性?
-
@Underverse 添加了相关代码,没有运气