2016-07-19 6 views
0

Я хотел бы скопировать ячейки из столбцов A, W и G из листа «Пересчитанный FS» на другой рабочий лист под названием «Tempo», если значение ячейки в столбец AI той же строки = «YES».MS-Excel копирует конкретные ячейки, если cell.Value = «Да»

Это код, я использую в настоящее время,

Sub dural() 
    Dim ws As Worksheet 
    Set ws = ThisWorkbook.Sheets.Add(After:= _ 
    ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) 
    ws.Name = "Tempo" 
    For Each Cell In Sheets("Recalculated FS").Range("AI:AI") 
     If Cell.Value = "YES" Then 
      Sheets("Recalculated FS").Range("A:A").Copy Sheets("Tempo").Range("B:B") 
      Sheets("Recalculated FS").Range("W:W").Copy Sheets("Tempo").Range("A:A") 
      Sheets("Recalculated FS").Range("G:G").Copy Sheets("Tempo").Range("C:C") 
     End If 
    Next 
End Sub 

Это не работает. эта картина мне нужна, каждый раз AI = да -> копируем значение столбцов A, G и W enter image description here Помогите пожалуйста.

+0

Где на листе «Темпо» вам нужны ячейки, скопированные? Например. если ячейка AI15 «Пересчитанная FS» является третьей строкой с «YES» в столбце AI, вы хотите «Таблицы» («Пересчитанные FS»). Диапазон («A15: A15») «скопирован в« Таблицы »(« Темп » ") .Range (" B3: B3 ")' или вы хотите скопировать его в «Таблицы» («Темп»). Диапазон («B15: B15») 'или вы хотите, чтобы он полностью копировал какое-то другое место? – YowE3K

+0

Примечание: Я думаю, что большая путаница в ответе на этот вопрос связана с редактированием (кем-то, кроме OP), вопросом, который изменил первое утверждение из «Я хотел бы скопировать ячейки A, W, G из рабочий лист «пересчитанный FS» на другой «Темп», если значение ячейки «AI» = «YES» 'будет« Я хотел бы скопировать ** Столбцы A, W, G ** из листа «Пересчитанные FS» на рабочий лист «Tempo «если ячейка в ** Column AI ** значение =« YES ». Существует большая разница между копированием ячейки и копированием столбца. Я отредактирую его до того, как это было. – YowE3K

ответ

0

1) Вы можете использовать следующую команду, чтобы скопировать столбцы:

Sheets("Recalculated FS").Range("A:A").Copy Sheets("Tempo").Range("B:B") 
Sheets("Recalculated FS").Range("W:W").Copy Sheets("Tempo").Range("A:A") 
Sheets("Recalculated FS").Range("G:G").Copy Sheets("Tempo").Range("C:C") 

Примечание: выше точки теперь не имеет значения, как ОП изменил свой код.

2) Для того, чтобы изменить заголовки в листе «Темпо», вы просто могли бы сказать:

Sheets("Tempo").Range("A1").Value = "Heading for column A" 

т.д.

Примечание: выше точки теперь не имеет значения, как ОП удалила этот вопрос с поста.

3) Ваш цикл For Each Cell In Sheets("Recalculated FS").Range("AI:AI") выполнит содержимое цикла для каждых клеток в колонке AI, что означает, что, если столбец МЫ содержит 10 клеток со значением «Да», три столбца будет скопирован 10 раз (каждый раз копируя точно то же самое точно в одно и то же место). (И он будет проходить через цикл много, много, тысячи раз, глядя на пустые ячейки и решив, что ему ничего не нужно делать, но все же требуется время, чтобы это решить.)

Примечание: вышеуказанная точка по-прежнему актуальна.

+0

спасибо за вашу помощь, мне нужно добавить эти 3 строки в предложение If, когда я это сделаю, он никогда не перестает работать? ваш третий пункт недостаточно справедлив для меня (Foreach), AI - это одна колонка с 120000 строками – BKChedlia

+0

Каждая из трех линий range.copy будет копировать один столбец из листа пересчета FS на лист темпа, чтобы они могли быть размещены внутри ваш оператор IF внутри цикла, но, возможно, это не очень хорошая идея.Если AI содержит 120000 строк, ваш цикл будет поочередно смотреть на каждую из этих 120000 ячеек и решать, содержит ли ячейка значение «ДА». Если 2000 из них содержат «ДА», три столбца будут скопированы 2000 раз, а для других 118000 раз через петлю ничего не будет скопировано. Вы хотите, чтобы столбцы копировались в 2000 раз? Или только один раз? – YowE3K

+0

Я изменил свой код и добавил изображение, чтобы проиллюстрировать мою потребность, загрузку кода и никогда не останавливаться .. – BKChedlia

0

Вот несколько кодов для поиска значения YES.

Затем вы можете скопировать столбцы, если найдено одно ДА.

Sub dural() 

ThisWorkbook.Sheets("Recalculated FS").Select 
Columns("AI:AI").Select 

Set cell = Selection.Find(What:="YES", After:=ActiveCell, LookIn:=xlFormulas, _ 
     LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False) 
'Search the column for a YES value 

If cell Is Nothing Then 
    'Do nothing if YES isn't found 
Else 
    'Copy columns if YES is found 
End If 

     If Len(ActiveSheet.Range("A1").Value) <> 0 Then 
      Sheets("Tempo").Name = ActiveSheet.Range("A1").Value 
     Else 
      'Don't change the name 
     End If 
'Rename the Tempo worksheet based on a cell value 

End Sub 
+0

'ThisWorkbook.Sheets (« Пересчитанный FS ») .Выберите Столбцы («AI: AI»). Выберите Set cell = Selection.Find (Что: = «YES», After: = ActiveCell, LookIn: = xlFormulas, _ LookAt: = xlWhole, SearchOrder: = xlByRows, SearchDirection: = xlNext, _ MatchCase: = False, SearchFormat: = False) 'Искать столбец для значения YES Если клетка ничего после этого ' ничего не делать, если ДА не найден Else Sheets ("пересчитывается FS ») .Range (« A: A »). Копии листов (« Темп »). Диапазон (« B: B ») Таблицы (« Пересчитанные FS »). ge («W: W»). Копии листов («Темп»). Диапазон («A: A») Конец Если «не работает» – BKChedlia