Конвертировать несколько выбранных диапазонов в число - PullRequest
0 голосов
/ 02 мая 2020

У меня есть данные из более чем 70000 строк и 5 или более столбцов, которые имеют числа в формате TEXT, и для преобразования этих чисел я использую следующий код:

'LastRow
  vLastRow= Cells(Rows.Count, ActiveCell.Column).End(xlUP).row

'Select
  Range(Cells(Selection.row, ActiveCell.column),Cells(vLastRow, ActiveCell.column).Select
       With Selection
            .NumberFormat="#,##0.00_);(#,##0.00)"
            .value=.value
            .HorizontalAlignment=xlRight
       End With
Active.Select

Когда я выбираю 1 столбец, работал нормально, но когда я выбираю несколько столбцов, нажимая Ctrl и нажимая, чтобы указать c столбцы, код перестает работать.

Кроме того, я не могу указать c ячейку и столбцы, потому что это не stati c.

1 Ответ

0 голосов
/ 02 мая 2020

Ваш код на правильном пути. Есть несколько способов добиться этого с минимальными изменениями.

Используйте InputBox для запроса на переформатирование диапазона.

В этом решении я установил Default Value для поля ввода в качестве адреса для выбранных ячеек, что означает Вы можете выбрать диапазон, который вы хотите переформатировать (как вы пытаетесь сделать), а затем активировать свой код для автоматического заполнения выбранного диапазона:

Sub ConvertDynamicRangeToNumber()
Dim UserRange As String

UserRange = InputBox("Enter the start and end of your range (e.g. A1:C10):", "Enter your range", Selection.Address(False, False))

With Sheet1.Range(UserRange)
    .NumberFormat = "#,##0.00_);(#,##0.00)"
    .Value = .Value
    .HorizontalAlignment = xlRight
End With

End Sub

Использовать выбранный диапазон

Если вы предпочитаете пропустить InputBox и просто основывать его на выбранных ячейках, вы можете просто Set UserRange = Selection.Address, но это означает , если выбраны неправильные ячейки и вы выполняете свой код, отмена и у вас может оказаться больше работы, чем вы начали!

Чтобы избежать этого, добавьте MsgBox, чтобы разрешить прерывание в случае ошибки.

Sub ConvertDynamicRangeToNumber1()
Dim UserRange As String
Dim Confirmation As String

UserRange = Selection.Address(False, False)

Confirmation = MsgBox("You have selected the range " & UserRange & " ." & vbNewLine & _
vbNewLine & "Is this correct?", vbYesNo + vbCritical, "Are you sure?")

If Confirmation = vbYes Then
    With Sheet1.Range(UserRange)
        .NumberFormat = "#,##0.00_);(#,##0.00)"
        .Value = .Value
        .HorizontalAlignment = xlRight
    End With
Else
    Exit Sub
End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...