2016-07-04 3 views
1

Я новичок в Excel VBA и не испытываю большого опыта. У меня есть два листа данных, которые я сравниваю, а затем, если значение соответствует мне, я копирую и вставляю его во второй рабочий лист. Я использую для циклов, чтобы сравнить каждую строку и задавался вопросом, есть ли лучший способ сделать это? В настоящее время я использую грубую силу и надеялся, что будет так, что моя программа не будет работать очень долго. (Я повторяю этот блок кода на разных листах 13 раз). По сути, этот код объединяет информацию, если она соответствует определенным условиям. Ниже мой код.Как циклы сравнения рефакторинга в моем коде excel vba для скорости?

Sub consolidate(z) 
     Sheets(z).Range("B1:AXH100").Delete '''deletes former values''' 
     For i = 1 To 30 
     For x = 1 To 500 
     If IsEmpty(Sheets("Sheet1").Cells(x, 13)) Then 'if cell value is empty skip it' 
      a = 1 
     Else: 
      If Sheets("Sheet1").Cells(x, 18) = Sheets(z).Cells(1, 1) Then 'check to see if value is same' 
      If Sheets("Sheet1").Cells(x, 13) = Sheets(z).Cells(i, 1) Then 'check to see if value is same' 
       Sheets("Sheet1").Cells(x, 15).Copy 'copy value' 
       Sheets(z).Select 'select second sheet' 
       Cells(i, 1).Select 
       ActiveSheet.Cells(ActiveCell.Row, Columns.Count).End(xlToLeft).Offset(0, 1).Select 'offsets cell to the 
    left' 
       Selection.PasteSpecial past:=xlPasteValues 'pastes' 
     End Sub 
+1

Где бы вы ни старались, вы должны стараться избегать использования ячеек, поскольку это приводит к обновлению экрана, что происходит медленно. Вы можете попробовать поставить Application.ScreenUpdating = False в начале, чтобы убедиться, что это улучшает его. Здесь альтернативы для выбора задаются как [link] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) – Clusks

+2

Код кажется неполным (отсутствует 'Next 's abd' End If's ') Вы также можете избежать использования' Copy' и просто ввести значения непосредственно, как в 'targetRange.Value = sourceRange.Value'. – arcadeprecinct

ответ

0

Как я ответил here, если вам нужно получить доступ или изменить несколько ячеек, вы гораздо лучше читать клетки в массив, работая непосредственно с массивом (ами) и отправить результаты обратно в Excel как только вы закончите. Это немного больше работы, и обработка массивов Excel не самая лучшая, но по скорости нет никакого сравнения.

This article подробно объясняет процесс.