我正在尝试将VBA放在一起搜索特定的单元格格式,然后更改该单元格格式。我从这篇文章(Excel VBA value remains string format after replacment)中获得了灵感,并希望从这篇文章中得到更多信息(Excel VBA - add a custom number format)但是不能做到这一点。
我想要替换的单元格格式是格式化的一般,有以下6种类型:
我想用正确的数字格式替换它们("< 0","< 0.0"等)并删除文字符号"< ;"这样它们就显示为"< 0"但存储为数字以供计算使用。
到目前为止我的方法是VBA替换功能。对于给定的范围,我一直尝试为6种不同的格式运行6种不同的替换,然后删除"<"的所有文本符号,但我仍然坚持用它自己的值替换单元格值:当前所有单元格都替换为相同的值(范围中第一个单元格的值)。
到目前为止我开发的代码是:
Private Sub CommandButton6_Click()
Dim range1 As Range
With ActiveWorkbook.Worksheets("Sheet1")
Set range1 = .[B2:B7]
End With
For Each cell In range1.Cells
Dim Original0value As String
Original0value = cell.Value
Application.findformat.NumberFormat = "General"
Application.ReplaceFormat.NumberFormat = "< 0"
With range1
.Replace What:="< ?", Replacement:=Original0value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchFormat:=True, ReplaceFormat:=True
End With
Next cell
For Each cell In range1.Cells
Dim Original1value As String
Original1value = cell.Value
Application.findformat.NumberFormat = "General"
Application.ReplaceFormat.NumberFormat = "< 0.0"
With range1
.Replace What:="< ???", Replacement:=Original1value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchFormat:=True, ReplaceFormat:=True
End With
Next cell
For Each cell In range1.Cells
Dim Original2value As String
Original2value = cell.Value
Application.findformat.NumberFormat = "General"
Application.ReplaceFormat.NumberFormat = "< 0.00"
With range1
.Replace What:="< ????", Replacement:=Original2value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchFormat:=True, ReplaceFormat:=True
End With
Next cell
' et cetera - I have only include the first 3 blocks of a possible 6
Cells.Replace What:="<", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
这给了我结果:
即,前3个项目格式正确但值已全部更改为0.正如我正在使用&#34; cell.Value&#34;在每个街区,我怀疑这是我的问题的根源,但无法弄明白。任何人都可以对此有所了解吗?
答案 0 :(得分:1)
您可以在自定义Range.NumberFormat property中拥有两个条件和一个默认值。您需要使用#符号来允许其他小数位的可能性。使用自定义数字格式
With ActiveWorkbook.Worksheets("Sheet1")
.range("B2:B7").NumberFormat = "[>1]< 0;[>0]< 0.0####; 0; @"
'maybe that should have been
'.range("B2:B7").NumberFormat = "[>1]< 0;[>0]< 0.0####;< 0; @"
End With
B2:B7中的值应仅为数字;请勿键入&lt; 符号。
答案 1 :(得分:0)
由于Vincent G的帮助,以前的问题已经解决了。
然而,在扩展这个问题时,我遇到了另一个问题:对于需要重新格式化的多个单元格实例,VBA的工作方式与自定义格式相同&#34;&lt; 0.0&#34;通过&#34;&lt; 0.00000&#34;,但由于某种原因,它为&#34;&lt; 0&#34;的第一个实例复制了相同的值。它会遇到此格式的所有其他实例。
描述有点痛苦,请查看my example spreadsheet on Dropbox:表格包含测试数据,VBA和问题描述。
干杯, 基督教