Em nhờ trợ giúp lấy dữ liệu.

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

hahavuive

Thành viên mới
Tham gia
18/3/23
Bài viết
18
Được thích
4
Xin chào các anh chị có trong group ạ, em có vấn đề xin nhờ trợ giúp như sau:
Em có 8 bảng dữ liệu giống nhau: mỗi dữ liệu cách nhau 2 cột. Em ví dụ bảng 1: Từ B15:G104, Em muốn lấy dữ liệu 4 cuối cùng trong 8 bảng, thêm 1 một điều kiện là cột cuối trong bảng là "live" thì mình mới lấy ra, trong file mẫu em gửi thì dữ liệu cuối cùng nằm trong bảng 4 ạ, và 4 dữ liệu em cần lấy là:
27855 28775.9
27700 28500
27510 28078
24581 27915.8

Em gửi file mẫu dưới đây, mong nhận được sự giúp đỡ, em cảm ơn.
 

File đính kèm

Xin chào các anh chị có trong group ạ, em có vấn đề xin nhờ trợ giúp như sau:
Em có 8 bảng dữ liệu giống nhau: mỗi dữ liệu cách nhau 2 cột. Em ví dụ bảng 1: Từ B15:G104, Em muốn lấy dữ liệu 4 cuối cùng trong 8 bảng, thêm 1 một điều kiện là cột cuối trong bảng là "live" thì mình mới lấy ra, trong file mẫu em gửi thì dữ liệu cuối cùng nằm trong bảng 4 ạ, và 4 dữ liệu em cần lấy là:
27855 28775.9
27700 28500
27510 28078
24581 27915.8

Em gửi file mẫu dưới đây, mong nhận được sự giúp đỡ, em cảm ơn.
Yêu cầu không nói rỏ các tình huống khác nhau nên chỉ code sơ sơ
Mã:
Sub ABC()
  Dim res(1 To 4, 1 To 2), eCol&, eRow&, eR&, eR2&, j&, i&, r&
 
  eCol = Range("AAA14").End(xlToLeft).Column
  For j = eCol To 1 Step -8
    eRow = Cells(1000000, j).End(xlUp).Row
    For r = eRow To 15 Step -1
      If Cells(r, j) = "break" Then Exit For
      If Cells(r, j) = "live" Then
        eR = Cells(1000000, j - 5).End(xlUp).Row
        eR2 = Cells(1000000, j - 4).End(xlUp).Row
        For i = 1 To 4
          res(i, 1) = Cells(eR - 4 + 1, j - 5)
          res(i, 2) = Cells(eR2 - 4 + 1, j - 4)
        Next i
      End If
    Next r
  Next j
  Range("K4").Resize(4, 2) = res
End Sub
 
Yêu cầu không nói rỏ các tình huống khác nhau nên chỉ code sơ sơ
Mã:
Sub ABC()
  Dim res(1 To 4, 1 To 2), eCol&, eRow&, eR&, eR2&, j&, i&, r&
 
  eCol = Range("AAA14").End(xlToLeft).Column
  For j = eCol To 1 Step -8
    eRow = Cells(1000000, j).End(xlUp).Row
    For r = eRow To 15 Step -1
      If Cells(r, j) = "break" Then Exit For
      If Cells(r, j) = "live" Then
        eR = Cells(1000000, j - 5).End(xlUp).Row
        eR2 = Cells(1000000, j - 4).End(xlUp).Row
        For i = 1 To 4
          res(i, 1) = Cells(eR - 4 + 1, j - 5)
          res(i, 2) = Cells(eR2 - 4 + 1, j - 4)
        Next i
      End If
    Next r
  Next j
  Range("K4").Resize(4, 2) = res
End Sub
Em cảm ơn anh giờ này trễ mà anh vẫn giúp đỡ. Dạ code trên chạy gần đúng rồi ạ em sửa tí là chạy thành công, em cảm ơn anh nhiều.
 
Dạ đúng là hôm qua em không nói rõ trường hợp nên gặp vấn đề thật ạ. Kết quả cuối cùng em muốn lấy đó chính là 4 dữ liệu cuối cùng "live". Trong file mới em gửi ở bảng có giá trị cuối chỉ có 3 giá trị là "live" thì nó sẽ lấy hết và thêm 1 giá trị live ở bảng kế bên để cho đủ 4 dữ liệu và kết quả sẽ là:
30009.931850
29876.630760
2940030441.6
3105923888

