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:
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
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é!
Biểu đọc code của bạn rồi tìm chỗ sai thì thà tôi viết theo ý mình còn "dễ' thở" hơn.
Bạn xem file nhé, có gì thì bàn tiếp.
 

File đính kèm

  • Bang luong.rar
    962 KB · Đọc: 16
Upvote 0
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
Bác HieuCD cho em hỏi thêm với ah.
Em muốn đặt rng bằng với kết quả lọc có loại bỏ dòng tiêu đề thì em phải làm sao ah.
 
Upvote 0
Bác HieuCD cho em hỏi thêm với ah.
Em muốn đặt rng bằng với kết quả lọc có loại bỏ dòng tiêu đề thì em phải làm sao ah.
lệnh
Set rng = .Parent.AutoFilter.Range.Offset(1).Resize(J, 1)
trong đó Offset(1) là xuống 1 dòng để bỏ dòng tiêu đề
bạn thử code
Mã:
    With ws2
        For I = 1 To UBound(Criteria)
            .Range("A2").Parent.AutoFilterMode = False
            With .Range("A2", .Range("A2").End(xlDown)).Resize(, 87)
                .AutoFilter field:=84, Criteria1:=Criteria(I)
            End With
            Set rng = .Range("A3", .Range("A2").End(xlDown)).SpecialCells(xlCellTypeVisible)
            With ws1
                  K = .Cells.Find(what:=Criteria(I)).Row + 1
                  .Range("A" & K).Resize(rng.Rows.Count) = rng.Value2
            End With
        Next I
    End With
 
Upvote 0
Xin chào cả nhà
Mình muốn hỏi nếu mình muốn viết code đổi màu ô dữ liệu trong exel thì làm thế nào
 
Upvote 0
Web KT

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

Back
Top Bottom