Tổng hợp chấm công từ nhiều file (1 người xem)

  • Thread starter Thread starter notmehp
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

notmehp

Thành viên mới
Tham gia
7/2/14
Bài viết
5
Được thích
0
Kính chào quý anh chị GPE,

Em có 1 vấn đề nho nhỏ muốn nhờ anh chị em GPE tư vấn giúp:
Tổng hợp công từ các đơn vị gửi về... (Chi tiết trong file đính kèm)

Hiện tại em đã dùng Marco tổng hợp được công 1 quý/1 đơn vị.
Tuy nhiên, đoạn code sẽ rất dài nếu em cứ Copy&Paste, thay đổi tên file, tên sheet với các đơn vị còn lại.
Em muốn hỏi có cách nào đặt để đoạn code đơn giản hơn và thay đổi tùy biến đơn vị, quý (đặt biến và gọi ra cho các sheet, file) theo ý mình được không ạ?

Mã:
[/COLOR]Sub CONG_QUY2_DP1()'
' CODE TONG HOP CONG THEO QUY
' VI DU: TONG HOP CONG QUY II
' DON VI: DIEU PHOI 1
'
Dim A As Integer '//VI TRI MOI TURN 1
Dim B As Integer '// VI TRI MOI TURN 2
Dim X As String '//DUONG DAN MOI
       
    '// TONG HOP DU LIEU THANG 4
Sheets("DP1").Select '//CHON SHEET TONG HOP XOA DU LIEU CU
    Range("A2:O4").Select '//CHON VUNG DU LIEU COPY
    Range(Selection, Selection.End(xlToRight)).Select '//CHON VUNG DU LIEU CU
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents '// XOA
    
    '// TURN 1
    X = ActiveWorkbook.Path '//LAY DUONG DAN MO FILE KHAC
Workbooks.Open (X & "\CC\DP1.xlsx") '//MO FILE TRONG DUONG DAN
Windows("DP1.xlsx").Activate '//MO FILE DU LIEU THO
Sheets("Demo_v2").Select '//CHON SHEET THANG 4
    Range("B4:F4").Select '//CHON VUNG DU LIEU COPY
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy '//COPY
Windows("BANG CONG.xlsm").Activate '//MO FILE TONG HOP
Sheets("DP1").Select '//CHON SHEET DP1
    A = Range("Q1").Value + 2 '// LAY TOA DO VI TRI MOI
    Range("A" & A).Select '//CHON VI TRI MOI
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False '//PASTE
    Application.CutCopyMode = False '//CLEAR CLIPBOARD
    
    '// TURN 2
    Windows("DP1.xlsx").Activate '//MO FILE DU LIEU THO
    Sheets("Demo_v2").Select '//CHON SHEET THANG 4
    Range("G4:O4").Select '//CHON VUNG DU LIEU COPY
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy '//COPY
    Windows("BANG CONG.xlsm").Activate '//MO FILE TONG HOP
Sheets("DP1").Select '//CHON SHEET DP1
    B = Range("R1").Value + 2 '// LAY TOA DO VI TRI MOI
    Range("G" & B).Select '//CHON VI TRI MOI
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False '//PASTE
    Application.CutCopyMode = False '//CLEAR CLIPBOARD


     '// TURN 3
Windows("DP1.xlsx").Activate '//MO FILE DU LIEU THO
Sheets("T5").Select '//CHON SHEET THANG 4
    Range("B4:F4").Select '//CHON VUNG DU LIEU COPY
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy '//COPY
    Windows("BANG CONG.xlsm").Activate '//MO FILE TONG HOP
Sheets("DP1").Select '//CHON SHEET DP1
    A = Range("Q1").Value + 2 '// LAY TOA DO VI TRI MOI
    Range("A" & A).Select '//CHON VI TRI MOI
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False '//PASTE
    Application.CutCopyMode = False '//CLEAR CLIPBOARD
    
    '// TURN 4
    Windows("DP1.xlsx").Activate '//MO FILE DU LIEU THO
Sheets("T5").Select '//CHON SHEET THANG 4
    Range("G4:O4").Select '//CHON VUNG DU LIEU COPY
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy '//COPY
    Windows("BANG CONG.xlsm").Activate '//MO FILE TONG HOP
