Helpex - Trao đổi & giúp đỡ Đăng nhập
3

Tôi có một macro sao chép chính xác dữ liệu của một trang tính sang một trang tính khác.

Sub QuickViewRegMgmt()

    ("Reg Management").Select
    Cells.Select
    Selection.Copy
    Sheets("Quick View Reg Mgmt").Select
    Cells.Select
    ActiveSheet.Paste

End Sub

Tôi muốn macro này cũng đi đến ô không trống cuối cùng trong Cột C (hoặc ô trống đầu tiên, tôi thực sự không quan tâm theo cách nào cả). Tôi đã thử mã kết thúc / bù đắp đơn giản, ví dụ:

Range("A1").End(xldown).Offset(1,0).Select 

Tuy nhiên, vấn đề của tôi là macro sao chép trực tiếp cũng sao chép các công thức cơ bản, đối với Cột C là một công thức IF. Do đó, không có ô nào trong cột thực sự trống, mà đúng hơn là tất cả chúng đều có công thức IF dẫn đến giá trị true / false (tương ứng là "" hoặc VLOOKUP).

=IF(VLOOKUP('Reg Management'!$Y260,'Reg Guidance'!$A:$V,3,FALSE)=0,"",VLOOKUP('Reg Management'!$Y260,'Reg Guidance'!$A:$V,3,FALSE))

Điều đó có nghĩa là mã kết thúc / bù đắp chuyển đến ô cuối cùng trong cột có công thức (C1000) thay vì chuyển đến ô đầu tiên có giá trị là "" (hiện là C260).

Tôi có thể thêm mã nào vào macro này để chọn ô đầu tiên chứa công thức IF dẫn đến giá trị là "" ---- có dạng là ô trống?

3 hữu ích 5 bình luận 1.7k xem chia sẻ
0

Sau khi cố gắng trở nên ưa thích SpecialCells(), hoặc sử dụng Find()hoặc thứ gì đó mà tôi không thể hiểu được ... vì vậy đây là một cách khá "bẩn" để làm điều đó:

Sub test()
Dim lastRow As Long, lastFormulaRow As Long
lastRow = Range("A" & Rows.Count).End(xlUp).Row

Dim i As Long
For i = lastRow To 1 Step -1
    If Cells(i, 1).Formula <> "" And Cells(i, 1).Value = "" Then
        lastFormulaRow = i
        Exit For
    End If
Next i

End Sub

Edit2: Đây là một cách sử dụng .SpecialCells(). Tôi nghĩ rằng chúng ta có thể giảm bớt điều này nhiều hơn, tôi thích nó hơn:

Sub lastRow()
Dim tempLastRow As Long
tempLastRow = Range("C" & Rows.Count).End(xlUp).Row 

Dim lastRow As Range
Set lastRow = Columns(3).SpecialCells(xlCellTypeFormulas).Find(What:="", LookIn:=xlValues, LookAt:=xlWhole, searchdirection:=xlPrevious, after:=Range("C" & tempLastRow))
Debug.Print lastRow.Row
End Sub

Ô trống (“”) đầu tiên trong cột có công thức IF

Nó trả về 10dưới dạng hàng.

Chỉnh sửa: Đảm bảo thêm các tham chiếu trang tính trước Range()Cells()để lấy hàng cuối cùng. Nếu không, nó sẽ xem xét trang hoạt động của bạn để lấy thông tin.

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ vba excel nonblank , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading