[Hỏi cách tạo VBA] - Xin các cao nhân chỉ giúp cách tạo VBA cho công việc thuận tiện hơn (2 người xem)

Liên hệ QC

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

  • Tôi tuân thủ nội quy khi đăng bài

    manhcuonghg

    Thành viên mới
    Tham gia
    13/5/12
    Bài viết
    37
    Được thích
    7
    Mong các cao nhân chỉ giúp mình cách tạo VBA
    Đầu tiên mình có các file Excel dữ liệu trong tháng từ file excel 1.xlsx, 2.xlsx đến cuối tháng (Ví dụ: tháng có 31 ngày → từ file 1.xlsx đến 31.xlsx) dữ liệu của các file giống bảng bên dưới, Trong đó dòng 1 là số thứ tự của các cột trong Excel cột A, cột B, … Đến cột P.
    Mình muốn lấy số liệu bình quân của các file excel 1.xlsm, 2.xlsm đến cuối tháng lấy tất cả các dữ liệu của các file tính bình quân “(1.xlsx + 2.xlsx+ 3.xlsx+ 4.xlsx….đến cuối tháng)/ số ngày trong tháng” (Ví dụ: có 31 ngày → từ file (1.xlsx +…+ 31.xlsx)/31).
    Dòng 2 ở ô A1 đến ô P1 giữ nguyên (dữ liệu ô A1 là seq … đến ô P1 là tile_nhom5)
    Các file 1.xlsx, 2.xlsx đến cuối tháng mẫu giống bảng bên dưới chỉ có số liệu từ cột E2 đến P19 là thay đổi theo ngày.


    A

    B

    C

    D

    E

    F

    G

    H

    I

    J

    K

    L

    M

    N

    O

    P

    seq

    brcd

    empno

    empnm

    tongduno

    tile

    nhom1

    tile_nhom1

    nhom2

    tile_nhom2

    nhom3

    tile_nhom3

    nhom4

    tile_nhom4

    nhom5

    tile_nhom5

    1​
    820600461Nguyen Van 1
    91.494.860.001

    6,729​
    84.663.437.154
    93

    675.000.000

    0,738​
    0​
    0​
    0​
    0​
    6156422847​
    6,729​
    2​
    820600347
    Nguyen Van 2

    48.734.888.553

    0,564​
    48.229.709.327
    99

    230.221.774

    0,472​
    0​
    0​
    86000000​
    0,176​
    188957452​
    0,388​
    3​
    820600465
    Nguyen Van 3

    83.932.281.345

    0,298​
    83.612.281.345
    100

    70.000.000

    0,083​
    0​
    0​
    0​
    0​
    250000000​
    0,298​
    4​
    820600479
    Nguyen Van 4

    77.266.043.042

    0,259​
    77.066.043.042
    100

    -

    0​
    0​
    0​
    200000000​
    0,259​
    0​
    0​
    5​
    820600475
    Nguyen Van 5

    71.337.872.801

    0,197​
    70.647.307.868
    99

    550.000.000

    0,771​
    0​
    0​
    0​
    0​
    140564933​
    0,197​
    6​
    820600481
    Nguyen Van 6

    58.597.754.720

    0,046​
    58.291.538.718
    99

    279.519.942

    0,477​
    0​
    0​
    0​
    0​
    26696060​
    0,046​
    7​
    820600462
    Nguyen Van 7

    67.598.579.241

    0​
    67.519.836.416
    100

    78.742.825

    0,116​
    0​
    0​
    0​
    0​
    0​
    0​
    8​
    820600474
    Nguyen Van 8

    -

    0​
    -
    -

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    9​
    820600376
    Nguyen Van 9

    101.788.335.216

    0​
    101.788.335.216
    100

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    10​
    820600473
    Nguyen Van 10

    75.323.855.141

    0​
    74.113.855.141
    98

    1.210.000.000

    1,606​
    0​
    0​
    0​
    0​
    0​
    0​
    11​
    820600468
    Nguyen Van 11

    74.408.153.257

    0​
    74.038.280.532
    100

    369.872.725

    0,497​
    0​
    0​
    0​
    0​
    0​
    0​
    12​
    820600459
    Nguyen Van 12

    -

    0​
    -
    -

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    13​
    820600476
    Nguyen Van 13

    -

    0​
    -
    -

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    14​
    820600477
    Nguyen Van 14

    83.138.895.539

    0​
    83.018.895.539
    100

    120.000.000

    0,144​
    0​
    0​
    0​
    0​
    0​
    0​
    15​
    820600482
    Nguyen Van 15

    -

    0​
    -
    -

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    16​
    820600466
    Nguyen Van 16

    -

    0​
    -
    -

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    17​
    820600444
    Nguyen Van 17

    28.096.082.848

    0​
    28.096.082.848
    100

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    18​
    820600143
    Nguyen Van 18

    72.480.136.347

    0​
    72.480.136.347
    100

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​

    Mình muốn mở đầu VBA có nhập số ngày cuối cùng của tháng (VD: 30 → từ file 1.xlsx đến 30.xlsx) nhập số 30 để tính số liệu bình quân nếu mình nhập vào là 10 thì sẽ tính số liệu bình quân của các ô từ E2 đến P19 crủa các file từ ngày (1.xlsx + 2.xlsx +… +10.xlsx)/10 để tính bình quân

    File chạy VBA là file TongHop có sheet TongHop để lấy kết quả
    Dòng 1 ở ô A1 dữ liệu là seq là STT, ô B2 là brcd không có dữ liệu giữ nguyên, C1 là empno là Ma nhan vien, D1 là empnm là Ten nhan vien, E1 là tongduno là Tong du no, còn lai số liệu ở các cột còn lại của dòng 2 đễ nguyên tên giúp mình
    Ghi vào sheet TongHop tất cả số liệu tính bình quân (số liệu tính bình quân của từ ô từ ô E2 đến ô P19), Dữ liệu từ ô A1 đến D19 giữ nguyên.
    Hãy giúp mình tạo VBA hoàn chỉnh giúp mình với ạ. Xin cám ơn các bác nhiều.


    PS: Mình tự học VBA bằng cách record macro nên trình vẫn gà quá ạ, Tự học tự mfò nên ko biết làm cách nào nâng Lever cao hơn @@ Các cao nhân đã trải qua như e xin hướng dẫn em phương pháps với ạ.
    Bài đã được tự động gộp:
     
    Lần chỉnh sửa cuối:
    Mong các cao nhân chỉ giúp mình cách tạo VBA
    Đầu tiên mình có các file Excel dữ liệu trong tháng từ file excel 1.xlsx, 2.xlsx đến cuối tháng (Ví dụ: tháng có 31 ngày → từ file 1.xlsx đến 31.xlsx) dữ liệu của các file giống bảng bên dưới, Trong đó dòng 1 là số thứ tự của các cột trong Excel cột A, cột B, … Đến cột P.
    Mình muốn lấy số liệu bình quân của các file excel 1.xlsm, 2.xlsm đến cuối tháng lấy tất cả các dữ liệu của các file tính bình quân “(1.xlsx + 2.xlsx+ 3.xlsx+ 4.xlsx….đến cuối tháng)/ số ngày trong tháng” (Ví dụ: có 31 ngày → từ file (1.xlsx +…+ 31.xlsx)/31).
    Dòng 2 ở ô A1 đến ô P1 giữ nguyên (dữ liệu ô A1 là seq … đến ô P1 là tile_nhom5)
    Các file 1.xlsx, 2.xlsx đến cuối tháng mẫu giống bảng bên dưới chỉ có số liệu từ cột E2 đến P19 là thay đổi theo ngày.


    A

    B

    C

    D

    E

    F

    G

    H

    I

    J

    K

    L

    M

    N

    O

    P

    seq

    brcd

    empno

    empnm

    tongduno

    tile

    nhom1

    tile_nhom1

    nhom2

    tile_nhom2

    nhom3

    tile_nhom3

    nhom4

    tile_nhom4

    nhom5

    tile_nhom5

    1​
    820600461Nguyen Van 1
    91.494.860.001

    6,729​
    84.663.437.154
    93

    675.000.000

    0,738​
    0​
    0​
    0​
    0​
    6156422847​
    6,729​
    2​
    820600347
    Nguyen Van 2

    48.734.888.553

    0,564​
    48.229.709.327
    99

    230.221.774

    0,472​
    0​
    0​
    86000000​
    0,176​
    188957452​
    0,388​
    3​
    820600465
    Nguyen Van 3

    83.932.281.345

    0,298​
    83.612.281.345
    100

    70.000.000

    0,083​
    0​
    0​
    0​
    0​
    250000000​
    0,298​
    4​
    820600479
    Nguyen Van 4

    77.266.043.042

    0,259​
    77.066.043.042
    100

    -

    0​
    0​
    0​
    200000000​
    0,259​
    0​
    0​
    5​
    820600475
    Nguyen Van 5

    71.337.872.801

    0,197​
    70.647.307.868
    99

    550.000.000

    0,771​
    0​
    0​
    0​
    0​
    140564933​
    0,197​
    6​
    820600481
    Nguyen Van 6

    58.597.754.720

    0,046​
    58.291.538.718
    99

    279.519.942

    0,477​
    0​
    0​
    0​
    0​
    26696060​
    0,046​
    7​
    820600462
    Nguyen Van 7

    67.598.579.241

    0​
    67.519.836.416
    100

    78.742.825

    0,116​
    0​
    0​
    0​
    0​
    0​
    0​
    8​
    820600474
    Nguyen Van 8

    -

    0​
    -
    -

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    9​
    820600376
    Nguyen Van 9

    101.788.335.216

    0​
    101.788.335.216
    100

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    10​
    820600473
    Nguyen Van 10

    75.323.855.141

    0​
    74.113.855.141
    98

    1.210.000.000

    1,606​
    0​
    0​
    0​
    0​
    0​
    0​
    11​
    820600468
    Nguyen Van 11

    74.408.153.257

    0​
    74.038.280.532
    100

    369.872.725

    0,497​
    0​
    0​
    0​
    0​
    0​
    0​
    12​
    820600459
    Nguyen Van 12

    -

    0​
    -
    -

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    13​
    820600476
    Nguyen Van 13

    -

    0​
    -
    -

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    14​
    820600477
    Nguyen Van 14

    83.138.895.539

    0​
    83.018.895.539
    100

    120.000.000

    0,144​
    0​
    0​
    0​
    0​
    0​
    0​
    15​
    820600482
    Nguyen Van 15

    -

    0​
    -
    -

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    16​
    820600466
    Nguyen Van 16

    -

    0​
    -
    -

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    17​
    820600444
    Nguyen Van 17

    28.096.082.848

    0​
    28.096.082.848
    100

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​
    18​
    820600143
    Nguyen Van 18

    72.480.136.347

    0​
    72.480.136.347
    100

    -

    0​
    0​
    0​
    0​
    0​
    0​
    0​

    Mình muốn mở đầu VBA có nhập số ngày cuối cùng của tháng (VD: 30 → từ file 1.xlsx đến 30.xlsx) nhập số 30 để tính số liệu bình quân nếu mình nhập vào là 10 thì sẽ tính số liệu bình quân của các ô từ E2 đến P19 crủa các file từ ngày (1.xlsx + 2.xlsx +… +10.xlsx)/10 để tính bình quân

    File chạy VBA là file TongHop có sheet TongHop để lấy kết quả
    Dòng 1 ở ô A1 dữ liệu là seq là STT, ô B2 là brcd không có dữ liệu giữ nguyên, C1 là empno là Ma nhan vien, D1 là empnm là Ten nhan vien, E1 là tongduno là Tong du no, còn lai số liệu ở các cột còn lại của dòng 2 đễ nguyên tên giúp mình
    Ghi vào sheet TongHop tất cả số liệu tính bình quân (số liệu tính bình quân của từ ô từ ô E2 đến ô P19), Dữ liệu từ ô A1 đến D19 giữ nguyên.
    Hãy giúp mình tạo VBA hoàn chỉnh giúp mình với ạ. Xin cám ơn các bác nhiều.


    PS: Mình tự học VBA bằng cách record macro nên trình vẫn gà quá ạ, Tự học tự mfò nên ko biết làm cách nào nâng Lever cao hơn @@ Các cao nhân đã trải qua như e xin hướng dẫn em phương pháps với ạ.
    Bài đã được tự động gộp:
    Theo như tôi hiểu thì là bạn muốn Cộng số liệu các cột F,G,I,...của các File (là số liệu của các ngày trong 1 tháng-mỗi file 1 ngày) theo từng người.- và theo từng Title sau đó chia cho tổng số ngày trong tháng.
    Bạn phải có file giả định nguồn và file đích (TongHop) thì mới dễ hình dung.
     
    Upvote 0
    Theo như tôi hiểu thì là bạn muốn Cộng số liệu các cột F,G,I,...của các File (là số liệu của các ngày trong 1 tháng-mỗi file 1 ngày) theo từng người.- và theo từng Title sau đó chia cho tổng số ngày trong tháng.
    Bạn phải có file giả định nguồn và file đích (TongHop) thì mới dễ hình dung.
    Vâng cám ơn bác, em lại không ở CQ để lấy file dữ liệu gửi lên cho các bác Hdan e, e ở nhà tự hỏi AI nó trả lời VBA ntn có hợp lý ko các bác có phải sửa gì không ạ. (ko có file dữ liệu để chạy thử khổ quá, ở Cơ Quan copy dữ liệu vào USB baảo về làm mà Cắm vào PC copy dữ liệu rồi. Nhưng về lại ko rút USB ra mang về thế mơí A kay....

    Sub TinhDuNoBinhQuan()

    Dim soNgay As Integer
    Dim duongDan As String
    Dim tongDuNo As Object
    Dim i As Integer, j As Long
    Dim tenFile As String
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim filePath As String
    Dim rowData As Range
    Dim duNo As Double

    ' Can khai bao mang de chua ten nhan vien
    Dim tenNV(1 To 18) As String
    tenNV(1) = "Lai Van Toan"
    tenNV(2) = "Nguyen Ngoc Van"
    tenNV(3) = "Le Tien Cong"
    tenNV(4) = "Bui Manh Cuong"
    tenNV(5) = "Sam Van Quang"
    tenNV(6) = "Nguyen Huu Thai"
    tenNV(7) = "Nguyen The Anh"
    tenNV(8) = "Dinh Viet Cuong"
    tenNV(9) = "Duong Van Tuan"
    tenNV(10) = "Nguyen Thanh Tung"
    tenNV(11) = "Be Anh Tuan"
    tenNV(12) = "Hoang Manh Cuong"
    tenNV(13) = "Nguyen Tien Dung"
    tenNV(14) = "Le Tien Tung"
    tenNV(15) = "Vu Ba Bong"
    tenNV(16) = "Nguyen Xuan Thuyet"
    tenNV(17) = "Nguyen Ngoc Tan"
    tenNV(18) = "Tran Thi Huyen"

    ' Khoi tao bien tong du no
    Set tongDuNo = CreateObject("Scripting.Dictionary")

    ' Lay thu muc chua cac file 1.xlsm, 2.xlsm, ...
    duongDan = ThisWorkbook.Path & "\"

    ' Nhap so ngay can tinh du no binh quan
    soNgay = InputBox("Nhap so ngay trong thang can tinh (1-31):", "Tinh du no binh quan")
    If soNgay <= 0 Then MsgBox "So ngay khong hop le!": Exit Sub

    ' Duyet qua tung file tu 1.xlsx, 2.xlsx, ...
    For i = 1 To soNgay
    tenFile = duongDan & i & ".xlsx" ' Lay ten file
    If Dir(tenFile) <> "" Then
    Set wb = Workbooks.Open(tenFile, ReadOnly:=True)
    Set ws = wb.Sheets(1) ' Lay sheet dau tien cua file

    ' Duyet qua tung nhan vien va tinh tong du no
    For j = 2 To 19 ' Duyet tu dong 2 den 19
    If ws.Cells(j, 1).Value <> "" Then
    ' Cap nhat tong du no cho tung nhan vien
    If tongDuNo.exists(ws.Cells(j, 3).Value) Then
    tongDuNo(ws.Cells(j, 3).Value) = tongDuNo(ws.Cells(j, 3).Value) + ws.Cells(j, 5).Value
    Else
    tongDuNo.Add ws.Cells(j, 3).Value, ws.Cells(j, 5).Value
    End If
    End If
    Next j
    wb.Close False
    End If
    Next i

    ' Ghi ket qua vao sheet TongHop
    Set ws = ThisWorkbook.Sheets("TongHop")
    ws.Range("A2;P100").ClearContents ' Xoa du lieu cu

    ' Ghi du lieu vao sheet TongHop
    For i = 1 To 18
    ws.Cells(i + 1, 1).Value = i ' Ghi so thu tu (STT)
    ws.Cells(i + 1, 2).Value = "820600" & (i + 460) ' Ma nhan vien gia dinh
    ws.Cells(i + 1, 3).Value = tenNV(i) ' Ghi ten nhan vien
    ' Tinh du no binh quan va chia cho so ngay trong thang
    If tongDuNo.exists(tenNV(i)) Then
    ws.Cells(i + 1, 5).Value = tongDuNo(tenNV(i)) / soNgay
    Else
    ws.Cells(i + 1, 5).Value = 0
    End If
    Next i

    MsgBox "Da tinh xong du no binh quan!", vbInformation
    End Sub
     
    Lần chỉnh sửa cuối:
    Upvote 0

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

    Back
    Top Bottom