EXCEL VBA:根据值范围设置现有数字单元格的格式

时间:2018-08-10 16:42:37

标签: excel vba number-formatting

我试图在某些列(例如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

不幸的是,这不适用于已经输入的值。但是,如果我单击每个单元格,然后按回车键(如果格式正确)。

问题:如何格式化已经存在的值?

谢谢

2 个答案:

答案 0 :(得分:0)

看起来Target只是变化的范围: enter image description here 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属性,该属性将检索当前单元格所依赖的所有单元格。

说,你有

  1. 在A1单元格中: 1
  2. 在A2单元格中: = A1 + 1

然后下面的代码将显示$A$1

Sub F()
    MsgBox Range("A2").Precedents(1).Address
End Sub