Đây bạn chạy thử, mình mù mảng
Sub GPE()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim r As Integer
Dim c As Integer
Dim orr As Integer
Dim orc As Integer
Dim dt As Worksheet
Dim rp As Worksheet
Set dt = Sheets("Xuat_T5")
Set rp = Sheets("XK_ngay")
orr = 7
orc = 6
For c = orc To 31 + orc
For r = orr To WorksheetFunction.CountA(dt.Range("A1:A9999")) + orr
lr = rp.Cells(Rows.Count, "D").End(xlUp).Row + 1
If dt.Cells(r, c) > 0 Then
rp.Cells(lr, 1) = dt.Cells(orr - 1, c)
rp.Cells(lr, 4) = dt.Cells(r, 2)
rp.Cells(lr, 5) = dt.Cells(r, 3)
rp.Cells(lr, 6) = dt.Cells(r, 4)
rp.Cells(lr, 8) = dt.Cells(r, c)
End If
Next r
Next c
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Sub ChepDuLieuThang()
Dim Rws As Long, J As Long, Col As Integer, W As Integer, Cot As Integer, Thg As Integer, Nam As Integer
Dim Arr()
With Sheets("Xuat_T5")
Thg = .[b3].Value: Nam = .[b4].Value
Rws = .[F6].CurrentRegion.Rows.Count
Arr() = .[F7].Resize(Rws, 31).Value
ReDim aKQ(1 To 31 * Rws, 1 To 8)
Sheets("XK_ngay").[A9].Resize(Rws * 31, 8).Value = aKQ()
For Col = 1 To 31
For J = 1 To Rws
If Arr(J, Col) > 0 Then
W = W + 1:
aKQ(W, 1) = DateSerial(Nam, Thg, Col)
aKQ(W, 4) = .Cells(6 + J, "B").Value
aKQ(W, 5) = .Cells(6 + J, "C").Value
aKQ(W, 6) = .Cells(6 + J, "D").Value
aKQ(W, 8) = Arr(J, Col)
End If
Next J
Next Col
End With
If W Then
Sheets("XK_ngay").[A9].Resize(W, 8).Value = aKQ()
End If
End Sub
Cảm ơn bạnĐây bạn chạy thử, mình mù mảng
Mã:Sub GPE() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Dim r As Integer Dim c As Integer Dim orr As Integer Dim orc As Integer Dim dt As Worksheet Dim rp As Worksheet Set dt = Sheets("Xuat_T5") Set rp = Sheets("XK_ngay") orr = 7 orc = 6 For c = orc To 31 + orc For r = orr To WorksheetFunction.CountA(dt.Range("A1:A9999")) + orr lr = rp.Cells(Rows.Count, "D").End(xlUp).Row + 1 If dt.Cells(r, c) > 0 Then rp.Cells(lr, 1) = dt.Cells(orr - 1, c) rp.Cells(lr, 4) = dt.Cells(r, 2) rp.Cells(lr, 5) = dt.Cells(r, 3) rp.Cells(lr, 6) = dt.Cells(r, 4) rp.Cells(lr, 8) = dt.Cells(r, c) End If Next r Next c Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub
Cảm ơn bác đã góp ý kiến cho em biết về những vẫn đề có thể xảy ra ạQuy trình của bạn phải xác định:
1. Hoặc phải chỉnh lại số xuất tháng nếu sửa dữ liệu, HOẶC
2. Xuất rồi thì khóa lại, không cho chỉnh sửa.
Mình xin lỗi, mình chép code sau khi đăng bài vào chạy thử nhưng vẫn chạy được và cũng không biết lỗi bên máy bạn là gì để mà gỡ rối. Bạn thử code của thầy @SA_DQ nhé.Mình thử chạy code của bạn nhưng thấy báo lỗi biến ạ
Cảm ơn bác nhiều ạThêm 1 tham khảo & nếu chưa thỏa về tốc độ ta tính tiếp
PHP:Sub ChepDuLieuThang() Dim Rws As Long, J As Long, Col As Integer, W As Integer, Cot As Integer, Thg As Integer, Nam As Integer Dim Arr() With Sheets("Xuat_T5") Thg = .[b3].Value: Nam = .[b4].Value Rws = .[F6].CurrentRegion.Rows.Count Arr() = .[F7].Resize(Rws, 31).Value ReDim aKQ(1 To 31 * Rws, 1 To 8) Sheets("XK_ngay").[A9].Resize(Rws * 31, 8).Value = aKQ() For Col = 1 To 31 For J = 1 To Rws If Arr(J, Col) > 0 Then W = W + 1: aKQ(W, 1) = DateSerial(Nam, Thg, Col) aKQ(W, 4) = .Cells(6 + J, "B").Value aKQ(W, 5) = .Cells(6 + J, "C").Value aKQ(W, 6) = .Cells(6 + J, "D").Value aKQ(W, 8) = Arr(J, Col) End If Next J Next Col End With If W Then Sheets("XK_ngay").[A9].Resize(W, 8).Value = aKQ() End If End Sub
Cảm ơn bạn đã quan tâm đến bài viết của mình nhé. Chắc do máy mình thôi ạMình xin lỗi, mình chép code sau khi đăng bài vào chạy thử nhưng vẫn chạy được và cũng không biết lỗi bên máy bạn là gì để mà gỡ rối. Bạn thử code của thầy @SA_DQ nhé.
Bạn viết làm bằng VBA mà đi hỏi hết như vậy thì bao giờ mới khá lên được.Ít ra bạn cũng đã thử sửa code rồi xem nó không đúng ở đâu.Chứ bí chỗ nào là hỏi thì khó hiểu hết được các lỗi khi dùng lắm bạn à.Cảm ơn bác nhiều ạ
Em chạy thử thấy code dùng rất ổn ạ hihi
Bác có thể giúp em thêm 1 ý nữa được không ạ? Em muốn chỉ cập nhật từ ngày hiện tại trở về trước thôi còn những ngày sau thì không cập nhật(tránh trường hợp nhập dữ liệu nhầm qua cột ngày hôm sau ạ)
Cảm ơn bác đã góp ý ạBạn viết làm bằng VBA mà đi hỏi hết như vậy thì bao giờ mới khá lên được.Ít ra bạn cũng đã thử sửa code rồi xem nó không đúng ở đâu.Chứ bí chỗ nào là hỏi thì khó hiểu hết được các lỗi khi dùng lắm bạn à.
Để ngừa nhập nhầm qua ngày trong tương lai thì nên xài macro sự kiện trong trang nhập. . . .Em chạy thử thấy code dùng rất ổn ạ hihi
Bác có thể giúp em thêm 1 ý nữa được không ạ? Em muốn chỉ cập nhật từ ngày hiện tại trở về trước thôi còn những ngày sau thì không cập nhật(tránh trường hợp nhập dữ liệu nhầm qua cột ngày hôm sau ạ
Bạn thử khai báo thêm biến "lr" xem, do mình chưa khai báo biến "lr" hay sao đấy.
Dạ vâng. Cảm ơn 2 bác đã nhiệt tình giúp đỡ em ạĐể ngừa nhập nhầm qua ngày trong tương lai thì nên xài macro sự kiện trong trang nhập
(Ngừa trong trứng nước):
Khi mở trang tính thì việc đầu tiên là tô màu cột ngày hiện hành lên; Chuyện này có thể làm bỡi bạn khi xài CF trên menu 'Home'
Nếu muốn làm bỡi VBA thì bạn hãy tự ên hay thuê người khác (ngoài mình)
Có dòng option explicit không. Option e p li chết tiệt.Cảm ơn bác nhiều ạ
Em chạy thử thấy code dùng rất ổn ạ hihi
Bác có thể giúp em thêm 1 ý nữa được không ạ? Em muốn chỉ cập nhật từ ngày hiện tại trở về trước thôi còn những ngày sau thì không cập nhật(tránh trường hợp nhập dữ liệu nhầm qua cột ngày hôm sau ạ)
Bài đã được tự động gộp:
Cảm ơn bạn đã quan tâm đến bài viết của mình nhé. Chắc do máy mình thôi ạ
Mình chạy code thấy báo lỗi như hình đó bạnView attachment 290013
Bày bạy nè!Có dòng option explicit không. Option e p li chết tiệt.
Xoá đi cho khỏe.
Haha, rứa chết em đọCó dòng option explicit không. Option e p li chết tiệt.
Xoá đi cho khỏe.
Cơ mà em trên rừng, có khi xài được bác nhỉ hahaBày bạy nè!
Thích xài luật rừng ư?
/-)ó là con dao 2 lưỡi, ai xài được thì phải nói là người tài; Còn không thì cứ tường minh mà mần, chắc như bắp!. . . . .
Cơ mà em trên rừng, có khi xài được bác nhỉ haha
/-)ó là con dao 2 lưỡi, ai xài được thì phải nói là người tài; Còn không thì cứ tường minh mà mần, chắc như bắp!
Trước khi ăn ngon, mặc đẹp thì phải ăn chắc, mặc bền cái đã!
Chúc cả nhà vui vẻ!
Cảm ơn 2 bác đã giải thích cho em hiểu rõ hơn về Option Explicit nhé !!!Option Explicit giúp ta cẩn thận hơn trong việc dùng biến, tránh những sai sót không đáng có. Điều gì xảy ra nếu trước đó bạn dùng biến strVal nhưng sau đó lại gõ thành strVar? VBA chấp nhận tuốt nhưng kết quả lại sai bét và ta thì mù tịt vì mắt nhìn không thấy gì sai.
Nếu bạn có sử dụng và khai báo cả hai strVal và strVar thì sao?Option Explicit giúp ta cẩn thận hơn trong việc dùng biến, tránh những sai sót không đáng có. Điều gì xảy ra nếu trước đó bạn dùng biến strVal nhưng sau đó lại gõ thành strVar? VBA chấp nhận tuốt nhưng kết quả lại sai bét và ta thì mù tịt vì mắt nhìn không thấy gì sai.