2016-02-03 4 views
0

У меня есть набор данных из одной таблицы в диапазоне листов: H11: BG25. Я хочу запустить немного кода, чтобы посмотреть в каждый столбец, и если сумма этого col> 0, скопируйте весь диапазон для этого столбца. Если сумма равна < 0, ничего не делайте. Пока у меня есть следующий код, но он не копирует диапазон, он копирует только значения, отличные от 0.VBA копия с листа на другой, основанная на условии

Sub CopyActuals() 

For iCol = 8 To 59 
For iRow = 11 To 25 

    With Worksheets("Project - Actual (Hours)").Cells(iRow, iCol) 
    ' Check that cell is not empty. 

     If 'Condition to be if there is any data in the rows 11-25 for each column, then copy the whole column 

     Else 
       Worksheets("Project - Actual (Hours)").Cells(iRow, iCol).Copy 
       Worksheets("Project - Budget (Hours)").Cells(iRow, iCol).PasteSpecial Paste:=xlPasteValues 
       Worksheets("Project - Budget (Hours)").Cells(iRow, iCol).PasteSpecial Paste:=xlPasteFormats 

     End If 

End With 

    Next iRow 
Next iCol 

End Sub 
+0

вы можете проверить на последней строке, которая имеет данные. Если броня больше 25 или 25, сделайте что-нибудь. Последняя строка может быть найдена «lastrow = Activeworkbook.Activesheet.Cells (Activeworkbook.ActiveSheet.Rows.Count,« a »). End (xlUp) .Row« – Kathara

+0

, если вы добавите «Dim Sht1 As Worksheet Sht1 = ActiveWorkbook.Sheets («Sheet1») «тогда вы могли бы заменить« activeworbook.Activeworksheet »на« Sht1 » – Kathara

+0

Спасибо, я думаю, моя проблема в том, что я хочу, чтобы он скопировал весь столбец из строк 11:25 вместо значений, отличных от 0. –

ответ

0
Sub CopyActuals() 
Dim ActlSheet As Worksheet 
Dim BbgtSheet As Worksheet 
Dim rowCount As Integer 
Dim SumValue As Integer 
Dim rng As Range 
Set ActlSheet = ActiveWorkbook.Sheets("Project - Actual (Hours)") 
Set BbgtSheet = ActiveWorkbook.Sheets("Project - Budget (Hours)") 
rowCount = ActlSheet.UsedRange.Rows.Count 
For iCol = 8 To 59 
Set rng = Range(Cells(11, iCol), Cells(rowCount, iCol)) 
SumValue = Application.WorksheetFunction.Sum(rng) 
If (SumValue > 0) Then 
    rng.Select 
    rng.Copy 
    'put your next action 
Else 
    'put your next action 
End If 
Next iCol 

End Sub 
+0

Привет, Шива в его коде, он также определяет диапазон для строк, а также от 11 до 25, надеюсь, что его не хватает :) – Linga

+0

Вы правы :). Я просто подумал, что он будет динамическим, так что даже если будут введены некоторые новые строки, тогда и код должен работать. – Siva

+0

Круто спасибо за обновление :) – Linga

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