EXCEL VBA:根据值范围格式化现有数字单元格
Posted
技术标签:
【中文标题】EXCEL VBA:根据值范围格式化现有数字单元格【英文标题】:EXCEL VBA: Format existing numeric cells based on value range 【发布时间】:2018-08-10 16:42:37 【问题描述】:我正在尝试在某些列(例如:M、N、U、V...)上运行 VBA,以根据它们的范围设置值的格式。
我目前有:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("U:W")) Is Nothing Then
If Target.Value < -1000000 Then
Target.NumberFormat = "#,###.0,, ""M"""
ElseIf Target.Value <= -1000 Then
Target.NumberFormat = "#,###.0, ""K"""
ElseIf Target.Value < 1000 Then
Target.NumberFormat = "### """""
ElseIf Target.Value < 1000000 Then
Target.NumberFormat = "#,###.0, ""K"""
ElseIf Target.Value < 1000000000 Then
Target.NumberFormat = "#,###.0,, ""M"""
ElseIf Target.Value < 1000000000000# Then
Target.NumberFormat = "#,###.0,,, ""B"""
End If
End If
End Sub
很遗憾,这不适用于已输入的值。但是,如果我单击每个单元格然后按回车键,则格式正确。
问题:我将如何格式化已经存在的值?
谢谢
【问题讨论】:
【参考方案1】:看起来Target
只是改变的范围:
https://msdn.microsoft.com/en-us/vba/excel-vba/articles/worksheet-change-event-excel
您可能必须编写一个循环遍历其他数据的子程序,或者只需“编辑”一次单元格,然后宏将继续工作。
编辑:
如何遍历列并调用你的函数?:
Sub OneTimeLoop()
Dim rng as Range, cell as Range
set rng = Range("U:V")
For Each cell in rng
Worksheet_Change cell
Next cell
End Sub
【讨论】:
有没有办法在每个单元格中放置一个“硬返回”,以便当前宏运行?或者,它有更好的工作方式?我在工作表中有很多值。 @ETedford 我添加了一个子程序,它将为列中的每个单元格调用您的函数。 警告它需要很长时间才能运行,所以你只需要运行一次,可能会限制更多的范围。即Range("U1:V1000")
【参考方案2】:
我认为,您需要Precedents
属性,它将检索当前单元格所依赖的所有单元格。
说,你有:
-
在 A1 单元格中:1
在 A2 单元格中:=A1+1
那么下面的代码就会显示$A$1
:
Sub F()
MsgBox Range("A2").Precedents(1).Address
End Sub
【讨论】:
以上是关于EXCEL VBA:根据值范围格式化现有数字单元格的主要内容,如果未能解决你的问题,请参考以下文章
EXCEL VBA - 根据单元格范围和字符串创建动态下拉列表[关闭]
excel用vba自动提取某个ini文件中的数字到制定单元格