Có lẽ là quá ít dữ liệuYêu cầu có trong file mong các bạn giúp đỡ cám ơn các bạn nhiều.

VD file bài 1, mình cho chung vào 1 cộtCó lẽ là quá ít dữ liệu




Tốn công tải cả 2 file từ 2 bài về. Bạn đánh giá quá cao về người trả lời bài rồi. Không phải ai cũng đủ thông minh để hiểu. Chẳng hạn như mình. Xem bài 1 thì đoán đoán được là tìm dữ liệu và trả về dòng trên và dòng dưới. Xem tới file bài 2 thì ngu người luôn. 2 file chả ăn nhập gì với nhau.VD file bài 1, mình cho chung vào 1 cột
Flie bài này thì dữ liệu nằm 2 cột (B và C), có thể dựa vào file này để làm cho bài 1 được chứ bạn.
mong muốn của mình là vậy cám ơn
Thay đổi dữ liệu, không thấy kết quả giả định mới thì làm sao giờ?VD file bài 1, mình cho chung vào 1 cột
Flie bài này thì dữ liệu nằm 2 cột (B và C), có thể dựa vào file này để làm cho bài 1 được chứ bạn.
mong muốn của mình là vậy cám ơn




Vậy là mình cũng có đồng minh rồi, cũng kém thông minh như mình. Cốc hiểu người ấy muốn gì.Thay đổi dữ liệu, không thấy kết quả giả định mới thì làm sao giờ?
Vậy là mình cũng có đồng minh rồi, cũng kém thông minh như mình. Cốc hiểu người ấy muốn gì.




Em đón mò thử xem sao.
Đây chỉ là 1 ví dụ giả định, em biết chắc chủ topic muốn áp dụng cho một trường hợp cũ thể hơn. Trong file 2 có lẽ bạn ấy muốn lấy cận trên và cận dưới, tuy nhiên khác với file 1 là căn cứ để lấy cận trên và cận dưới thì cùng 1 cột nhưng đúng ra là file 2 nó nằm ở hai côt. Ví dụ gõ số 3 thì nó sẽ nằm hàng ngang là: b 3 d
Đoán thôi hok biết đúng hay sai.

