Xin code tìm đến ô giao của hàng cuối cùng chứa dữ liệu và cột nằm khoảng gữa của vùng cột chứa dữ liệu (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

motphatlt

Thành viên chính thức
Tham gia
15/8/20
Bài viết
54
Được thích
5
Em xin được nhờ các thầy cô giúp đỡ đoạn code tìm giao nhau của ô:
Ô đó thỏa mãn điều kiện là ô giao nhau của hàng (hàng cuối có chứa dữ liệu tính từ trên xuống) và cột, cột này nằm trong khoảng cột giữa của vùng cột có chứa dữ liệu "áng chừng nằm trong khoảng giữa của vùng cột chứa dữ liệu chứ không nhất thiết là chính xác giữa"
Cụ thể ví dụ như trên hình là ô H21: chạy code tới được luôn ô H21.
Đoạn code này có tác dụng trên một Sheet bất kỳ trong file hiện hành khi chạy code trong sheet hiện hành đó.
Em xin cảm ơn!

vbtr.png
 
Lần chỉnh sửa cuối:
Em xin được nhờ các thầy cô giúp đỡ đoạn code tìm giao nhau của ô:
Ô đó thỏa mãn điều kiện là ô chứa dữ liệu, là giao nhau của cột ( cột cuối cùng tính từ trái sang phải) giao với hàng (hàng cuối cùng tính từ trên xuống).
Cụ thể ví dụ như trên hình là ô N26: chạy code tới được luôn ô N26.
Em xin cảm ơn!
Trường hợp A30 có giá trị là "XYZ" thì kết quả là gì?
 
Trường hợp A30 có giá trị là "XYZ" thì kết quả là gì?
Dạ vâng, sau khi thầy góp ý em đã chỉnh lại yêu cầu ở bài 1, xin được thầy giúp.
Bài đã được tự động gộp:

PHP:
msgbox Sheet1.UsedRange.Address
Em cảm ơn thầy! sau khi thầy befaint góp ý em đã chỉnh lại yêu cầu ở bài #1.
Rất mong được thầy quan tâm và giúp!
 
Bạn có thể dùng code này. Hơi 2 lúa 1 chút

Mã:
Sub adad()
d = Range("d100000").End(xlUp).Row + 1
e = Range("e100000").End(xlUp).Row + 1
f = Range("f100000").End(xlUp).Row + 1
g = Range("g100000").End(xlUp).Row + 1
h = Range("h100000").End(xlUp).Row + 1
i = Range("i100000").End(xlUp).Row + 1
j = Range("j100000").End(xlUp).Row + 1
k = Range("k100000").End(xlUp).Row + 1
l = Range("l100000").End(xlUp).Row + 1
a = Application.Max(d, e, f, g, h, i, j, k, l, 5)
Range("h" & a).Select
End Sub
Cảm ơn bạn!
Mình chạy thì thấy nó luôn nằm ở giao nhau ở ô trong cột H (chưa phải là cột giữa của cột chứa dữ liệu) và chưa nằm trong hàng cuối cùng có dữ liệu.
thao.png
 
Dùng Find với các tham số SearchOrder và SearchDirection phù hợp để xác định các cạnh trái, phải, dưới của vùng chứa dữ liệu sau đó xác định ô cần tìm.
 
Dùng Find với các tham số SearchOrder và SearchDirection phù hợp để xác định các cạnh trái, phải, dưới của vùng chứa dữ liệu sau đó xác định ô cần tìm.
Thầy có thể bớt chút thời gian giúp em với được không ạ?
Em chưa hiểu được và làm như thầy nói, em mới biết excel
Xin cảm ơn thầy.
 
Theo như cái hình ở bài #6 thì bạn muốn kết quả là gì?
Toi không hiểu yêu cầu. Bạn cần cho biết con số mong muốn của bạn, may ra thì tôi đoán được mình có khả năng viết code lấy ra con số ấy chăng.
 
Theo như cái hình ở bài #6 thì bạn muốn kết quả là gì?
Dạ em muốn kết quả nằm ở hàng = hàng cuối cùng có dữ liệu hàng 24
Cột nằm trong vùng cột giữa của vùng cột có dữ liệu = cột L (bao gồm cả cột trống trong vùng )
Ô muốn con trỏ khi chạy code = giao cột L với dòng 24 (ô tô nền xanh)
Mong thầy giúp em với ạ!

muon.png
 
Em xin được nhờ các thầy cô giúp đỡ đoạn code tìm giao nhau của ô:
Ô đó thỏa mãn điều kiện là ô giao nhau của hàng (hàng cuối có chứa dữ liệu tính từ trên xuống) và cột, cột này nằm trong khoảng cột giữa của vùng cột có chứa dữ liệu "áng chừng nằm trong khoảng giữa của vùng cột chứa dữ liệu chứ không nhất thiết là chính xác giữa"
Cụ thể ví dụ như trên hình là ô H21: chạy code tới được luôn ô H21.
Đoạn code này có tác dụng trên một Sheet bất kỳ trong file hiện hành khi chạy code trong sheet hiện hành đó.
Em xin cảm ơn!

View attachment 243414
Thử
dim Rng as range
set rng = Sheet1.UsedRange
rng(rng.rows.count,(rng.columns.count+1)\2).select
 
UsedRange tính cả ô không có dữ liệu nhưng có định dạng và ô đã từng dùng tính từ khi file được lưu.
 
Bạn thử chạy macro này trên trang tính "GPE" có dữ liệu:
PHP:
Sub DongCuoi_CotGiua()
Dim Rng As Range
Dim LastRowCell As Long, LastColCell As Integer

With Sheets("GPE")
    Set Rng = .UsedRange
    LastRowCell = .Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
    MsgBox "Dòng cuôi: " & LastRowCell, , "1"
    LastColCell = .Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
    MsgBox "Côt Cuôi: " & LastColCell, , "2"
    MsgBox "Côt Dâu: " & Rng(1).Column, , "3"
End With
End Sub
 
Bạn thử chạy macro này trên trang tính "GPE" có dữ liệu:
PHP:
Sub DongCuoi_CotGiua()
Dim Rng As Range
Dim LastRowCell As Long, LastColCell As Integer

With Sheets("GPE")
    Set Rng = .UsedRange
    LastRowCell = .Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
    MsgBox "Dòng cuôi: " & LastRowCell, , "1"
    LastColCell = .Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
    MsgBox "Côt Cuôi: " & LastColCell, , "2"
    MsgBox "Côt Dâu: " & Rng(1).Column, , "3"
End With
End Sub
Em cảm ơn thầy.
Em chạy code nó cứ xoay xoay rồi hiện ra mấy bảng thông báo ạ!
thầy sửa giúp em đẻ có tác dụng trên sheet bất kỳ và đến được luôn ô mong muốn mà không cần hiện lên thông báo không ạ?
 
Thông báo thứ nhất là dòng cuối;
Thông báo thứ 2 là cột cuối
Thông báo thứ 3 là cột đầu (Cần thẩm tra lại)

Vậy ô thuộc dòng cuối của cột giữa sẽ phải làm phép tính để tìm cột giữa
1 khi ta có dòng cuối & cột 'giữa' rồi thì xác định ô đó theo tọa độ dòng & cột thôi.

Ví dụ cột cuối là 12 & cột đầu là 3 thì cột giữa sẽ là (? tự tính d8i bạn)
 
Thông báo thứ nhất là dòng cuối;
Thông báo thứ 2 là cột cuối
Thông báo thứ 3 là cột đầu (Cần thẩm tra lại)

Vậy ô thuộc dòng cuối của cột giữa sẽ phải làm phép tính để tìm cột giữa
1 khi ta có dòng cuối & cột 'giữa' rồi thì xác định ô đó theo tọa độ dòng & cột thôi.
Khi chạy code có thể con trỏ chuột đi tới luôn ô đó ạ!
Không cần hiện ra thông báo ạ!
 
Thì vô hiệu hóa những dòng lệnh có lênh MsgBox đi; bằng 1 trong các cách:
Thêm nháy đơn đầu dòng lệnh;
Xóa nguyên dòng lệnh đó đi
. . . .
 
Lúc đó phải là Cells( LastRowCell, (LastColCell + Rng(1).Row)/2).Select
 
Bạn phải xem lại lệnh Msgbox Rng(1).Row đã đúng thực tế chưa. Điều này chỉ có thể xác định trên thực địa mà thôi; Code dùng vô chổ này chưa chắn đúng, như HuuThang đã nêu ở bài trên.
 
Thu
Em xin được nhờ các thầy cô giúp đỡ đoạn code tìm giao nhau của ô:
Ô đó thỏa mãn điều kiện là ô giao nhau của hàng (hàng cuối có chứa dữ liệu tính từ trên xuống) và cột, cột này nằm trong khoảng cột giữa của vùng cột có chứa dữ liệu "áng chừng nằm trong khoảng giữa của vùng cột chứa dữ liệu chứ không nhất thiết là chính xác giữa"
Cụ thể ví dụ như trên hình là ô H21: chạy code tới được luôn ô H21.
Đoạn code này có tác dụng trên một Sheet bất kỳ trong file hiện hành khi chạy code trong sheet hiện hành đó.
Em xin cảm ơn!

View attachment 243414
Thử code này. Hên xui nha
*********
Chú ý là phải xóa cái dòng có dãy số phía trên nha. Xóa hẳn dòng luôn
Mã:
Sub Tim_DongCuoi_CotGiua()

Dim dongdau As Long, sArr(), cotdau As Long, tongsocot As Long
dongdau = ActiveSheet.UsedRange.Row
cotdau = ActiveSheet.UsedRange.Column
sArr = ActiveSheet.UsedRange.Value
tongsocot = UBound(sArr, 2)
If tongsocot Mod 2 <> 0 Then tongsocot = tongsocot + 1
Cells(dongdau + UBound(sArr) - 1, tongsocot / 2 + cotdau - 1).Select
MsgBox Cells(dongdau + UBound(sArr) - 1, tongsocot / 2 + cotdau - 1).Address

End Sub
 
Thu

Thử code này. Hên xui nha
*********
Chú ý là phải xóa cái dòng có dãy số phía trên nha. Xóa hẳn dòng luôn
Mã:
Sub Tim_DongCuoi_CotGiua()

Dim dongdau As Long, sArr(), cotdau As Long, tongsocot As Long
dongdau = ActiveSheet.UsedRange.Row
cotdau = ActiveSheet.UsedRange.Column
sArr = ActiveSheet.UsedRange.Value
tongsocot = UBound(sArr, 2)
If tongsocot Mod 2 <> 0 Then tongsocot = tongsocot + 1
Cells(dongdau + UBound(sArr) - 1, tongsocot / 2 + cotdau - 1).Select
MsgBox Cells(dongdau + UBound(sArr) - 1, tongsocot / 2 + cotdau - 1).Address

End Sub
Em cảm ơn thầy!
Nhờ Thầy xem giúp em xem sao nó đến tận dòng 65536 vậy ạ!

NBV.png
 

File đính kèm

Em cảm ơn thầy!
Nhờ Thầy xem giúp em xem sao nó đến tận dòng 65536 vậy ạ!

View attachment 243434
Phần này bạn phải tự xử lý thôi. Vốn file của bạn nó là vậy mà. Ctrl+End thì nó đã chạy tuốt tới dòng cuối rồi, nên code cũng sẽ tìm đúng dòng đó. Lỗi này mình cũng bị và bó tay với nó. Mình chỉ biết tạo sheet trắng mới rồi copy dữ liệu sang thôi bạn ạ. Hy vọng có ai đó giúp được lỗi này cho mình học luôn. Excel đôi lúc nó điên điên sao ấy. Hức
 
Tìm dòng cuối hay cột cuối có dữ liệu là phải xài phương thức FIND()
Vấn đề còn lại ở đây là ô đầu tiên chứa dữ liệu là khó làm bằng VBA, mà phải xem trang tính trên thực tế mà thôi.
 
Tìm dòng cuối hay cột cuối có dữ liệu là phải xài phương thức FIND()
Vấn đề còn lại ở đây là ô đầu tiên chứa dữ liệu là khó làm bằng VBA, mà phải xem trang tính trên thực tế mà thôi.
Phần này bạn phải tự xử lý thôi. Vốn file của bạn nó là vậy mà. Ctrl+End thì nó đã chạy tuốt tới dòng cuối rồi, nên code cũng sẽ tìm đúng dòng đó. Lỗi này mình cũng bị và bó tay với nó. Mình chỉ biết tạo sheet trắng mới rồi copy dữ liệu sang thôi bạn ạ. Hy vọng có ai đó giúp được lỗi này cho mình học luôn. Excel đôi lúc nó điên điên sao ấy. Hức
Em cảm ơn thầy
 
Bạn dùng code này
Mã:
Sub ABC()
Dim Trai As Range, Phai As Range, Duoi As Range
Set Phai = Cells.Find(what:="*", After:=Cells(1, 1), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, SearchFormat:=False)
If Phai Is Nothing Then
    MsgBox "Sheet nay khong co du lieu"
Else
    Set Duoi = Cells.Find(what:="*", After:=Cells(1, 1), SearchOrder:=xlByRows, SearchDirection:=xlPrevious, SearchFormat:=False)
    Set Trai = Cells.Find(what:="*", After:=Phai, SearchOrder:=xlByColumns, SearchDirection:=xlNext, SearchFormat:=False)
    Cells(Duoi.Row, (Trai.Column + Phai.Column) / 2).Select
End If
End Sub
 
Bạn dùng code này
Mã:
Sub ABC()
Dim Trai As Range, Phai As Range, Duoi As Range
Set Phai = Cells.Find(what:="*", After:=Cells(1, 1), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, SearchFormat:=False)
If Phai Is Nothing Then
    MsgBox "Sheet nay khong co du lieu"
Else
    Set Duoi = Cells.Find(what:="*", After:=Cells(1, 1), SearchOrder:=xlByRows, SearchDirection:=xlPrevious, SearchFormat:=False)
    Set Trai = Cells.Find(what:="*", After:=Phai, SearchOrder:=xlByColumns, SearchDirection:=xlNext, SearchFormat:=False)
    Cells(Duoi.Row, (Trai.Column + Phai.Column) / 2).Select
End If
End Sub
Vâng, em cảm ơn thầy!
 

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

Back
Top Bottom