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
Điểm
368
Nơi ở
VĩnhYên_VP
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:
Mong a/c nào có thể dịch từng câu lệnh, cú pháp để e hiểu hơn được không ạ.

Mói học code thì tìm những bài có chú thích rõ ràng mà học.
Mấy cái code này tác giả khong có cho biết mình dùng giải thuật gì, tôi khong thể kiểm chứng viết như vậy là đúng hay sai cho nên lười đọc và giải thích lắm.

Ví dụ đáng lẽ phảí tính A+B, tác giả viết sai thành A-B thì tìm cả ngày cũng chưa chắc ra.
 
Upvote 0
Bài đó đã hơn 4 năm rồi. Trong khoảng thời gian đó có nhiều thay đổi và cải tiến công nghệ.
Cảm ơn A. E đag pải tìm hiểu dần ạ. Phải đi từ cái 4 năm trước mới được ý, chứ theo công nghệ tại thời điểm này thì chạy k nổi :rolleyes:
 
Upvote 0
Tiện đây, nhờ a @VetMini xem giúp e bài này. sử dụng hàm sumifs trong VBA, k hiểu điều kiện sai ở chỗ nào mà ko ra đc kết quả
 

File đính kèm

  • sumifs_VAB.xlsm
    14.8 KB · Đọc: 8
Upvote 0
Bạn copy code đưa lên, và cho biết code làm cái gì. Tôi đọc lô gic của code trước và chỉ tải file về khi cần kiểm chứng đúng sai.
 
Upvote 0

File đính kèm

  • Copy of sumifs_VAB.xlsm
    16.2 KB · Đọc: 14
Upvote 0
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Bạn sửa [H2] thành [H2].Value2 là được
Nhớ là có đọc 1 comment nói về Value2, hình như của @ThuNghi thì phải, bảo rằng cứ nhắc đến ngày tháng thì chơi thằng Value2. Mà nay ko nghĩ ra. Cảm ơn a !

The only difference between this property and the Value property is that the Value2 property doesn’t use the Currency and Date data types. You can return values formatted with these data types as floating-point numbers by using the Double data type.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn copy code đưa lên, và cho biết code làm cái gì. Tôi đọc lô gic của code trước và chỉ tải file về khi cần kiểm chứng đúng sai.
E đang vọc cách sử dụng hàm Excel trong VBA, sáng nay mắc đoạn hàm Sumifs về cái điều kiện liên quan đến ngày tháng. Value nó k chịu, mà phải là value2 :D
 
Upvote 0
Nhớ là có đọc 1 comment nói về Value2, hình như của @ThuNghi thì phải, bảo rằng cứ nhắc đến ngày tháng thì chơi thằng Value2. Mà nay ko nghĩ ra. Cảm ơn a !

The only difference between this property and the Value property is that the Value2 property doesn’t use the Currency and Date data types. You can return values formatted with these data types as floating-point numbers by using the Double data type.
Thử dùng cái này xem CDbl([H2])
 
Upvote 0
Phải thêm value2 mới chạy đc mà bạn. Mới cả Sumifs ngoài cách viết code kiểu đó thì còn cách dùng FormulaR1C1 nữa. Chứ mình có thấy nó ngộ đâu nhỉ :D
Mình nói ngộ là do đoạn code sau, dùng khá là lẫn lộn mọi thứ, lúc thì dùng viết tắt, lúc thì dùng dạng đầy đủ. Cái nữa là code của bạn lại chạy được trên máy mình, không rõ có phải do vấn đề định dạng ngày tháng không?

Mã:
With Sheets("A")
[K5].Value = Application.WorksheetFunction.SumIfs(.Range("E4:E15"), _
                                                  .Range("D4:D15"), [H3], _
                                                  .Range("C4:C15"), "<" & CDbl([H2]))
End With
 
Upvote 0
Chào mọi người. Cho mình hỏi về phương thức Find, với cách tìm kiếm gần chính xác như trong file đính kèm. Xin cảm ơn !
 

File đính kèm

  • FIND_GPE.xlsm
    14.9 KB · Đọc: 9
Upvote 0
Em chào mọi người!
Em mới tập tành VBA. có 1 câu lệnh mà em không biết sửa như thế nào mong người chỉ giáo giúp với ạ!
" Case Is = 5
Rows("42:42,52:52").EntireRow.Hidden = True
Rows("286:287").RowHeight = 148
End Select "
 
Upvote 0
Em chào mọi người!
Em mới tập tành VBA. có 1 câu lệnh mà em không biết sửa như thế nào mong người chỉ giáo giúp với ạ!
" Case Is = 5
Rows("42:42,52:52").EntireRow.Hidden = True
Rows("286:287").RowHeight = 148
End Select "
Bạn thử với:
PHP:
Sub abc()
    Application.ScreenUpdating = False
    Select Case Range("A1").Value
    Case 5
        Rows("42:42").EntireRow.Hidden = True
        Rows("52:52").EntireRow.Hidden = True
        Rows("286:287").RowHeight = 148
    End Select
    Application.ScreenUpdating = True
