Функция формата vba, настраиваемый формат для установки чисел в миллионы с неработающим одним dp

Я использую VBA в Excel 2010 для вывода чисел из таблиц в моей электронной таблице во внешнюю презентацию PowerPoint. Из-за разнообразия задействованных чисел я использую строки настраиваемого форматирования, указанные в таблицах, которые читает макрос, чтобы определить выходной формат следующим образом:

CellData = Format(SourceData,FormattingCode)

Мне удалось заставить это работать с небольшими трудностями для чисел в миллионах (0 ,,) и процентов (0,0%). Однако теперь я хочу делать числа в миллионах, но отображать один десятичный знак, то есть 1,200,000 должен отображаться как 1,2

Код формата для этого обычно (0.0 ,,), который, как я вижу, работает с обычными настройками форматирования ячеек. Однако, когда я передаю это функции форматирования, я получаю число до одного десятичного знака, не округленное без разделителей, таких как 1200000.0.

Есть идеи, почему это так? Я знаю, что функция форматирования немного отличается от пользовательских форматов тем, что по понятным причинам не поддерживает никаких функций выравнивания ячеек, но не понимаю, почему это должно быть по-другому. Кто-нибудь знает, как я могу заставить функцию выводить нужный формат?

Большое спасибо,

Зачем преобразовывать идеальное число в текст, который выглядит как число, вместо того, чтобы применять свойство .NumberFormat к ячейке? Почему не форматировать (значение / 100000, «0,0»)?

user4039065 10.08.2018 16:59

То, что вы ожидаете, мне не кажется задачей форматирования - 1200000 - это не 1,2, так что, может быть, вам сначала нужно разделить на миллион?

Tim Williams 10.08.2018 17:22
0
2
1 734
2

Ответы 2

Функция формата VBA не может обрабатывать эту строку формата. Так:

Sub dural()
    Dim SourceData As Long
    Dim CellData As String
    SourceData = 1200000
    CellData = Format(SourceData, "0.0,,")
    MsgBox CellData
End Sub

создаст неверную строку. Используйте вместо этого:

Sub dural2()
    Dim SourceData As Long, D As Double
    Dim CellData As String

    SourceData = 1200000
    D = SourceData / 1000000
    CellData = Format(D, "0.0")

    MsgBox CellData
End Sub

enter image description here

РЕДАКТИРОВАТЬ №1:

Используйте ячейку. Обработайте это численно. Отформатируйте это. Преобразовать в строку:

Sub dural3()
    Dim SourceData As Long, D As Double
    Dim CellData As String, r As Range
    Set r = Range("A1")
    SourceData = 1200000
    D = SourceData / 1000000

    With r
        .Clear
        .Value = D
        .NumberFormat = "0.0"
        .Value = .Text         'convert to text
        CellData = .Value
    End With
    MsgBox CellData
End Sub

enter image description here

Это было то, чего я боялся - я надеялся, что будет способ, которым моему VBA не нужно будет знать, с какими форматами он имеет дело, путем кодирования данных в строке формата (таким образом, одна функция могла бы охватить все случаи ). Вы уверены, что другого выхода не было бы?

DrColossus 10.08.2018 17:46

@DrColossus ДА ............... Я обновлю свой пост через некоторое время.

Gary's Student 10.08.2018 17:57

@DrColossus Смотри мой РЕДАКТИРОВАТЬ # 1

Gary's Student 10.08.2018 18:11

#,0,,.0

Это работает в функции format() в SSRS RDL. Моя настоящая полная прелесть [#,0,,.0M;(#,0,,.0M);'']

Другие вопросы по теме