2013-09-23 10 views
-1

Я написал очень простой макрос в Excel для удаления некоторого лишнего текста. вот код:Разочаровывает производительность VBA

Sub remove_excess_names_from_part_number() 
    Dim i As Integer 
    Application.ScreenUpdating = False 
    For i = 1 To 1000 
     Cells(i, 3).Value = Left(Cells(i, 3).Value, 10) 
    Next i 
    Application.ScreenUpdating = True 
End Sub 

Я не могу видеть, как это может получить любой проще, и все же я разочарован плохой работы этого фрагмента кода. Не делает ли VBA некоторые оптимизации для простого кода?

+2

Взаимодействие с электронной таблицей, как известно, медленное: загружать данные за один раз, манипулировать им и возвращать его обратно таблицу сразу. – assylias

ответ

3

Try ниже код:

Колонка C является результатом колонки и данные в колонке А

Sub remove_excess_names_from_part_number() 
    Application.ScreenUpdating = False 

    Dim lastRow As Long 
    lastRow = Range("A" & Rows.Count).End(xlUp).Row 
    Range("C1:C" & lastRow).FormulaR1C1 = "=Left(RC[-2],10)" 
    Application.ScreenUpdating = True 
End Sub 
+0

+ 1 Хорошая идея :) –

+0

Wow, намного быстрее! Спасибо за быстрый ответ! –

3

Вам действительно нужно VBA для этого? Если вы хотите, вы можете использовать текст в Excel в столбцы

Допустим, данные, как это в Excel

enter image description here

  1. Выберите столбец и нажмите на данных | Text To Столбцы
  2. Выбор Fixed Width на шаге 1 из 3
  3. Установите длину в шаге 2 3. Если вы видите ниже, я поставил его на 10
  4. Нажмите кнопку Готово, и вы сделали.

enter image description here

Примечание: Если 10-й символ является SPACE, то она будет урезана, как в строке 2

enter image description here

Если вы все еще хотите решение VBA, то я бы рекомендуем загрузить весь массив в массиве в качестве предлагаемого @assylias, а затем вернуть его после выполнения вычислений.

@Santosh также дал вам предложение, когда вы можете ввести формулу за один проход ко всем ячейкам. Если вам доступен вариант Non VBA, вы можете ввести формулу в ячейке вручную и сделать автозаполнение также :)

+0

Интересное решение, о котором я не знал. Благодарю. Я проверю, какое решение окажется более практичным для моих нужд. –

+1

Если вы открыты для решения Non VBA Solution, введите формулу в электронной таблице непосредственно для нескольких тысяч строк, и сделать автозаполнение является лучшим вариантом. Если у вас очень большие данные, то «Текст в столбцы» окажется быстрее по сравнению с формулой или кодом VBA. –

+0

+1 хорошее не-кодовое решение – brettdj

Смежные вопросы