Nhờ giải đáp code "For each" (1 người xem)

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

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

a ty

Thành viên mới
Tham gia
31/7/10
Bài viết
4
Được thích
0
Hi ACE!
Nhờ ACE giải đáp dùm mình dãy code trong file đính kèm. Không hiểu sau "for each" của mình viết nó cứ lấy giá trị cuối cùng mà lại không lấy giá trị tương ứng. Nhờ ACE hỗ trợ sớm dùm mình nha.
- Giải đáp dùm mình hàm (find và resize). Mình mới ACE chịu khó dùm. hix
 

File đính kèm

Hi ACE!
Nhờ ACE giải đáp dùm mình dãy code trong file đính kèm. Không hiểu sau "for each" của mình viết nó cứ lấy giá trị cuối cùng mà lại không lấy giá trị tương ứng. Nhờ ACE hỗ trợ sớm dùm mình nha.
- Giải đáp dùm mình hàm (find và resize). Mình mới ACE chịu khó dùm. hix

Code của bạn:
Mã:
Sub HMM()
  Dim Rws As Long, Col As Byte
  Dim Sh As Worksheet, Rng As Range, Cls As Range, Rg0 As Range

  Rws = [a3].CurrentRegion.Rows.Count

  Set Sh = ThisWorkbook.Worksheets("sheet1")
  Set Rng = Sh.Range(Sh.[a4], Sh.[a4].End(xlDown)) '(Sheet1 A4 den cuoi)
  Col = Sh.Cells(3, "iu").End(xlToLeft).Column '64
  For Each Cls In Rng
    Set Rg0 = Sh.Range(Sh.Cells(Cls.Row, "af"), Sh.Cells(Cls.Row, Col))
   'Rg0 la vung (vi tri cot 32 den 64, linh dong chay den cuoi danh sach)
    [COLOR=#ff0000]With Range([a3], [a9999].End(xlUp)).Offset(1)
     .Offset(, 17) = Sh.Cells(3, Rg0.Find("X", , xlFormulas, xlWhole).Column)
    End With[/COLOR]
  Next Cls
  Randomize
  [a2].Resize(, 5).Interior.ColorIndex = 34 + 9 * Rnd() \ 1
End Sub
Chổ màu đỏ sai nghiêm trọng
Sửa thành vầy:
Mã:
Sub HMM()
  Dim Col As Byte
  Dim Sh As Worksheet, rng As Range, Cls As Range, rng0 As Range, rng1 As Range
  Set Sh = ThisWorkbook.Worksheets("sheet1")
  Set rng = Sh.Range(Sh.[a4], Sh.[a4].End(xlDown)) '(Sheet1 A4 den cuoi)
  Col = Sh.Cells(3, "iu").End(xlToLeft).Column '64
  For Each Cls In rng
    Set rng0 = Sh.Range(Sh.Cells(Cls.Row, "af"), Sh.Cells(Cls.Row, Col))
    [COLOR=#ff0000]Set rng1 = rng0.Find("X", , xlFormulas, xlWhole)
    If Not rng1 Is Nothing Then
      Cls.Offset(, 17).Value = Sh.Cells(3, rng1.Column).Value
    End If[/COLOR]
  Next Cls
  Randomize
  [a2].Resize(, 5).Interior.ColorIndex = 34 + 9 * Rnd() \ 1
End Sub
Vòng lập chạy đến đâu thì gán đến nấy (gán vào Cls.Offset(,17) ) chứ sao phải gán "nguyên rổ" thế
 
Lần chỉnh sửa cuối:
Upvote 0
- Giải đáp dùm mình hàm (find và resize). Mình mới ACE chịu khó dùm. hix

Hai fương thức (FT) này có nhiều trên diễn đàn;
Thậm chí FT FIND() có hẵn 1 bài tổng quan của những năm trước; Bạn vô BOX "Lập trình" tìm đi nha;

Còn FT resize() bạn có thể xem tạm tại:
http://www.giaiphapexcel.com/forum/...uộc-tính-Resize-của-đối-tượng-Range-trong-VBA

Sau đó tiếp tục tìm kiếm, nếu chưa cảm thấy đủ cho sự làm chủ 2 FT này!

Chúc thành công.
 
Upvote 0
Cảm ơn Anh!
Anh cho hỏi:
- Chỗ anh bảo tô màu đỏ là sai. Anh có thể giải thích rõ hơn được không?
- Theo code anh chỉnh lại dùm em. Nếu như không muốn xuất trên sheet1 mà muốn xuất đến cột 17 trong sheet 2 thì mình phải chỉnh code lại như thế nào?
Thanks Anh
 
Upvote 0

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

Back
Top Bottom