簡體   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