Sheets("DP1").Select '//CHON SHEET DP1
    B = Range("R1").Value + 2 '// LAY TOA DO VI TRI MOI
    Range("G" & B).Select '//CHON VI TRI MOI
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False '//PASTE
    Application.CutCopyMode = False '//CLEAR CLIPBOARD


    '// TURN 5
    Windows("DP1.xlsx").Activate '//MO FILE DU LIEU THO
Sheets("T6").Select '//CHON SHEET THANG 4
    Range("B4:F4").Select '//CHON VUNG DU LIEU COPY
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy '//COPY
    Windows("BANG CONG.xlsm").Activate '//MO FILE TONG HOP
Sheets("DP1").Select '//CHON SHEET DP1
    A = Range("Q1").Value + 2 '// LAY TOA DO VI TRI MOI
    Range("A" & A).Select '//CHON VI TRI MOI
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False '//PASTE
    Application.CutCopyMode = False '//CLEAR CLIPBOARD
    
    '// TURN 6
    Windows("DP1.xlsx").Activate '//MO FILE DU LIEU THO
Sheets("T6").Select '//CHON SHEET THANG 4
    Range("G4:O4").Select '//CHON VUNG DU LIEU COPY
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy '//COPY
    Windows("BANG CONG.xlsm").Activate '//MO FILE TONG HOP
Sheets("DP1").Select '//CHON SHEET DP1
    B = Range("R1").Value + 2 '// LAY TOA DO VI TRI MOI
    Range("G" & B).Select '//CHON VI TRI MOI
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False '//PASTE
    Application.CutCopyMode = False '//CLEAR CLIPBOARD


