引用单元格的自定义 Excel 格式

Custom Excel Formats that reference cells

我想要一个显示自定义格式的 Excel sheet。自定义格式使用另一个单元格的内容。这是一个例子:

Column A : Show a column of numbers in accounting format in the currency of cell(b1).

Cell(B1) : "XYZ"

本意是用户可以输入自己的币种。我知道 Excel 中有格式化工具可以执行此操作,但这是一个基于另一个单元格内容实现自定义格式的问题。这才是真正的问题...

作品中的一个worksheet_changesheet的私密代码sheet可以修改A列的数字格式

private sub worksheet_change (byval target as range)
    if not intersect(target, range("b1")) is nothing then
        if len(cells(1, "b").value2) = 3 then
            dim f as string
            f = ucase(cells(1, "b").value2)
            f = "0 \" & left(f, 1) & "\" & mid(f, 2, 1) & "\" & right(f, 1)
            range(cells(2, "a"), cells(rows.count, "a").end(xlup)).numberformat = f
        end if
    end if
end sub

在不删除以前创建的 cnfs 的情况下,可以添加到现有数字格式的自定义数字格式有最大数量;我觉得大概30左右吧。

假设您想要这样的东西:

..然后将其放入 Sheet 模块:

Sub worksheet_Change(ByVal Target As Range)
Dim sFormat As String

If Not Intersect(Target, Range("NumberFormat")) Is Nothing Then
    sFormat = Chr(34) & Target.Value & Chr(34) & " "
    Range("FormatWhat").NumberFormat = sFormat & "$#,##0;" & sFormat & "[Red]-$#,##0;-"
End If

End Sub

...并在名称框中为 B1 指定名称编号格式:

...并同样命名 A 列的部分或全部 "FormatWhat".

(使用命名范围可避免在代码中对引用进行硬编码。如果将单元格地址硬编码到代码中,如果您(或用户)稍后添加新内容,这些引用将指向错误的位置 rows/columns above/to 那些硬编码引用的左侧。使用名称可以避免这种情况,并使代码更健壮。

几乎从不在我的代码中硬编码单元格地址。我 几乎总是 使用 Excel 表又名 ListObjects 来保存 VBA 出于相同原因与之交互的任何数据...ListObjects 是动态命名范围 Excel 自动 expands/contracts 以适应数据。)