Использование макроса «Текст в столбцы» для нескольких столбцов - PullRequest
0 голосов
/ 15 октября 2019

enter image description here

На этом рисунке показано начальное состояние столбцов в формате Великобритании. #value, если я пытаюсь добавить 1 к нему, False, если я запускаю ISNUMBER(), и True, если я использую текст в столбце при вводе, чтобы поменять местами точку и запятую. Оказавшись в истинном состоянии, я могу использовать цифры, но для некоторых это истинное состояние не достигается. Вместо этого они приводят к обработке ошибок, конвертируемой в число, которое появляется.

Я использовал записывающее устройство для записи процедуры преобразования текста в столбцы в одном столбце. Он выдает следующее:

Range(Range("J2"), Range("J2").End(xlDown)).Select
Selection.TextToColumns Destination:=Range("J2"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True

У меня есть примерно 60 столбцов, к которым нужно применить, и мое текущее решение состоит в том, чтобы иметь 60 записей этого блока кода с различными ссылками на ячейки, что в итоге работает очень медленно.

  • Есть ли способ применить это к нескольким столбцам?
  • Есть ли какой-нибудь код, который я могу удалить из этого блока, чтобы он работал быстрее?

Я не мог найти ответы при поиске.

1 Ответ

0 голосов
/ 15 октября 2019

Хотя использование selection не идеально, есть способы использовать Selection для поддержки более эффективного зацикливания столбцов на .texttocolumns.

Обратите внимание, что у меня нет никаких дополнительных аргументов в texttocolumns, что может или не может быть проблемой для вас в зависимости от вашего использования.

Private Sub TTC()
    If Selection.Count = 1 Then
        Selection.TextToColumns
    Else
        Dim sr As Long, sc As Long, er As Long, ec As Long, col As Long
        sr = Selection.Row 'start row
        sc = Selection.Column 'start column
        er = Selection.Rows.Count + sr - 1 'end row
        ec = Selection.Columns.Count + sc - 1 'end column
        For col = sc To ec
            Range(Cells(sr, col), Cells(er, col)).TextToColumns
        Next col
    End If
End Sub

В приведенном выше выборе используется для определения переменных, которые затем являются определенными диапазонами для циклического прохождения и применения texttocolumns.

Дополнительное примечание, я не настроил это, чтобы пропустить столбцы, например, не будет работать для несмежных диапазонов;это будет работать для смежных диапазонов в нескольких строках / столбцах.


С точки зрения ускорения процесса вы можете использовать выключение screenupdating, calculation и displayalerts довыполнение.

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