Excel宏 - 根据值将单元格从一个工作表复制到另一个工作表

时间:2016-06-13 21:27:36

标签: excel excel-vba macros vba

我想根据一列中的值将单元格中的单元格复制到另一张中。问题是我想复制值而不是公式,但我无法使用Destination命令来处理Pastespecial。到目前为止,我有:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)

Dim i, LastRow

LastRow = Range("A" & Rows.Count).End(xlUp).Row

Sheets("Available").Cells.ClearContents

For Each c In Range("A1:A" & LastRow)

If UCase(c.Offset(0, 1).Value) = "Not Sold" Then

Range("A" & c.Row & ":" & "G" & c.Row).Copy _

Destination:=Sheets("Available").Range("A" & Rows.Count) _

.End(xlUp).Offset(1)

End If

Next c

Target.Offset(1).Select
End Sub

我还想用值复制单元格上方的一些单元格,并将其添加到复制到新工作表的行的右侧。

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

首先让我指出一些我认为不起作用的事情,或者是一个好主意。

每次使用If UCase(c.Offset(0, 1).Value) = "Not Sold"都会失败,因为您要转换为大写然后进行比较。你想要If Ucase(c.Offset(0, 1).Value) = "NOT SOLD"

其次,您将iLastRow设置为Variants,而不是Integers,我认为这是您想要的。技术上不是问题,但我不喜欢未知的变量。你似乎也没有使用i,除非我忽略了什么。

最后,为了准确找到最后一行,我会使用

lastRow = Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).row

这是找到我所知道的最后一行的最可靠方法,实际上是found right here on stack.

现在,对于实际的代码本身,这是我的建议。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean)

    Dim i, LastRow as Integer
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Set ws1 = ActiveSheet
    Set ws2 = Sheets("Available")

    i = 1

    LastRow = ws1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    ws2.Cells.ClearContents

    For Each c In Range(Cells(1,2), Cells(LastRow, 2))
        If UCase(c.Value) = "NOT SOLD" Then
            ws2.Range(ws2.Cells(i, 1), ws2.Cells(i, 7)).Value = ws1.Range( _
                ws1.Cells(c.Row, 1), ws1.Cells(c.Row, 7)).Value
            i = i + 1
        End If
    Next c

    Target.Offset(1).Select 

End Sub
相关问题