Giải pháp thay thế thuộc tính End khi bị ẩn (dòng/cột)

  • Thread starter Thread starter chibi
  • Ngày gửi Ngày gửi
Liên hệ QC

chibi

Thành viên tích cực
Thành viên danh dự
Tham gia
10/1/07
Bài viết
1,120
Được thích
623
Chào các anh, chị trên diễn đàn.
Chỉ có vùng [A1:A4] có dữ liệu, khi đó
Mã:
[A5].End(xlUp).Row
sẽ cho kết quả là 4
Khi dòng 4 bị ẩn thì kết quả sẽ trả về là 3.
Xin hỏi giải pháp thay thế để dù ẩn hay không vẫn trả về kết quả là 4.
Cảm ơn.
 
Anh dùng Find và quét ngược để lấy dòng cuối
PHP:
[A1].Resize(1000).Find("*", , , , , 2).Row
ví dụ tets:
PHP:
Sub Macro1()
tmp = [A1].Resize(1000).Find("*", , , , , 2).Row
MsgBox tmp
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn ngâm cứu cái ni & mình mình chưa biết gì nhiều hơn cách cũ chuối này!

PHP:
Sub ValueInHiddenRanges()
 Dim Cls As Range, Rng As Range:       Const Pi As Double = 10.25
 
 Set Rng = Range("A1:A4")
 For Each Cls In Rng
   If Cls.RowHeight = 0 Then
      Cls.EntireRow.RowHeight = Pi
      MsgBox Cls.Value, , Cls.EntireRow.RowHeight
   End If
 Next Cls
 
 MsgBox [A65500].End(xlUp).Row, , "Last Row"
 
 For Each Cls In Rng
   If Cls.RowHeight = Pi Then
      MsgBox Cls.Value, , "?"
      Cls.EntireRow.RowHeight = 0
   End If
 Next Cls
End Sub
 
Upvote 0
Xin lỗi, chỉnh lại câu hỏi một chút.
Ý tôi không muốn hỏi lấy dòng cuối cùng có dữ liệu trong cột A mà muốn lấy dòng gần nhất có dữ liệu tính từ dòng 5 lên phía trên (Cột A) dù dòng đó ẩn hay hiện.
Xin cảm ơn.
 
Upvote 0
Ý tôi muốn hỏi: lấy dòng gần nhất có dữ liệu tính từ dòng 5 lên phía trên (Cột A) dù dòng đó ẩn hay hiện. .

Thì bạn tạo vòng lặp duyệt trong cột 'A' từ dòng 5 lên trên;

Ở mỗi công đoạn ta xét chiều cao của ô; Nếu nó =0 thì ta gán nó bằng 1 hằng số nào đó như 9 chẳng hạn & tra khảo xem ô 'Ai' đó có dữ liệu hay không;
Nếu nó khai là có thì ta đạt nguyện vọng;
Sau khi đạt nguyện vọng, ta trả lại hiện trạng của CSDL nếu cần (Cho độ cao dòng í về 0 lại)

(Đây là cách dựa trên format mặc định của các dòng ẩn thì độ cao =0; mà đã độ cao =0 thì value dù có cũng như không.)
 
Upvote 0
Tạm thời dùng cái này vậy
Mã:
Option Explicit
Function End1(cR As Integer, Optional Num = 0)
    Do
        cR = cR + IIf(Num = 0, -1, 1)
    Loop While Len(Trim(Range("A" & cR).Value)) = 0
    End1 = cR
End Function
cR - Tính từ dòng
Num=0 - Lên trên, Num<>0 - Xuống dưới.
 
Upvote 0
Tạm thời dùng cái này vậy
Mã:
Option Explicit
Function End1(cR As Integer, Optional Num = 0)
    Do
        cR = cR + IIf(Num = 0, -1, 1)
    Loop While Len(Trim(Range("A" & cR).Value)) = 0
    End1 = cR
End Function
cR - Tính từ dòng
Num=0 - Lên trên, Num<>0 - Xuống dưới.
Sao bạn không dùng Find nhỉ? Như thế này này. Khỏi dùng vòng lặp.
PHP:
Function EndRow(Rng As Range)
Dim EndCll As Range
Set EndCll = Rng.Find("*", , , , , 2)
EndRow = 1
If EndCll Is Nothing Then Exit Function
EndRow = EndCll.Row
End Function
 
Upvote 0
Xét trên cột A, với một ô cụ thể, tôi muốn tìm dòng gần ô đó nhất có dữ liệu dù dòng đó hiện hay ẩn. Với code trên chưa đáp ứng được.
Bạn muốn tìm trong trường hợp hide dòng hay là trong trường hợp dùng AutoFilter? Nếu AutoFilter thì Find không tìm thấy còn ẩn dòng thì vẫn dùng Find được.
 
Upvote 0
Bạn dùng thử code này thử xem sao.
Mã:
Function EndRow(iRow As Long) As Long
    Dim sTemp As String
    sTemp = Join(WorksheetFunction.Transpose(Range("A1:A" & iRow)), vbBack)
    sTemp = Replace(Replace(sTemp, " ", "@"), vbBack, " ")
    EndRow = iRow - (Len(sTemp) - Len(RTrim(sTemp)))
End Function
 
Upvote 0
Dùng SpecialCells xem. Có điều là ko dùng cho Function được.
PHP:
Sub Test()
Dim T As Boolean
T = InputBox("Nhap kieu tim kiem:" & vbNewLine & "(Tu duoi len = 0; Tu tren xuong = 1)")
On Error GoTo NotFount
With Range(ActiveCell, Cells(1 - T * (Cells.Rows.Count - 1), ActiveCell.Column)).SpecialCells(xlCellTypeConstants, 23)
    If T = 0 Then
        MsgBox .Areas(.Areas.Count).Row + .Areas(.Areas.Count).Rows.Count - 1
    Else
        MsgBox .Areas(1).Row
    End If
End With
Exit Sub
NotFount:
MsgBox 1 - T * (Cells.Rows.Count - 1)
End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom