2014-12-16 6 views
1
 Sheet1       Sheet2 (output) 
     A B C      A B C 
1 Name1 100 May    1 Name1 100 May   
2 Name2 200 June    2 Name2 200 June 
3 Name3  Oct    3 Name3  Oct 
4 Name4 300      4 Name4 300 
5 Name5  

Я хочу создать макрос VBA, который может считывать значения в столбцах B и C. Если любое значение существует из 2, то вытащите эту строку на новый лист или вкладка того же самого. Если столбцы B и C пустые, пропустите эту строку и перейдите к следующей строке. Может ли кто-нибудь помочь мне в этом? Пожалуйста, игнорируйте точки, как они будут добавлены, чтобы исправить формат таблицыVBA Macro для копирования данных на новый лист (вкладка)

+3

Stack Overflow не является кодовым письмом. Пожалуйста, покажите нам код, который вы пробовали, и мы можем помочь вам сгладить проблемы. –

+0

@roryap есть бесплатные услуги написания кода? – Qbik

+0

@ Qbik - Я понятия не имею, я нигде не искал. –

ответ

0

Ниже приведен код с пояснениями в комментариях

Испытано

Sub checkNcopy() 
'Checking the last populated row 
lastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row 

counter = 2 

'Copying the variable Names 
for i=1 to 3 
Worksheets("Sheet2").Cells(1, i) = Worksheets("Sheet1").Cells(1, i) 
Next 

For i = 2 To lastRow 

'Checking if one of the two columns B and C are populated or not 
If Not IsEmpty(Worksheets("Sheet1").Cells(i, 2)) Or Not IsEmpty(Worksheets("Sheet1").Cells(i, 3)) Then 

'If one of the two variables are populated then copying the data from sheet1 to sheet2 
for j=1 to 3 
Worksheets("Sheet2").Cells(counter, j) = Worksheets("Sheet1").Cells(i, j) 
Next 
counter = counter + 1 
End If 

Next 

End Sub 
+0

вы можете использовать метод .CurrentRagion() и метод .Copy() – Qbik

0

Вы можете использовать .CurrentRegion() на активном диапазоне, получить диапазон, который соответствует всей таблице, и .Copy() метод:

Sub CopyData() 

Worksheets("Sheet1").Range("A1").Activate 

ActiveCell.CurrentRegion.AutoFilter Field:=2, Criteria1:="<>" 

ActiveCell.CurrentRegion.AutoFilter Field:=3, Criteria1:="<>" 

ActiveCell.CurrentRegion.Copy Worksheets("Sheet2").Range("A1") 

End Sub 

Немного более правильная, но менее читаемая версия:

Sub CopyDataxxx() 

    Dim TargetRange As Range 

    Worksheets("Sheet1").Activate 
    Range("A1").Activate 

    Set TargetRange = ActiveCell.CurrentRegion 

    With TargetRange 
     .AutoFilter Field:=3, Criteria1:="<>" 
     .Copy Worksheets("Sheet2").Range("A1") 
     .AutoFilter 'switches off AutoFilter 
    End With 

End Sub 
+0

Вам не нужно копировать строки, в которых столбцы B и C пусты – NEOmen

+0

@NEO_mental Нет, он не копирует строки с пустыми ячейками – Qbik

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