Mong sáng anh có thể hỗ trợ giúp em thêm lần nữa, em cảm ơn anh rất nhiều.
 

File đính kèm

Nếu bài cần giải quyết bỡi Code (VBA) thì đăng vô đây là lộn tiệm!
Đề nghị
→ Chủ bài đăng chú ý cho lần sau;
→ Ai có năng lục xin dời bài đăng tới chỏ thích hợp hơn hay là thùng rác!
→ . . . .

Xin cảm ơn mọi người vì đã đọc!
 
Dạ đúng là hôm qua em không nói rõ trường hợp nên gặp vấn đề thật ạ. Kết quả cuối cùng em muốn lấy đó chính là 4 dữ liệu cuối cùng "live". Trong file mới em gửi ở bảng có giá trị cuối chỉ có 3 giá trị là "live" thì nó sẽ lấy hết và thêm 1 giá trị live ở bảng kế bên để cho đủ 4 dữ liệu và kết quả sẽ là:
30009.931850
29876.630760
2940030441.6
3105923888

Mong sáng anh có thể hỗ trợ giúp em thêm lần nữa, em cảm ơn anh rất nhiều.
Dữ liệu mới code đơn giản hơn nhiều
Mã:
Sub ABC()
  Dim res(1 To 4, 1 To 2), eCol&, eRow&, j&, k&, r&
 
  k = 4
  eCol = Range("AAA14").End(xlToLeft).Column
  For j = eCol To 1 Step -8
    eRow = Cells(1000000, j).End(xlUp).Row
    For r = eRow To 15 Step -1
      If Cells(r, j) = "live" Then
        res(k, 1) = Cells(r, j - 5)
        res(k, 2) = Cells(r, j - 4)
        If k = 1 Then Exit For
        k = k - 1
      End If
    Next r
    If r >= 15 Then Exit For
  Next j
  Range("R4").Resize(4, 2) = res
End Sub
Bài đã được tự động gộp:

Nếu bài cần giải quyết bỡi Code (VBA) thì đăng vô đây là lộn tiệm!
Đề nghị
→ Chủ bài đăng chú ý cho lần sau;
→ Ai có năng lục xin dời bài đăng tới chỏ thích hợp hơn hay là thùng rác!
→ . . . .

Xin cảm ơn mọi người vì đã đọc!
Bạn thức sớm quá, giờ nầy ra công viên tập thể dục rất tốt. Chúc bạn ngày mới vui vẽ
 
Lần chỉnh sửa cuối:
Nếu bài cần giải quyết bỡi Code (VBA) thì đăng vô đây là lộn tiệm!
Đề nghị
→ Chủ bài đăng chú ý cho lần sau;
→ Ai có năng lục xin dời bài đăng tới chỏ thích hợp hơn hay là thùng rác!
→ . . . .

Xin cảm ơn mọi người vì đã

Nếu bài cần giải quyết bỡi Code (VBA) thì đăng vô đây là lộn tiệm!
Đề nghị
→ Chủ bài đăng chú ý cho lần sau;
→ Ai có năng lục xin dời bài đăng tới chỏ thích hợp hơn hay là thùng rác!
→ . . . .

Xin cảm ơn mọi người vì đã đọc!
Em cảm ơn anh đã nhắc nhở, lần sau em sẽ chú ý hơn.
Bài đã được tự động gộp:

Dữ liệu mới code đơn giản hơn nhiều
Mã:
Sub ABC()
  Dim res(1 To 4, 1 To 2), eCol&, eRow&, j&, k&, r&
 
  k = 4
  eCol = Range("AAA14").End(xlToLeft).Column
  For j = eCol To 1 Step -8
    eRow = Cells(1000000, j).End(xlUp).Row
    For r = eRow To 15 Step -1
      If Cells(r, j) = "live" Then
        res(k, 1) = Cells(r, j - 5)
        res(k, 2) = Cells(r, j - 4)
        If k = 1 Then Exit For
        k = k - 1
      End If
    Next r
    If r >= 15 Then Exit For
  Next j
  Range("R4").Resize(4, 2) = res
End Sub
Bài đã được tự động gộp:


Bạn thức sớm quá, giờ nầy ra công viên tập thể dục rất tốt. Chúc bạn ngày mới vui vẽ
Em cảm ơn anh đã giúp em thêm lần nữa, code chạy mượt mà, em cảm ơn anh rất nhiều, chúc anh một ngày mới vui vẻ.
 
Web KT

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

Back
Top Bottom