Если вы хотите что-то вроде этого:
.. затем просто поместите это в модуль листа:
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".
(Использование именованных диапазонов позволяет избежать жесткого кодирования ссылок в вашем коде. Если вы жестко закодируете адрес ячейки в своем коде, эти ссылки будут указывать на неправильное место, если вы (или пользователь) позже добавите новые строки / столбцы выше / Слева от этих жестко закодированных ссылок. Использование Имен избегает этого и делает код более надежным.
Я почти никогда адресами ячеек с жестким кодом в моем коде. Я почти всегда использую таблицы Excel или ListObjects для хранения любых данных, с которыми VBA взаимодействует по той же причине ... ListObject - это динамические именованные диапазоны, которые Excel автоматически расширяет / сжимает для соответствия данным.)