繁体   English   中英

Excel宏-根据值将单元格从一张纸复制到另一张纸

[英]Excel Macro - copy cells from one sheet into another based on value

我想根据一个列中的值将单元格从一张工作表复制到另一张工作表中。 问题是我想复制值而不是公式,但是我无法使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

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

任何帮助将非常感激。

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

If UCase(c.Offset(0, 1).Value) = "Not Sold"使用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

这是查找我知道的最后一行的最可靠方法,并且实际上是在堆栈中找到的。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM