Chuyên đề giải đáp những thắc mắc về code VBA

Liên hệ QC

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Mình muốn nhờ giải thich câu lệnh " If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c) "
trong ví du:
Public Function LonNhat(Ran As Range)
Dim max As Double, v As Integer, d As Integer, c As Integer
max = Ran.Cells(1, 1)
For d = 1 To Ran.Rows.Count
For c = 1 To Ran.Columns.Count
If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c)
Next c
Next d
v = Tim(max, Ran)
LonNhat = max
End Function
-------------------------------------------------------
[INFO1]Thông báo:
Vì topic này:
http://www.giaiphapexcel.com/forum/...ải-thích-các-code-đề-nghị-các-bạn-gửi-vào-đây
đã quá dài nên BQT đóng lại.
Nay tôi mở topic mới với cùng chủ đề: GIẢI THÍCH NHỮNG THẮC MẮC VỀ CODE
Các bạn nếu có nhu cầu giải thích code, vui lòng post tại đây nhé
NDU96081631

[/INFO1]
 
Chỉnh sửa lần cuối bởi điều hành viên:
Nhờ a/c viết giùm code để sheets tổng hợp làm được nhanh hơn
Bài đã được tự động gộp:

Nhờ a/c viết giúp code để tổng hợp nhiều sheets lại thành 1 sheets tổng hợp
 
Lần chỉnh sửa cuối:
Upvote 0
Tác giả bài trên chẳng biết muốn gì mà đăng hỏi câu ấy tùm lum hết.
 
Upvote 0
em là người mới, mong anh chị giúp đỡ nhiều.
em có 1 file muốn nhờ anh chị viết code VBA giúp em.
em cần tự động giãn dòng khi giá trị đấy xuất hiện lần đầu tiên ở cột AI.
trước đấy em cũng có thử viết code nhưng không ra được kết quả như mong muốn.
em cảm ơn anh chị nhiều
 

File đính kèm

  • 1715242618526.png
    1715242618526.png
    237.4 KB · Đọc: 13
  • PCO80656+PCO80659 - M PAVEY POCKET PANT(new).xlsb
    218.7 KB · Đọc: 5
Upvote 0
PHP:
Sub ZanDong()
 Dim WF As Object, Rng As Range, Cls As Range
 Dim J As Long, Rws As Long, W
 Const MaX_ As Integer = 35:         Const Min_ As Integer = 23

 Set WF = Application.WorksheetFunction
 Rws = [AI10].End(xlDown).Row
 For J = 9 To Rws
    W = W + 1
    Set Rng = [AI9].Resize(W)
    If WF.CountIf(Rng, Cells(J, "AI").Value) = 1 Then
        Rows(J & ":" & J).RowHeight = MaX_
    Else
        Rows(J & ":" & J).RowHeight = Min_
    End If
 Next J
End Sub
 
Upvote 0
PHP:
Sub ZanDong()
 Dim WF As Object, Rng As Range, Cls As Range
 Dim J As Long, Rws As Long, W
 Const MaX_ As Integer = 35:         Const Min_ As Integer = 23

 Set WF = Application.WorksheetFunction
 Rws = [AI10].End(xlDown).Row
 For J = 9 To Rws
    W = W + 1
    Set Rng = [AI9].Resize(W)
    If WF.CountIf(Rng, Cells(J, "AI").Value) = 1 Then
        Rows(J & ":" & J).RowHeight = MaX_
    Else
        Rows(J & ":" & J).RowHeight = Min_
    End If
 Next J
End Sub
Đọc ngược từ dưới lên trên, và dùng hàm Match để tìm. Nếu hàm Match cho vị trí ứng với dòng hiện tại thì đó là lần xuất hiện đầu tiên.
Dù sao thì Match cũng nhanh hơn CountIf một chút.
 
Upvote 0
PHP:
Sub ZanDong()
 Dim WF As Object, Rng As Range, Cls As Range
 Dim J As Long, Rws As Long, W
 Const MaX_ As Integer = 35:         Const Min_ As Integer = 23

 Set WF = Application.WorksheetFunction
 Rws = [AI10].End(xlDown).Row
 For J = 9 To Rws
    W = W + 1
    Set Rng = [AI9].Resize(W)
    If WF.CountIf(Rng, Cells(J, "AI").Value) = 1 Then
        Rows(J & ":" & J).RowHeight = MaX_
    Else
        Rows(J & ":" & J).RowHeight = Min_
    End If
 Next J
End Sub
Application.WorksheetFunction thường giúp code ngắn gọn nhưng nếu dùng nhiều có thể làm chậm code.
Bài nầy dữ liệu được sắp xếp nên chỉ cần so sánh với ô trên nếu khác là thỏa điều kiện giãn dòng
 
Upvote 0
Application.WorksheetFunction thường giúp code ngắn gọn nhưng nếu dùng nhiều có thể làm chậm code.
Bài nầy dữ liệu được sắp xếp nên chỉ cần so sánh với ô trên nếu khác là thỏa điều kiện giãn dòng
Theo hình thì cột AI đâu có sắp xếp? Hay là tôi nhìn nhầm?
 
Upvote 0
Theo hình thì cột AI đâu có sắp xếp? Hay là tôi nhìn nhầm?
Xin lỗi mình nhầm :), nên dùng Dictionary.
Thật ra yêu cầu giãn dòng của thớt không hợp lý, không giúp người dùng đọc bảng tính rỏ hơn.
Nếu khác dữ liệu trước thì giãn dòng sẽ hợp lý hơn.
 
Upvote 0
PHP:
Sub ZanDong()
 Dim WF As Object, Rng As Range, Cls As Range
 Dim J As Long, Rws As Long, W
 Const MaX_ As Integer = 35:         Const Min_ As Integer = 23

 Set WF = Application.WorksheetFunction
 Rws = [AI10].End(xlDown).Row
 For J = 9 To Rws
    W = W + 1
    Set Rng = [AI9].Resize(W)
    If WF.CountIf(Rng, Cells(J, "AI").Value) = 1 Then
        Rows(J & ":" & J).RowHeight = MaX_
    Else
        Rows(J & ":" & J).RowHeight = Min_
    End If
 Next J
End Sub
em cảm ơn anh nhiều ạ
 
Upvote 0
Xin lỗi mình nhầm :), nên dùng Dictionary.
Thật ra yêu cầu giãn dòng của thớt không hợp lý, không giúp người dùng đọc bảng tính rỏ hơn.
Nếu khác dữ liệu trước thì giãn dòng sẽ hợp lý hơn.
em làm trong ngành may mặc, yêu cầu dãn dòng này là để em có thể dán mẫu vào dòng đã dãn đấy ra
 
Upvote 0
Web KT
Back
Top Bottom