我试图在某些列(例如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
不幸的是,这不适用于已经输入的值。但是,如果我单击每个单元格,然后按回车键(如果格式正确)。
问题:如何格式化已经存在的值?
谢谢
答案 0 :(得分:0)
看起来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
答案 1 :(得分:0)
我认为,您需要Precedents
属性,该属性将检索当前单元格所依赖的所有单元格。
说,你有
然后下面的代码将显示$A$1
:
Sub F()
MsgBox Range("A2").Precedents(1).Address
End Sub