如果cell.Value =“是”,则MS-Excel复制特定单元格

时间:2016-07-19 08:21:07

标签: excel-vba copy-paste worksheet vba excel

如果同一行的AI列中的单元格值=“YES”,我想将工作表“Recalculated FS”中的A,W和G列中的单元格复制到另一个名为“Tempo”的工作表。

这是我现在使用的代码,

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 请帮助。

2 个答案:

答案 0 :(得分: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")

注意:由于OP已更改其代码,上述内容现在无关紧要。

2)要更改“速度”表格中的标题,您可以说:

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

注意:上述观点现在无关紧要,因为OP已从他的帖子中删除了这个问题。

3)您的For Each Cell In Sheets("Recalculated FS").Range("AI:AI")循环将执行AI列中每个单元格循环的内容,这意味着,如果列AI包含10个单元格,其值为“是”,三列将被复制10次(每次复制完全相同的东西到完全相同的地方)。 (并且它将经历许多次,数次次查看空单元并确定它不需要做任何事情 - 但仍需要时间来决定它。)

注意:以上几点仍然相关。

答案 1 :(得分:0)

以下是一些搜索YES值的代码。

如果找到一个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