Mình gữi file lại các bạn giúp mình dùm, yêu cầu có trong file
=OFFSET($C$1,(G3-1)*4+1,)
=OFFSET($C$1,(G3-1)*4+3,)
Đúng rồi bạn, bạn sửa giúp dùm vì dữ liệu của mình nằm không theo nguyên tắc khi áp dụng hàm của bạn vào cũng chưa được chính xác, bạn xem file giúp mình lần nữa nhé, cám ơn bạn[Thongbao]Mình gữi file lại các bạn giúp mình dùm, yêu cầu có trong file[/Thongbao]
Bạn tham khảo cách xài hàm người dùng trong file
Bạn sửa lại code của "em" Hải Yến một tí tẹo:Đúng rồi bạn, bạn sửa giúp dùm vì dữ liệu của mình nằm không theo nguyên tắc khi áp dụng hàm của bạn vào cũng chưa được chính xác, bạn xem file giúp mình lần nữa nhé, cám ơn bạn
Function TimCap(Rng As Range, Num As Long, Optional Tren As Boolean = True)
Dim sRng As Range
Set sRng = Rng.Find(Num, , xlFormulas, xlWhole)
If Not sRng Is Nothing Then
If Tren Then
TimCap = [COLOR=#ff0000][B]sRng.End(xlUp)[/B][/COLOR].Value
Else
TimCap = [COLOR=#ff0000][B]sRng.End(xlDown)[/B][/COLOR].Value
End If
End If
End Function
Cũng coi chừng "tèo" vì:Bạn sửa lại code của "em" Hải Yến một tí tẹo:
Mã:Function TimCap(Rng As Range, Num As Long, Optional Tren As Boolean = True) Dim sRng As Range Set sRng = Rng.Find(Num, , xlFormulas, xlWhole) If Not sRng Is Nothing Then If Tren Then TimCap = [COLOR=#ff0000][B]sRng.End(xlUp)[/B][/COLOR].Value Else TimCap = [COLOR=#ff0000][B]sRng.End(xlDown)[/B][/COLOR].Value End If End If End Function
Dữ liệu có lúc thì liên tục không có ô trống, lúc có trống 1 vài ô ????vì dữ liệu của mình nằm không theo nguyên tắc
Híc, dữ liệu thế nào thì "tèo" vậy Ba Tê, để còn tìm cách khác "xử" nó nữa chứCũng coi chừng "tèo" vì:
Dữ liệu có lúc thì liên tục không có ô trống, lúc có trống 1 vài ô ????
Híc! Tạc thêm 1 long nữa xem sao.
Tác giả nói dữ liệu không có quy luật gì cả, tui hiểu là có khi nó là hàng chục ô liên tiếp nhau, có khi lại cách nhau hàng chục ô trống.Híc, dữ liệu thế nào thì "tèo" vậy Ba Tê, để còn tìm cách khác "xử" nó nữa chứ
Híc, mới có 4 lon, hôm nay mệt quá ( chắc tại hôm Chủ nhật bị Ác & Tùng ép uống.......1 chai )
Định hỏi cái sRng.End(xlUp) và sRng.End(xlDown), bác BATE đã mầm nó rồi. Giải quyết được vấn đề. thế nhưng khi chọn 1 vùng thì kết quả chưa ok lắm bác áTác giả nói dữ liệu không có quy luật gì cả, tui hiểu là có khi nó là hàng chục ô liên tiếp nhau, có khi lại cách nhau hàng chục ô trống.
End(xlUp) hay End(xlDown) không thể đúng với cả 2 loại này được.
4 lon mà nhằm nhò gì. 4 lon chưa bằng 1 chai Vodka, hahaha




Nếu dùng Sub thì đơn giản hơn nhiều. Bấm cái xẹt ra hết.Định hỏi cái sRng.End(xlUp) và sRng.End(xlDown), bác BATE đã mầm nó rồi. Giải quyết được vấn đề. thế nhưng khi chọn 1 vùng thì kết quả chưa ok lắm bác á
Bác bate giúp dùm sao mình chọn 1 vùng rộng lớn hơn thì kết quả lại sai nhé bác bate.




Thử cái này đi rồi chế biến, không có xem file, viết tạm dữ liệu đang ở cột CBấm cái xẹt mình cũng khoái lắm, nhưng dữ liệu trên chỉ giả lập thôi, sợ cái xẹt nó cao siêu quá mình không áp dụng vào file của mình được, cảm ơn bạn.
Sub QHai()
Dim data(), Res(1 To 65536, 1 To 3), i, j, k
data = Range([C2], [C65536].End(3)).Value
For i = 1 To UBound(data)
If data(i, 1) <> "" Then
j = j + 1
If j = 1 Then k = k + 1
Res(k, j) = data(i, 1)
If j = 3 Then j = 0
End If
Next
[I3].Resize(k, 3) = Res
End Sub
Nếu dữ liệu như bài #13 thì mấy em sRng.End(xlUp) và sRng.End(xlDown) giải quyết ổn thỏaĐịnh hỏi cái sRng.End(xlUp) và sRng.End(xlDown), bác BATE đã mầm nó rồi. Giải quyết được vấn đề. thế nhưng khi chọn 1 vùng thì kết quả chưa ok lắm bác á
Bác bate giúp dùm sao mình chọn 1 vùng rộng lớn hơn thì kết quả lại sai nhé bác bate.






Nghe anh Cò nói cũng nghi nghi nên mở file cuối xem thì hỡi ôi.. ọc ọc nữa rồiNếu dữ liệu như bài #13 thì mấy em sRng.End(xlUp) và sRng.End(xlDown) giải quyết ổn thỏa
Dữ liệu như bài cuối thì 2 em này cũng "chơi" láng nhưng code phải thêm tí tẹo, quan trọng là dữ liệu trong bài cuối là.....thật chưa, hứ hông thôi phải sửa hoài.......![]()
Thân
Sub QHai()
Dim data(), Res(1 To 65536, 1 To 3), i, j, k, it
data = Range([C2], [C65536].End(3)).Resize(, 5).Value
For Each it In data
If it <> "" Then
j = j + 1
If j = 1 Then k = k + 1
Res(k, j) = it
If j = 3 Then j = 0
End If
Next
[I3].Resize(k, 3) = Res
End Sub
Bạn nói nghe vui thiệt.Thấy code của bác bate được rồi chỉ mở rộng thêm vùng nữa là ngon các bác à. Các bác giúp dùm dùm cảm ơn các bác.
=LOOKUP("zzz",OFFSET($C$2,,,MATCH(G3,$C$2:$C$100,0)))
=INDEX($C$2:$C$100,MIN(IF(ISTEXT(OFFSET($C$2,MATCH(G3,$C$2:$C$100,0),,100)),ROW(INDIRECT(MATCH(G3,$C$2:$C$100,0)&":100")),""))+1)
Lúc đầu mình nghỉ chỉ đơn giản thôi, không ngờ phức tạp đến thế.Bạn nói nghe vui thiệt.
Sao không đưa dữ liệu giống thật ngay từ đầu, Dữ liệu của bài sau phá "banh" cái Sub trước luôn rồi.
---------------------------------
thông cảm bác nhéCũng dựa vào cái cũ, nhưng cũng phải toát mồ hôi vì khi thêm nó chạy lung tung lênLúc đầu mình nghỉ chỉ đơn giản thôi, không ngờ phức tạp đến thế.thông cảm bác nhé
Cảm ơn bác nhiều nhé.Cũng dựa vào cái cũ, nhưng cũng phải toát mồ hôi vì khi thêm nó chạy lung tung lên




Mà từ code bài #12 của HYen17, rồi Bác Cò sửa lại tí tẹo bài #14, rồi chỉnh lại theo file mới gọn hơn à ta?
[GPECODE=vb]Function TimCap(Rng As Range, Num As Long, Optional Tren As Boolean = True)
Dim sRng As Range
Set sRng = Rng.Find(Num, , xlFormulas, xlWhole)
If Not sRng Is Nothing Then
If Tren Then
TimCap = IIf(sRng.Offset(-1) <> Empty, sRng.Offset(-1).Value, sRng.End(xlUp).Value)
Else
TimCap = IIf(sRng.Offset(1) <> Empty, sRng.Offset(1).Value, sRng.End(xlDown).Value)
End If
End If
End Function
[/GPECODE]
Cái "ngu" của mình là lúc nào cũng For, Dic.
Function DoTim(rng As Range, dk As String, T As Boolean) As String
Dim F As Range
Set F = rng.Find(dk, , , 1)
If T Then DoTim = IIf(F(-0) <> "", F(-0), F.End(3))
If Not T Then DoTim = IIf(F(2) <> "", F(2), F.End(4))
End Function