#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