Преобразование десятичной дроби в проценты — VBA

#vba

Вопрос:

Я пытаюсь преобразовать число в десятичном формате в моем выборе в проценты, но получаю ошибку несоответствия типов.

Текущий код приведен ниже, где lRow-предопределенное целое число.

 Range("F6:F" amp; lRow).Select
Selection.Value = Selection.Value / 100
Selection.NumberFormat = "0.0%_);(0.0%)"
 

Комментарии:

1. Вы не можете выполнить деление в диапазоне с несколькими ячейками (что, скорее всего, является выбором). Вы должны сделать это для каждой ячейки отдельно, например, в цикле. NumberFormat Можно установить значение в диапазоне.

Ответ №1:

Проблема в том, что здесь:

Selection.Value = Selection.Value / 100

Я предполагаю, что Selection обычно содержит более одной ячейки, и в этом случае .Value возвращает не число, которое можно разделить, а массив, содержащий значение каждой отдельной ячейки. Используйте For Each цикл, чтобы просмотреть набор ячеек в выделении и применить расчет:

 For Each cel In Selection
    cel.Value = cel.Value /100
Next
 

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

 Dim rng As Range
Set rng = Range("F6:F" amp; lRow)
 

а затем используйте rng там , где вы используете в настоящее Selection время, например rng.NumberFormat = ...

Ответ №2:

Один из подходов заключается в использовании PasteSpecial с xlPasteSpecialOperationDivide :

 With Range("F6:F" amp; lRow)
    With Range("F" amp; lRow   1)
        .Value = 100    'put 100 to a helper cell
        .Copy           'put divider into the clipboard
    End With
    .PasteSpecial xlPasteValues, xlPasteSpecialOperationDivide  'divide all the values by divider in the clipboard
    .NumberFormat = "0.0%_);(0.0%)"
End With
Range("F" amp; lRow   1).ClearContents 'clear the helper cell