LightStar252
Thành viên hoạt động



- Tham gia
- 9/7/16
- Bài viết
- 112
- Được thích
- 10
Trong File có codeAi giúp mình chuyển mấy công thức excel này thành code VBA cho đỡ nặng với ạ, hoặc là giúp mình code VBA tìm kiếm và tổng hợp dữ liệu thay thế các công thức excel cũng được ạ!
Sub baocaodaumaythang()
'
' baocaodaumaythang Macro
'
'
' so may
' =IFERROR(INDEX('BCHN.T1.2017.xls'!SM,MATCH(0,COUNTIF(C$9:$C11,'BCHN.T1.2017 .xls'!SM),0)),"")
Range("C12").Select
Selection.FormulaArray = _
"=IFERROR(INDEX('BCHN.T1.2017.xls'!SM,MATCH(0,COUNTIF(R9C:R[-1]C3,'BCHN.T1.2017.xls'!SM),0)),"""")"
' loai may
' =IFERROR((VLOOKUP(C12,CSDL!$B$10:$C$275,2,0))," ")
Range("B12").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR((VLOOKUP(RC[1],CSDL!R10C2:R275C3,2,0)),"" "")"
' dm chieu cao
' =IFERROR((VLOOKUP(C12,CSDL!$B$10:$H$275,5,0))," ")
Range("D12").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR((VLOOKUP(RC[-1],CSDL!R10C2:R275C8,5,0)),"" "")"
' dm gio
' =IFERROR((VLOOKUP(C12,CSDL!$B$10:$H$275,6,0)),"")
Range("E12").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR((VLOOKUP(RC[-2],CSDL!R10C2:R275C8,6,0)),"""")"
' tong gio
' =IF(C12<>"",SUMIF(BCHN!$D$10:$D$3139,C12,BCHN!$I$10:$I$3139),"")
Range("F12").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-3]<>"""",SUMIF(BCHN!R10C4:R3139C4,RC[-3],BCHN!R10C9:R3139C9),"""")"
' tong dau
' =IF(C12<>"",SUMIF(BCHN!$D$10:$D$3139,C12,BCHN!$J$10:$J$3139),"")
Range("G12").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-4]<>"""",SUMIF(BCHN!R10C4:R3139C4,RC[-4],BCHN!R10C10:R3139C10),"""")"
' ton dau dau
' =IF(D12="K do dc",0,IFERROR(J12*D12,""))
Range("H12").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-4]=""K do dc"",0,IFERROR(RC[2]*RC[-4],""""))"
' ton dau cuoi
' =IF(D12="K do dc",0,IFERROR(K12*D12,""))
Range("I12").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-5]=""K do dc"",0,IFERROR(RC[2]*RC[-5],""""))"
' chieu cao dau dau
' =IFERROR(OFFSET(INDEX('BCHN.T1.2017.xls'!data, MATCH(C12&$A$6, 'BCHN.T1.2017.xls'!SM&Ngay, 0), MATCH($J$9,BCHN!$C$8:$O$8,0)),2,0),"")
Range("J12").Select
Selection.FormulaArray = _
"=IFERROR(OFFSET(INDEX('BCHN.T1.2017.xls'!data, MATCH(RC[-7]&R6C1, 'BCHN.T1.2017.xls'!SM&Ngay, 0), MATCH(R9C10,BCHN!R8C3:R8C15,0)),2,0),"""")"
' chieu cao dau cuoi
' =IFERROR((OFFSET(INDEX('BCHN.T1.2017 .xls'!data, MATCH(C12&$A$7, 'BCHN.T1.2017.xls'!SM&Ngay, 0), MATCH($K$9,BCHN!$C$8:$Q$8, 0)),2,0)),"")
Range("K12").Select
Selection.FormulaArray = _
"=IFERROR((OFFSET(INDEX('BCHN.T1.2017.xls'!data, MATCH(RC[-8]&R7C1, 'BCHN.T1.2017.xls'!SM&Ngay, 0), MATCH(R9C11,BCHN!R8C3:R8C17, 0)),2,0)),"""")"
' dau theo dinh muc
' =IFERROR(F12*E12,"")
Range("L12").Select
ActiveCell.FormulaR1C1 = "=IFERROR(RC[-6]*RC[-7],"""")"
' ton dau
' =IFERROR(L12-(G12+H12-I12),"")
Range("M12").Select
ActiveCell.FormulaR1C1 = "=IFERROR(RC[-1]-(RC[-6]+RC[-5]-RC[-4]),"""")"
' tieu thu dau trung binh
' =IFERROR(IF(F12=0,"",(H12+G12-I12)/F12),"")
Range("N12").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(IF(RC[-8]=0,"""",(RC[-6]+RC[-7]-RC[-5])/RC[-8]),"""")"
' chenh lech gio thuc te
' =IFERROR(IF(F12=0,"",E12-N12),"")
Range("O12").Select
ActiveCell.FormulaR1C1 = "=IFERROR(IF(RC[-9]=0,"""",RC[-10]-RC[-1]),"""")"
' cong truong
' =IFERROR((VLOOKUP(C12,LK!$C$12:$P$128,14,0))," ")
Range("P12").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR((VLOOKUP(RC[-13],LK!R12C3:R128C16,14,0)),"" "")"
' =1
Range("A12").Select
ActiveCell.FormulaR1C1 = "1"
Range("A13").Select
' so thu tu
' =IF(C13<>"",A12+1,"")
ActiveCell.FormulaR1C1 = "=IF(RC[2]<>"""",R[-1]C+1,"""")"
Range("B12:P12").Select
Selection.AutoFill Destination:=Range("B12:P128"), Type:=xlFillDefault
Range("B12:P128").Select
ActiveWindow.SmallScroll Down:=-129
Range("A13").Select
Selection.AutoFill Destination:=Range("A13:A128"), Type:=xlFillDefault
Range("A13:A128").Select
ActiveWindow.SmallScroll Down:=-123
Range("A12:P128").Select
ActiveWindow.SmallScroll Down:=-120
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("C9:C10").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "S? máy"
Range("C11").Select
' ham tinh tong ton dau (du tru dung sau): k lien quan lam =SUMIFS(BCHN!$J$10:$J$3264,'BCHN.T1.2017 .xls'!Ngay,"<="&$A$7,'BCHN.T1.2017 .xls'!SM,C12)-SUMIFS(BCHN!$Q$10:$Q$3264,'BCHN.T1.2017 .xls'!Ngay,"<="&$A$7,SM,C12)
End Sub
Bác BaTe cái này hình như liên quan đến xây dựng đó Bác nên cần phải bảo mật đây. Chắc có gì quan trọng đâyCode "khủng" thiệt.
Khóa là phải, kẻo mọi người "chôm chĩa".
Mình mới tìm hiểu về VBA nên mn đừng cườiCode "khủng" thiệt.
Khóa là phải, kẻo mọi người "chôm chĩa".
Cái chiều cao dầu đầu (10) và chiều cao chiều cuối (11) lấy sang như thế nào. Mình đọc công thức không hiểuMình mới tìm hiểu về VBA nên mn đừng cười). Mình khóa là do k muốn bị soi mói chứ code cùi của mình ai thèm lấy chứ
)
1 tháng của bạn có 30 ngày chẳng hạn thì file BCTH cột 10 và cột 11 tính như thế nàoCó cách nào khác chỉ dùng code VBA thôi chứ không phải dùng công thức Excel, rồi lại chuyển từ công thức excel sang code như thế này k mn
Chiều cao dầu đó tìm kiếm theo 2 điều kiện ngày tháng và cột "chiều cao dầu đầu" hay "chiều cao dầu cuối" ở sheet BCHN đó. Còn muốn tìm chiều cao ngày nào thì sửa 2 ô A6 và A7 ở sheet BCTH đấy1 tháng của bạn có 30 ngày chẳng hạn thì file BCTH cột 10 và cột 11 tính như thế nào
Code "khủng" thiệt.
Khóa là phải, kẻo mọi người "chôm chĩa".
Bạn thử xem file xem có đúng khôngChiều cao dầu đó tìm kiếm theo 2 điều kiện ngày tháng và cột "chiều cao dầu đầu" hay "chiều cao dầu cuối" ở sheet BCHN đó. Còn muốn tìm chiều cao ngày nào thì sửa 2 ô A6 và A7 ở sheet BCTH đấy
Chuẩn men rồi bạn ơi. Thanks bạn nhéBạn thử xem file xem có đúng không
Bạn thử xem file xem có đúng không
Cao thu giai thich doan code nay de minh tham khao nhe
Public Sub Tonghop()
Dim sArr(), tArr(), dArr(), I As Long, K As Long, Thang As Long
Dim Dic As Object, Tem As String
Set Dic = CreateObject("Scripting.Dictionary") ' tao mot doi tung DIC
Thang = Month(Sheets("BCTH").Range("G6")) 'Lay gia tri Thang tai G6 gan vao bien Thang
With Sheets("CSDL")
tArr = .Range(.Range("B11"), .Range("B65535").End(3)).Resize(, 6).Value ' chon Vung tu B1 den , co du lieu cuoi cung
End With
For I = 1 To UBound(tArr, 1) ' cho bien I chay tu B4 cho den cuoi cung co chua du lieu
Dic.Item(tArr(I, 1)) = I ' Thiet lap gia tri Item bang I
Next I
With Sheets("BCHN")
sArr = .Range(.Range("B10"), .Range("B65535").End(3)).Resize(, 15).Value ' chon vung du lieu B10 den cot P co chua du lieu cuoi cung
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 15) ' Xac dinh lai kich co cua mang dArr
For I = 1 To UBound(sArr, 1) ' Cho Bien I chay tu 1 cho den het trong cot B
If Month(sArr(I, 1)) = Thang Then ' Neu tung dong, co thang = gia tri thang da khai bao ben sheet BCTH thi
Tem = sArr(I, 3) ' Them so may vao bien Tem
If Not Dic.Exists(Tem) Then ' Kiem tra trong Dic co so may chua?
K = K + 1 ' Tang bien K len
Dic.Add Tem, K ' Chua co thi Add vao, Key la Tem, Items la K
dArr(K, 1) = K ' Them vao mang darr STT K,
dArr(K, 2) = sArr(I, 2) 'Them Loai may vao mang
dArr(K, 3) = Tem ' Them So May vao mang
dArr(K, 4) = tArr(Dic.Item(Tem), 5) 'Them Dinh Muc theo chieu cao vao mang
dArr(K, 5) = tArr(Dic.Item(Tem), 6) ' Them Dinh Muc theo So Lit vao mang
dArr(K, 6) = sArr(I, 8) 'Them Gio lam vao mang
dArr(K, 7) = sArr(I, 9) 'Them Dau Nhan vao Mang
dArr(K, 10) = sArr(I, 6) ' Them Chieu cao dau dau
dArr(K, 11) = "" ' Trong
Else
dArr(Dic.Item(Tem), 6) = dArr(Dic.Item(Tem), 6) + sArr(I, 8)
dArr(Dic.Item(Tem), 7) = dArr(Dic.Item(Tem), 7) + sArr(I, 9)
dArr(Dic.Item(Tem), 11) = sArr(I, 7)
dArr(K, 8) = dArr(K, 4) * dArr(K, 10): dArr(K, 9) = dArr(K, 4) * dArr(K, 11)
dArr(K, 12) = dArr(K, 5) * dArr(K, 6)
dArr(K, 13) = dArr(K, 12) - (dArr(K, 7) + dArr(K, 8) - dArr(K, 9))
dArr(K, 14) = (dArr(K, 8) + dArr(K, 7) - dArr(K, 9)) / dArr(K, 6)
dArr(K, 15) = dArr(K, 5) - dArr(K, 14)
End If
End If
Next I
With Sheets("BCTH") ' chon Sheet
.Range("A12:P" & .Range("A65535").End(3).Row + 1).ClearContents ' Xac dinh vung du lieu can xoa
.Range("A12").Resize(K, 15) = dArr ' Xac dinh Vung du lieu can dan Mang xuong bang tinh
End With
Set Dic = Nothing
End Sub
Sao đã "lẽ thì " rồi còn "chẳn thì"Minh hiểu rồi, thank so much!
P/s: Mình có 1 câu hỏi them là muốn viết code copy dữ liệu "A1:A100" row lẽ thì paste cột "B1:B50" chẳn thì "C1:C50"
Sao mà ngọng ghê gớm thế hả chời?muốn viết code copy dữ liệu "A1:A100" row lẽ thì paste cột "B1:B50" chẳn thì "C1:C50"
Ồ may nhờ anh em mới hiểu bạn ấy nói gì Lẽ chẳn có nghĩa là chẵn lẻ. (Có nghĩa là Copy từ A1 đến A100, nếu dòng chẵn thì điền vào cột B, dòng lẻ điền vào cột C)Sao mà ngọng ghê gớm thế hả chời?
(Nếu mà nghe nói chắc loạn tai luôn!)
https://vi.wikipedia.org/wiki/Tính_chẵn_lẻ
Đây không phải là trường hợp phong phú. Đây là vấn đề học tiếng Việt.Ồ may nhờ anh em mới hiểu bạn ấy nói gì Lẽ chẳn có nghĩa là chẵn lẻ. (Có nghĩa là Copy từ A1 đến A100, nếu dòng chẵn thì điền vào cột B, dòng lẻ điền vào cột C)
Tiếng việt phong phú qua anh ạ![]()
Sao mà ngọng ghê gớm thế hả chời?
(Nếu mà nghe nói chắc loạn tai luôn!)
https://vi.wikipedia.org/wiki/Tính_chẵn_lẻ
Chính xácỒ may nhờ anh em mới hiểu bạn ấy nói gì Lẽ chẳn có nghĩa là chẵn lẻ. (Có nghĩa là Copy từ A1 đến A100, nếu dòng chẵn thì điền vào cột B, dòng lẻ điền vào cột C)
Tiếng việt phong phú qua anh ạ![]()
Inh lít mới sợ sai chứ dùng tiếng mẹ đẻ có sai 1 chút người ta cũng đoán được.
Ở đây chẳn lẽ không có dê chứ nếu có dê thì có lẽ tôi đã đoán là trái lẽ rồi (chẳng phải lẽ thì là trái, phải hôn)
Có gì đâu mà rối.Bạn làm mình rối quá
Bạn viết tiếng Anh được (hổng biết trúng hông) nhưng tiếng Việt thì sai bét nên mọi người ngạc nhiên thôi.Minh hiểu rồi, thank so much!
P/s: Mình có 1 câu hỏi them là muốn viết code copy dữ liệu "A1:A100" row lẽ thì paste cột "B1:B50" chẳn thì "C1:C50"
Bạn ơi, giúp mình thêm một tí đc k. Mình muốn thêm đoạn code lấy tên công trường cuối tháng ở cột 0 sheet "BCHN" qua cột P sheet "BCTH" ấy, tháng có 30 ngày thì lấy tên công trường ngày 30, tháng 31 thì lấy tên công trường ngày 31... Mình mò mãi k đcBạn thử xem file xem có đúng không
bạn thay Code cũ bằng cái này thử:Bạn ơi, giúp mình thêm một tí đc k. Mình muốn thêm đoạn code lấy tên công trường cuối tháng ở cột 0 sheet "BCHN" qua cột P sheet "BCTH" ấy, tháng có 30 ngày thì lấy tên công trường ngày 30, tháng 31 thì lấy tên công trường ngày 31... Mình mò mãi k đc![]()
Sub Tonghop()
Dim sArr(), tArr(), dArr(), I As Long, K As Long, Thang As Long
Dim Dic As Object, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
Thang = Month(Sheets("BCTH").Range("G6"))
With Sheets("CSDL")
tArr = .Range(.Range("B11"), .Range("B65535").End(3)).Resize(, 6).Value
End With
For I = 1 To UBound(tArr, 1)
Dic.Item(tArr(I, 1)) = I
Next I
With Sheets("BCHN")
sArr = .Range(.Range("B10"), .Range("B65535").End(3)).Resize(, 15).Value
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 16)
For I = 1 To UBound(sArr, 1)
If Month(sArr(I, 1)) = Thang Then
Tem = sArr(I, 3)
If Not Dic.Exists(Tem) Then
K = K + 1
Dic.Add Tem, K
dArr(K, 1) = K
dArr(K, 2) = sArr(I, 2): dArr(K, 3) = Tem
dArr(K, 4) = tArr(Dic.Item(Tem), 5): dArr(K, 5) = tArr(Dic.Item(Tem), 6)
dArr(K, 6) = sArr(I, 8): dArr(K, 7) = sArr(I, 9)
dArr(K, 10) = sArr(I, 6)
dArr(K, 16) = sArr(I, 14)
Else
dArr(Dic.Item(Tem), 6) = dArr(Dic.Item(Tem), 6) + sArr(I, 8)
dArr(Dic.Item(Tem), 7) = dArr(Dic.Item(Tem), 7) + sArr(I, 9)
dArr(Dic.Item(Tem), 16) = sArr(I, 14)
dArr(Dic.Item(Tem), 11) = sArr(I, 7)
dArr(K, 8) = dArr(K, 4) * dArr(K, 10): dArr(K, 9) = dArr(K, 4) * dArr(K, 11)
dArr(K, 12) = dArr(K, 5) * dArr(K, 6)
dArr(K, 13) = dArr(K, 12) - (dArr(K, 7) + dArr(K, 8) - dArr(K, 9))
dArr(K, 14) = (dArr(K, 8) + dArr(K, 7) - dArr(K, 9)) / dArr(K, 6)
dArr(K, 15) = dArr(K, 5) - dArr(K, 14)
End If
End If
Next I
With Sheets("BCTH")
.Range("A12:P" & .Range("A65535").End(3).Row + 1).ClearContents
.Range("A12").Resize(K, 16) = dArr
End With
Set Dic = Nothing
End Sub
Giúp mình thêm cái sheet "Âm dầu" này nữa được k bạnChuẩn rồi. Cảm ơn bạn nhé![]()
bạn thay Code cũ bằng cái này thử:
Mã:Sub Tonghop() Dim sArr(), tArr(), dArr(), I As Long, K As Long, Thang As Long Dim Dic As Object, Tem As String Set Dic = CreateObject("Scripting.Dictionary") Thang = Month(Sheets("BCTH").Range("G6")) With Sheets("CSDL") tArr = .Range(.Range("B11"), .Range("B65535").End(3)).Resize(, 6).Value End With For I = 1 To UBound(tArr, 1) Dic.Item(tArr(I, 1)) = I Next I With Sheets("BCHN") sArr = .Range(.Range("B10"), .Range("B65535").End(3)).Resize(, 15).Value End With ReDim dArr(1 To UBound(sArr, 1), 1 To 16) For I = 1 To UBound(sArr, 1) If Month(sArr(I, 1)) = Thang Then Tem = sArr(I, 3) If Not Dic.Exists(Tem) Then K = K + 1 Dic.Add Tem, K dArr(K, 1) = K dArr(K, 2) = sArr(I, 2): dArr(K, 3) = Tem dArr(K, 4) = tArr(Dic.Item(Tem), 5): dArr(K, 5) = tArr(Dic.Item(Tem), 6) dArr(K, 6) = sArr(I, 8): dArr(K, 7) = sArr(I, 9) dArr(K, 10) = sArr(I, 6) dArr(K, 16) = sArr(I, 14) Else dArr(Dic.Item(Tem), 6) = dArr(Dic.Item(Tem), 6) + sArr(I, 8) dArr(Dic.Item(Tem), 7) = dArr(Dic.Item(Tem), 7) + sArr(I, 9) dArr(Dic.Item(Tem), 16) = sArr(I, 14) dArr(Dic.Item(Tem), 11) = sArr(I, 7) dArr(K, 8) = dArr(K, 4) * dArr(K, 10): dArr(K, 9) = dArr(K, 4) * dArr(K, 11) dArr(K, 12) = dArr(K, 5) * dArr(K, 6) dArr(K, 13) = dArr(K, 12) - (dArr(K, 7) + dArr(K, 8) - dArr(K, 9)) dArr(K, 14) = (dArr(K, 8) + dArr(K, 7) - dArr(K, 9)) / dArr(K, 6) dArr(K, 15) = dArr(K, 5) - dArr(K, 14) End If End If Next I With Sheets("BCTH") .Range("A12:P" & .Range("A65535").End(3).Row + 1).ClearContents .Range("A12").Resize(K, 16) = dArr End With Set Dic = Nothing End Sub
Giúp mình thêm cái sheet "Âm dầu" này nữa được k bạn. Thanh bạnbạn thay Code cũ bằng cái này thử:
Mã:Sub Tonghop() Dim sArr(), tArr(), dArr(), I As Long, K As Long, Thang As Long Dim Dic As Object, Tem As String Set Dic = CreateObject("Scripting.Dictionary") Thang = Month(Sheets("BCTH").Range("G6")) With Sheets("CSDL") tArr = .Range(.Range("B11"), .Range("B65535").End(3)).Resize(, 6).Value End With For I = 1 To UBound(tArr, 1) Dic.Item(tArr(I, 1)) = I Next I With Sheets("BCHN") sArr = .Range(.Range("B10"), .Range("B65535").End(3)).Resize(, 15).Value End With ReDim dArr(1 To UBound(sArr, 1), 1 To 16) For I = 1 To UBound(sArr, 1) If Month(sArr(I, 1)) = Thang Then Tem = sArr(I, 3) If Not Dic.Exists(Tem) Then K = K + 1 Dic.Add Tem, K dArr(K, 1) = K dArr(K, 2) = sArr(I, 2): dArr(K, 3) = Tem dArr(K, 4) = tArr(Dic.Item(Tem), 5): dArr(K, 5) = tArr(Dic.Item(Tem), 6) dArr(K, 6) = sArr(I, 8): dArr(K, 7) = sArr(I, 9) dArr(K, 10) = sArr(I, 6) dArr(K, 16) = sArr(I, 14) Else dArr(Dic.Item(Tem), 6) = dArr(Dic.Item(Tem), 6) + sArr(I, 8) dArr(Dic.Item(Tem), 7) = dArr(Dic.Item(Tem), 7) + sArr(I, 9) dArr(Dic.Item(Tem), 16) = sArr(I, 14) dArr(Dic.Item(Tem), 11) = sArr(I, 7) dArr(K, 8) = dArr(K, 4) * dArr(K, 10): dArr(K, 9) = dArr(K, 4) * dArr(K, 11) dArr(K, 12) = dArr(K, 5) * dArr(K, 6) dArr(K, 13) = dArr(K, 12) - (dArr(K, 7) + dArr(K, 8) - dArr(K, 9)) dArr(K, 14) = (dArr(K, 8) + dArr(K, 7) - dArr(K, 9)) / dArr(K, 6) dArr(K, 15) = dArr(K, 5) - dArr(K, 14) End If End If Next I With Sheets("BCTH") .Range("A12:P" & .Range("A65535").End(3).Row + 1).ClearContents .Range("A12").Resize(K, 16) = dArr End With Set Dic = Nothing End Sub
Code lấy dầu Âm, Âm dầu đâyGiúp mình thêm cái sheet "Âm dầu" này nữa được k bạn. Thanh bạn)
Sub DauAm()
Dim sArr, dArr, tArr, I As Long, K As Long
Dim Dic As Object, tem As String
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("CSDL")
tArr = .Range(.Range("C11"), .Range("C65535").End(3)).Resize(, 8).Value
End With
For I = 1 To UBound(tArr, 1)
Dic.Item(tArr(I, 1)) = I
Next I
With Sheets("BCTH")
sArr = .Range(.Range("B12"), .Range("B65535").End(3)).Resize(, 15).Value
End With
ReDim dArr(1 To UBound(sArr), 1 To 9)
For I = 1 To UBound(sArr)
If sArr(I, 12) <= 100 Then
tem = sArr(I, 1)
K = K + 1
dArr(K, 1) = K: dArr(K, 2) = sArr(I, 1): dArr(K, 3) = sArr(I, 2)
dArr(K, 4) = sArr(I, 5): dArr(K, 5) = sArr(I, 6): dArr(K, 6) = sArr(I, 12)
dArr(K, 7) = tArr(Dic.Item(tem), 7): dArr(K, 8) = tArr(Dic.Item(tem), 8): dArr(K, 9) = sArr(I, 15)
End If
Next I
With Sheet3
.Range("A6:I" & .Range("A65535").End(3).Row + 1).ClearContents
.Range("A6").Resize(K, 9) = dArr
End With
End Sub
Ok rồi. Thanks bro nhé. Tính mình hiền lành lắm, diệt cỏ toàn diệt tận gốc thôi =))))Code lấy dầu Âm, Âm dầu đây
P/s: Dầu âm là do máy tính chạy ra đừng trừ lương lái máy tội họ ( Có thì cho nghỉ việcMã:Sub DauAm() Dim sArr, dArr, tArr, I As Long, K As Long Dim Dic As Object, tem As String Set Dic = CreateObject("Scripting.Dictionary") With Sheets("CSDL") tArr = .Range(.Range("C11"), .Range("C65535").End(3)).Resize(, 8).Value End With For I = 1 To UBound(tArr, 1) Dic.Item(tArr(I, 1)) = I Next I With Sheets("BCTH") sArr = .Range(.Range("B12"), .Range("B65535").End(3)).Resize(, 15).Value End With ReDim dArr(1 To UBound(sArr), 1 To 9) For I = 1 To UBound(sArr) If sArr(I, 12) <= 100 Then tem = sArr(I, 1) K = K + 1 dArr(K, 1) = K: dArr(K, 2) = sArr(I, 1): dArr(K, 3) = sArr(I, 2) dArr(K, 4) = sArr(I, 5): dArr(K, 5) = sArr(I, 6): dArr(K, 6) = sArr(I, 12) dArr(K, 7) = tArr(Dic.Item(tem), 7): dArr(K, 8) = tArr(Dic.Item(tem), 8): dArr(K, 9) = sArr(I, 15) End If Next I With Sheet3 .Range("A6:I" & .Range("A65535").End(3).Row + 1).ClearContents .Range("A6").Resize(K, 9) = dArr End With End Sub
nhẹ nhẹ vậy thôi...)
Lạm dụng Dic "to" quá nha. Thử không xài Dic cho trường hợp này đi bạn...
Nếu không dùng Dic thì em biết mỗi cách dùng VLOOKUP thôi thầy ạ. Thầy hướng dẫn thêm cho em với
Bạn đính kèm file lỗi lên. Vì lâu quá rồi hiện tại chưa hình dung lại đượcBạn ơi. Trog quá trình chạy lại phát sih 1 lỗi, đó là nếu như cột I của sheet "BCHN" nhập hơi nhiều số 0 hoặc là trống nhiều ô dữ liệu thì k chạy được sheet "BCTH" và nó báo lỗi như hình dưới. Vì k phải khi nào mình cũng nhập được hết dữ liệu, mà k nhập hết thì nó lại k chạy đc ra BCTH. Bạn giúp mìh với !View attachment 181523
Hai trườg hợp trống nhiều ô dữ liệu và có nhiều sô "0" đây, chạy sheet "BCHN" đều bị lỗi Division by zeroBạn đính kèm file lỗi lên. Vì lâu quá rồi hiện tại chưa hình dung lại được
Cái đó họ nói là biểu thức chia cho số 0. Bạn thử sửa lại như thế này xemHai trườg hợp trống nhiều ô dữ liệu và có nhiều sô "0" đây, chạy sheet "BCHN" đều bị lỗi Division by zero
Sub Tonghop()
Dim sArr(), tArr(), dArr(), I As Long, K As Long, Thang As Long
Dim Dic As Object, tem As String
Set Dic = CreateObject("Scripting.Dictionary")
Thang = Month(Sheets("BCTH").Range("G6"))
With Sheets("CSDL")
tArr = .Range(.Range("B11"), .Range("B65535").End(3)).Resize(, 6).Value
End With
For I = 1 To UBound(tArr, 1)
Dic.Item(tArr(I, 1)) = I
Next I
With Sheets("BCHN")
sArr = .Range(.Range("B10"), .Range("B65535").End(3)).Resize(, 15).Value
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 16)
For I = 1 To UBound(sArr, 1)
If Month(sArr(I, 1)) = Thang Then
tem = sArr(I, 3)
If Not Dic.Exists(tem) Then
K = K + 1
Dic.Add tem, K
dArr(K, 1) = K
dArr(K, 2) = sArr(I, 2): dArr(K, 3) = tem
dArr(K, 4) = tArr(Dic.Item(tem), 5): dArr(K, 5) = tArr(Dic.Item(tem), 6)
dArr(K, 6) = sArr(I, 8): dArr(K, 7) = sArr(I, 9)
dArr(K, 10) = sArr(I, 6)
dArr(K, 16) = sArr(I, 14)
Else
dArr(Dic.Item(tem), 6) = dArr(Dic.Item(tem), 6) + sArr(I, 8)
dArr(Dic.Item(tem), 7) = dArr(Dic.Item(tem), 7) + sArr(I, 9)
dArr(Dic.Item(tem), 16) = sArr(I, 14)
dArr(Dic.Item(tem), 11) = sArr(I, 7)
dArr(K, 8) = dArr(K, 4) * dArr(K, 10): dArr(K, 9) = dArr(K, 4) * dArr(K, 11)
dArr(K, 12) = dArr(K, 5) * dArr(K, 6)
dArr(K, 13) = dArr(K, 12) - (dArr(K, 7) + dArr(K, 8) - dArr(K, 9))
If dArr(K, 6) <> 0 Then dArr(K, 14) = (dArr(K, 8) + dArr(K, 7) - dArr(K, 9)) / dArr(K, 6)
dArr(K, 15) = dArr(K, 5) - dArr(K, 14)
End If
End If
Next I
With Sheets("BCTH")
.Range("A12:P" & .Range("A65535").End(3).Row + 1).ClearContents
.Range("A12").Resize(K, 16) = dArr
End With
Set Dic = Nothing
End Sub