Workbooks("DP1.xlsx").Close False '//DONG FILE CHAM CONG DP1
    
    '//DAT HAM MA_TL
    Range("F2").Select '//CHON O F2
    ActiveCell.FormulaR1C1 = "=RC[-4]&"" ""&RC[-2]&"" ""&RC[-1]" '//DAT HAM
    Selection.AutoFill Destination:=Range("F2:F300")
    
    '//FORMAT TABLE TURN 1
    Range("A2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlHairline
    End With
    
    '//FORMAT TURN 2
    A = Range("Q1").Value + 2 '// LAY TOA DO VI TRI MOI
    Range("F" & A).Select '//CHON VI TRI MOI
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    
    Range("A2").Select '//CHON VI TRI A2
    

End Sub[COLOR=#000000]

Đơn giản hơn là em muốn đặt tất cả các chỗ có DP1 thành biến i (DP1, DP2, KD, v.v.) và biến j (T1, T2, T3); k (T4, T5, T6); l (T7, T8, T9); m (T10, T11, T12)
Sau đó em có thể gọi các biến này ra và tùy biến thay thế chạy hàm tương ứng.
Do không biết nhiều code nên em khá mù mờ mong ACE giúp đỡ.

Em xin cảm ơn!
Email: xefordhanoi@gmail.com
 

File đính kèm

Lần chỉnh sửa cuối:
Kính chào quý anh chị GPE,

Em có 1 vấn đề nho nhỏ muốn nhờ anh chị em GPE tư vấn giúp:
Tổng hợp công từ các đơn vị gửi về... (Chi tiết trong file đính kèm)

Hiện tại em đã dùng Marco tổng hợp được công 1 quý/1 đơn vị.
Tuy nhiên, đoạn code sẽ rất dài nếu em cứ Copy&Paste, thay đổi tên file, tên sheet với các đơn vị còn lại.
Em muốn hỏi có cách nào đặt để đoạn code đơn giản hơn và thay đổi tùy biến đơn vị, quý (đặt biến và gọi ra cho các sheet, file) theo ý mình được không ạ?

Em xin cảm ơn!
Email: xefordhanoi@gmail.com
Vẫn chưa hiểu ý bạn lắm. Bạn cần nêu rõ bạn muốn làm trên file nào, sheet nào, và làm như thế nào.
 
Upvote 0
Vẫn chưa hiểu ý bạn lắm. Bạn cần nêu rõ bạn muốn làm trên file nào, sheet nào, và làm như thế nào.

BANG CONG bao gồm các sheet DP1, DP2... (các đơn vị) và sheet TongHop
Trong thư mục CC: DP1.slsx... Là các file chấm công từ các đơn vị gửi lên, bao gồm các sheet con T1, T2...
(file Test.xlsm bỏ em gửi thừa).

Em muốn làm trên file BANG CONG.xlsm
Dữ liệu từ các file:
DP1.xlsx -> Sheet DP1 (BANG CONG.xlsm) -> Sheet TongHop (BANG CONG.xlsm)
DP2.xlsx -> Sheet DP2 (BANG CONG.xlsm) -> Sheet TongHop (BANG CONG.xlsm)
.......
Hiện tại, em đã dùng marco chạy đoạn mã tổng hợp dữ liệu bảng chấm công quý II của DP1 (Sheet Demo v2, T5, T6) vào Sheet DP1 (BANG CONG.xlsm) + dữ liệu đánh tay sẵn ở các sheet DP2, DP3, v.v. -> sheet TongHop (BANG CONG.xlsm) em đã chạy được.
Nếu Copy&Paste và điều chỉnh thông số với các sheet còn lại cũng vẫn chạy được.
Nhưng em thấy làm như thế đoạn mã khá là dài, có cách nào tối ưu ngắn hơn không ạ (đặt và gọi biến cho các file, sheet còn lại) để đoạn mã tự chạy.
Do em không biết lập trình nên không thể làm ngắn đoạn mã được.
Mong các anh chị giúp đỡ.

Em cảm ơn!
 
Upvote 0
BANG CONG bao gồm các sheet DP1, DP2... (các đơn vị) và sheet TongHop
Trong thư mục CC: DP1.slsx... Là các file chấm công từ các đơn vị gửi lên, bao gồm các sheet con T1, T2...
(file Test.xlsm bỏ em gửi thừa).

Em muốn làm trên file BANG CONG.xlsm
Dữ liệu từ các file:
DP1.xlsx -> Sheet DP1 (BANG CONG.xlsm) -> Sheet TongHop (BANG CONG.xlsm)
DP2.xlsx -> Sheet DP2 (BANG CONG.xlsm) -> Sheet TongHop (BANG CONG.xlsm)
.......
Hiện tại, em đã dùng marco chạy đoạn mã tổng hợp dữ liệu bảng chấm công quý II của DP1 (Sheet Demo v2, T5, T6) vào Sheet DP1 (BANG CONG.xlsm) + dữ liệu đánh tay sẵn ở các sheet DP2, DP3, v.v. -> sheet TongHop (BANG CONG.xlsm) em đã chạy được.
Nếu Copy&Paste và điều chỉnh thông số với các sheet còn lại cũng vẫn chạy được.
Nhưng em thấy làm như thế đoạn mã khá là dài, có cách nào tối ưu ngắn hơn không ạ (đặt và gọi biến cho các file, sheet còn lại) để đoạn mã tự chạy.
Do em không biết lập trình nên không thể làm ngắn đoạn mã được.
Mong các anh chị giúp đỡ.

Em cảm ơn!
Bạn check file. Code này chỉ cập nhất dữ liệu cho các sheet, phụ thuộc vào từ tháng (O1) đến tháng(Q1). Còn sheet "Tong hợp" sẽ viết sau.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn check file. Code này chỉ cập nhất dữ liệu cho các sheet, phụ thuộc vào từ tháng (O1) đến tháng(Q1). Còn sheet "Tong hợp" sẽ viết sau.

Cám ơn anh, em rất khoái khi cả cái đoạn dài ngoằng em tự làm sẽ dài gấp mấy mười mấy lần như thế... ĐÃ NGẮN TÍ TẸO LẠI.
Sheet "Tổng hợp" em chạy lại trên code cũ em viết cũng ngắn ok rồi ạ.

Em cám ơn anh nhiều!

Không biết anh có ở Hải Phòng hôm nào anh em giao lưu ạ
 
Upvote 0
Cám ơn anh, em rất khoái khi cả cái đoạn dài ngoằng em tự làm sẽ dài gấp mấy mười mấy lần như thế... ĐÃ NGẮN TÍ TẸO LẠI.
Sheet "Tổng hợp" em chạy lại trên code cũ em viết cũng ngắn ok rồi ạ.

Em cám ơn anh nhiều!

Không biết anh có ở Hải Phòng hôm nào anh em giao lưu ạ
Mình ko ở HP rùi. Ko biết code tổng hợp của bạn thế nào? biết đâu có thể ngắn lại cả code tổng hợp. hi
 
Upvote 0
Mình ko ở HP rùi. Ko biết code tổng hợp của bạn thế nào? biết đâu có thể ngắn lại cả code tổng hợp. hi

Mã:
Sub Update_BANGCONG()


    Sheets("TongHop").Select
    'Range("A3").Select
    'Range(Selection, Selection.End(xlToRight)).Select
    'Range(Selection, Selection.End(xlDown)).Select
    'Selection.ClearContents
' Xoa du lieu cu
    Range("A3").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
'Cap nhat du lieu moi theo COnsolidate
    Range("A2").Select
    Selection.Consolidate Sources:=Array( _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_BLD" _
        , _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_DP1" _
        , _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_DP2" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_DP3" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_DP4" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_DP5" _
        , _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_LOG" _
        , _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_KD" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_TCKT" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_VP" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_CNSG" _
        ), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False

Dim A As Integer
A = Range("D1").Value


'Tinh CONG SP QUY DOI tu dong
    Range("K3").Select
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(R2C2,HsCong,2,FALSE)*RC[-9]+VLOOKUP(R2C3,HsCong,2,FALSE)*RC[-8]+VLOOKUP(R2C4,HsCong,2,FALSE)*RC[-7]+VLOOKUP(R2C5,HsCong,2,FALSE)*RC[-6]"
    Range("K3", "K" & A + 2).Select
    Selection.FillDown
'Tinh CONG SP tu dong
    Range("L3").Select
    ActiveCell.FormulaR1C1 = _
        "=(RC[-10]+RC[-9]+RC[-8]+RC[-7])"
    Range("L3", "L" & A + 2).Select
    Selection.FillDown
End Sub

Code tổng hợp của em nó thế này, chắc là vẫn dài lê thê >_<
Bài toán khó nhất bác làm ngắn tí như thế, quả thực là EM RẤT KHOÁI.
Đoạn tổng hợp hơi dài 1 tí cũng không sao.
 
Upvote 0
Mã:
Sub Update_BANGCONG()


    Sheets("TongHop").Select
    'Range("A3").Select
    'Range(Selection, Selection.End(xlToRight)).Select
    'Range(Selection, Selection.End(xlDown)).Select
    'Selection.ClearContents
' Xoa du lieu cu
    Range("A3").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
'Cap nhat du lieu moi theo COnsolidate
    Range("A2").Select
    Selection.Consolidate Sources:=Array( _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_BLD" _
        , _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_DP1" _
        , _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_DP2" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_DP3" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_DP4" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_DP5" _
        , _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_LOG" _
        , _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_KD" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_TCKT" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_VP" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_CNSG" _
        ), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False

Dim A As Integer
A = Range("D1").Value


'Tinh CONG SP QUY DOI tu dong
    Range("K3").Select
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(R2C2,HsCong,2,FALSE)*RC[-9]+VLOOKUP(R2C3,HsCong,2,FALSE)*RC[-8]+VLOOKUP(R2C4,HsCong,2,FALSE)*RC[-7]+VLOOKUP(R2C5,HsCong,2,FALSE)*RC[-6]"
    Range("K3", "K" & A + 2).Select
    Selection.FillDown
'Tinh CONG SP tu dong
    Range("L3").Select
    ActiveCell.FormulaR1C1 = _
        "=(RC[-10]+RC[-9]+RC[-8]+RC[-7])"
    Range("L3", "L" & A + 2).Select
    Selection.FillDown
End Sub

Code tổng hợp của em nó thế này, chắc là vẫn dài lê thê >_<
Bài toán khó nhất bác làm ngắn tí như thế, quả thực là EM RẤT KHOÁI.
Đoạn tổng hợp hơi dài 1 tí cũng không sao.
Mã:
Sub Update_BANGCONG()


    Sheets("TongHop").Select
    'Range("A3").Select
    'Range(Selection, Selection.End(xlToRight)).Select
    'Range(Selection, Selection.End(xlDown)).Select
    'Selection.ClearContents
' Xoa du lieu cu
    Range("A3").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
'Cap nhat du lieu moi theo COnsolidate
    Range("A2").Select
    Selection.Consolidate Sources:=Array( _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_BLD" _
        , _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_DP1" _
        , _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_DP2" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_DP3" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_DP4" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_DP5" _
        , _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_LOG" _
        , _
        "'" & ActiveWorkbook.FullName & "'!DsLuong_KD" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_TCKT" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_VP" _
        , _
       "'" & ActiveWorkbook.FullName & "'!DsLuong_CNSG" _
        ), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False

Dim A As Integer
A = Range("D1").Value


'Tinh CONG SP QUY DOI tu dong
    Range("K3").Select
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(R2C2,HsCong,2,FALSE)*RC[-9]+VLOOKUP(R2C3,HsCong,2,FALSE)*RC[-8]+VLOOKUP(R2C4,HsCong,2,FALSE)*RC[-7]+VLOOKUP(R2C5,HsCong,2,FALSE)*RC[-6]"
    Range("K3", "K" & A + 2).Select
    Selection.FillDown
'Tinh CONG SP tu dong
    Range("L3").Select
    ActiveCell.FormulaR1C1 = _
        "=(RC[-10]+RC[-9]+RC[-8]+RC[-7])"
    Range("L3", "L" & A + 2).Select
    Selection.FillDown
End Sub

Code tổng hợp của em nó thế này, chắc là vẫn dài lê thê >_<
Bài toán khó nhất bác làm ngắn tí như thế, quả thực là EM RẤT KHOÁI.
Đoạn tổng hợp hơi dài 1 tí cũng không sao.
Code của bạn là ghi macro rùi. Code mình tự viết chác là sẽ ko ngắn lại đâu, nhưng mai mình sẽ viết cho b tham khảo.
Sẽ có 2 option (mình sẽ làm theo option 2)
1. Mảng và dic
2. ADO
 
Upvote 0
Code của bạn là ghi macro rùi. Code mình tự viết chác là sẽ ko ngắn lại đâu, nhưng mai mình sẽ viết cho b tham khảo.
Sẽ có 2 option (mình sẽ làm theo option 2)
1. Mảng và dic
2. ADO

Code tổng hợp.
Mã:
Sub tonghop2()
Dim sh As Worksheet, query As String
Application.ScreenUpdating = False
Range("A3:L500").Clear
For Each sh In Worksheets
    If sh.Name <> "TongHop" And sh.Name <> "HsCong" And sh.Name <> "INFORM" And sh.Name <> "Form_BangChamCcong" Then
        query = query + "select f1,f2,f3,f4,f5,f6,f7,f8,f9,f10 from [" & sh.Name & "$F2:O200]" & Chr(10) & "union all " & Chr(10)
    End If
Next
    query = Left(query, Len(query) - 11)
    query = "select f1, sum(f2), sum(f3), sum(f4),sum(f5), sum(f6),sum(f7), sum(f8),sum(f9), sum(f10), sum(f2)+sum(f3)*1.2+sum(f4)*1.4+sum(f5)*1.5,sum(f2)+sum(f3)+sum(f4)+sum(f5) " & Chr(10) & "from " & Chr(10) & "( " & Chr(10) & query
    query = query + ") as a " & Chr(10) & "where f1 is not null " & Chr(10) & "group by f1"

    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
     With cn
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";"
        .Open
    End With
    rs.Open query, cn
    Range("A3").CopyFromRecordset rs
    rs.Close: cn.Close: Set rs = Nothing: Set cn = Nothing
Range("A2:L" & Range("A65000").End(3).Row).Borders.LineStyle = xlContinuous
Application.ScreenUpdating = True
End Sub
 
Upvote 0

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

Back
Top Bottom