End Sub
 
Upvote 0
Nhờ mọi người giúp đỡ tìm ra lỗi của code này với ah.
Tôi có 1 bảng dữ liệu với 1 cột có các giá trị là Ban Giám đốc, Phòng Kế toán - Ngân quỹ, Phòng Khách hàng, Phòng Giám sát Hoạt động.
Tôi đã đưa các giá trị trên vào 1 array.
Khi dùng vòng lặp For...Next thì đến giá trị thứ 2 thì bị lỗi ở hàm CountIf, J ra kết quả là 0
Nhờ mọi người chỉ giáo giúp
Mã:
Sub Macro1()
    Dim Criteria(1 To 5) As String, rng As Variant
    Dim I As Integer, J As Integer, K As Integer
    Dim ws1 As Worksheet, ws2 As Worksheet
   
    Set ws1 = ThisWorkbook.Sheets(1)
    Set ws2 = ThisWorkbook.Sheets(2)
   
    Criteria(1) = "Ban Giám " & ChrW(273) & ChrW(7889) & "c"
    Criteria(2) = "Phòng Giám sát Ho" & ChrW(7841) & "t " & ChrW(273) & ChrW(7897) & "ng"
    Criteria(3) = "Phòng Khách hàng"
    Criteria(4) = "Phòng K" & ChrW(7871) & " toán - Ngân qu" & ChrW(7929)
    Criteria(5) = "Phòng Qu" & ChrW(7843) & "n lý các PGD B" & ChrW(432) & "u " & ChrW(273) & "i" & ChrW(7879) & "n"
   
    With ws2
        For I = 1 To UBound(Criteria)
            J = Application.WorksheetFunction.CountIf(.Range("CF3", .Range("CF3").End(xlDown)), Criteria(I))
            With .Range("A2", .Range("A2").End(xlDown)).Resize(, 87)
                .Parent.AutoFilterMode = False
                .AutoFilter
                .AutoFilter field:=84, Criteria1:=Criteria(I)
                Set rng = .Parent.AutoFilter.Range.Offset(1).Resize(J, 1)
                With ws1
                    K = .Cells.Find(what:=Criteria(I)).Row + 1
                    .Range("A" & K).Resize(J) = rng.Value2
                End With
            End With
        Next I
    End With
 
End Sub
 
Upvote 0
Nhờ mọi người giúp đỡ tìm ra lỗi của code này với ah.
Tôi có 1 bảng dữ liệu với 1 cột có các giá trị là Ban Giám đốc, Phòng Kế toán - Ngân quỹ, Phòng Khách hàng, Phòng Giám sát Hoạt động.
Tôi đã đưa các giá trị trên vào 1 array.
Khi dùng vòng lặp For...Next thì đến giá trị thứ 2 thì bị lỗi ở hàm CountIf, J ra kết quả là 0
Nhờ mọi người chỉ giáo giúp
- Quy tắc: Gửi thêm file dữ liệu và nêu yêu cầu cụ thể!
 
Upvote 0
- Quy tắc: Gửi thêm file dữ liệu và nêu yêu cầu cụ thể!
Em muốn lấy dữ liệu từ sheet Data sang sheet Bang luong
Ở sheet Bang lương, cột nào cần lấy số liệu, em đã đánh số thứ tự tương ứng với số cột của sheet Data rồi
Bác lưu ý cho em câu hỏi tìm lỗi ở bài trên nhé!
 

File đính kèm

  • Bang luong thang.xlsm
    1.3 MB · Đọc: 13
Upvote 0
Bác nào giúp e tự động insert với ạ!
Tại sheet 1 khi e insert thêm 1 dòng ( dưới dòng 16) thì sheet 2 sẽ tự động copy dòng 120 và insert xuống
 

File đính kèm

  • Tên DA-GVSTT-ngày.xlsm
    454.3 KB · Đọc: 4
Upvote 0
Em muốn lấy dữ liệu từ sheet Data sang sheet Bang luong
Ở sheet Bang lương, cột nào cần lấy số liệu, em đã đánh số thứ tự tương ứng với số cột của sheet Data rồi
Bác lưu ý cho em câu hỏi tìm lỗi ở bài trên nhé!
phải bỏ filter mới đếm được
Mã:
    With ws2
        For I = 1 To UBound(Criteria)
            .Range("A2").Parent.AutoFilterMode = False
            J = Application.WorksheetFunction.CountIf(.Range("CF3", .Range("CF3").End(xlDown)), Criteria(I))
            With .Range("A2", .Range("A2").End(xlDown)).Resize(, 87)
                .AutoFilter field:=84, Criteria1:=Criteria(I)
                Set rng = .Parent.AutoFilter.Range.Offset(1).Resize(J, 1)
                With ws1
                    K = .Cells.Find(what:=Criteria(I)).Row + 1
                    .Range("A" & K).Resize(J) = rng.Value2
                End With
            End With
        Next I
    End With
 
Upvote 0
Web KT
Back
Top