Переменная с десятичной дробью преобразуется в 2 цифры при использовании в формуле R1C1 - PullRequest
0 голосов
/ 06 октября 2018

Так что мой вопрос очень прост.В моем коде VBA я получаю 3 значения из 3 ячеек.В приведенном ниже примере Value1 = 110,5; Value2 = 100; Value3 = 120

        Value1 = Worksheets(Countryname).Cells(k, 5).Value
        Value2 = Worksheets(Countryname).Cells(k, 14).Value
        Value3 = Worksheets(Countryname).Cells(k, 23).Value
        Cells(k, 4).Formula = "=MIN(" & Value1 & "," & Value2 & "," & Value3 & ")"

. По неизвестной причине в Excel отображается следующий результат:

=MIN(110;50;100;130), instead of MIN(110,5;100;130)

Проблема заключается в том, что первая переменная преобразуется в 2 переменные (110,5 преобразуется в 110; 5)

У вас есть какое-либо решение этой проблемы?

Спасибо зазаранее за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

VBA может быть ориентированным на нас.Тем более, что ваша формула заключена в кавычки, вы должны использовать системный разделитель списка, который выглядит как ;, а не ,

. Для международно известной версии попробуйте:

sep = Application.International(xlListSeparator)
Cells(k, 4).FormulaLocal = "=MIN(" & Value1 & sep & Value2 & sep & Value3 & ")"
0 голосов
/ 06 октября 2018

Ваш запятая в качестве десятичного заполнителя конфликтует со стандартным разделителем списков EN-US.Используйте .FormulaLocal и напишите формулу так, как она будет отображаться на листе.

dim value1 as string, value2 as string, value3 as string
Value1 = Worksheets(Countryname).Cells(k, 5).text
Value2 = Worksheets(Countryname).Cells(k, 14).text
Value3 = Worksheets(Countryname).Cells(k, 23).text
Cells(k, 4).FormulaLocal = "=MIN(" & Value1 & ";" & Value2 & ";" & Value3 & ")"
'alternate with qualified cell addresses
Cells(k, 4).formula = "=min(" & Worksheets(Countryname).Cells(k, 5).address(external:=true) & "," & _
                                Worksheets(Countryname).Cells(k, 14).address(external:=true) & "," & _
                                Worksheets(Countryname).Cells(k, 23).address(external:=true) & ")"

Глядя на то, как вы используете k , можно легко заключить, что вызапустить цикл, как for k=2 to lastRow.Если это так, то напишите все формулы сразу.

with range(Cells(2, 4), cells(lastRow, 4))
    .formula = "=min(" & Worksheets(Countryname).Cells(2, 5).address(0, 1, external:=true) & "," & _
                                Worksheets(Countryname).Cells(2, 14).address(0, 1, external:=true) & "," & _
                                Worksheets(Countryname).Cells(2, 23).address(0, 1, external:=true) & ")"
end with

Если вы жестко кодируете значения в формуле рабочего листа, вы можете просто записать значение результата в.

Cells(k, 4) = application.min(Worksheets(Countryname).Cells(k, 5).value2, _
                              Worksheets(Countryname).Cells(k, 14).value2, _
                              Worksheets(Countryname).Cells(k, 23).value2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...