自定义Excel格式引用单元格

时间:2018-04-30 22:02:56

标签: excel formats

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

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

Cell(B1) : "XYZ"

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

2 个答案:

答案 0 :(得分:2)

工作表的私人代码表中的worksheet_change可以改变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左右。

答案 1 :(得分:1)

假设你想要这样的东西:

enter image description here

enter image description here

..然后把它放在图纸模块中:

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命名NumberFormat:

enter image description here

...并且同样命名列A“FormatWhat”的部分或全部。

(使用命名范围可以避免代码中的硬编码引用。如果您将单元格地址硬编码到代码中,如果您(或用户)稍后在上面添加新行/列,则这些引用将指向错误的位置在那些硬编码引用的左侧。使用Names可以避免这种情况,并且可以提供更强大的代码。

几乎从不在我的代码中硬编码单元格地址。我几乎总是使用Excel Tables aka ListObjects来保存VBA与之相互作用的任何数据,原因相同...... ListObjects是Excel自动扩展/收缩以适应数据的动态命名范围。)