Chuyển dữ liệu từ Column qua row (1 người xem)

Liên hệ QC

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

Phuong0907357642

Thành viên mới
Tham gia
5/8/11
Bài viết
41
Được thích
0
Em chào các anh chị
Hiện tại em đang quản lý 237 nhân viên cả nước về Lịch công tác (LCT). LCT sẽ được thiết kế 1 tháng có 4 tuần và chỉ đi bán hàng từ thứ 2 đến thứ 6 với nơi bán hàng và số lượng khách hàng quy định.
Đây là mẫu nhân viên sẽ tự cập nhật vào và mình sẽ làm báo cáo cho cấp trên về việc bán hàng như thế nào qua các tuần để tính KPI cho nhân viên.
Nhưng vì file mẫu của cấp trên là để cấp trên kiểm tra ngẫu nhiên 1 người nào đó còn mình thì mình phải báo cáo mỗi tháng cho 237 nhân viên này.
Nên mình cần các anh chị giúp đỡ chuyển từ file mẫu qua file sheet "mong muốn" vì mình sẽ làm được như pivot table nhưng mình làm tay rất nhiều
Nhờ các anh chị hướng dẫn cách mình chuyern từ sheet "Mẫu" qua sheet "mong muốn" guips ah

Em xin chân thành cám ơn
 

File đính kèm

Em chào các anh chị
Hiện tại em đang quản lý 237 nhân viên cả nước về Lịch công tác (LCT). LCT sẽ được thiết kế 1 tháng có 4 tuần và chỉ đi bán hàng từ thứ 2 đến thứ 6 với nơi bán hàng và số lượng khách hàng quy định.
Đây là mẫu nhân viên sẽ tự cập nhật vào và mình sẽ làm báo cáo cho cấp trên về việc bán hàng như thế nào qua các tuần để tính KPI cho nhân viên.
Nhưng vì file mẫu của cấp trên là để cấp trên kiểm tra ngẫu nhiên 1 người nào đó còn mình thì mình phải báo cáo mỗi tháng cho 237 nhân viên này.
Nên mình cần các anh chị giúp đỡ chuyển từ file mẫu qua file sheet "mong muốn" vì mình sẽ làm được như pivot table nhưng mình làm tay rất nhiều
Nhờ các anh chị hướng dẫn cách mình chuyern từ sheet "Mẫu" qua sheet "mong muốn" guips ah

Em xin chân thành cám ơn
Bạn biết Vba không.
 
Em chào các anh chị
Hiện tại em đang quản lý 237 nhân viên cả nước về Lịch công tác (LCT). LCT sẽ được thiết kế 1 tháng có 4 tuần và chỉ đi bán hàng từ thứ 2 đến thứ 6 với nơi bán hàng và số lượng khách hàng quy định.
Đây là mẫu nhân viên sẽ tự cập nhật vào và mình sẽ làm báo cáo cho cấp trên về việc bán hàng như thế nào qua các tuần để tính KPI cho nhân viên.
Nhưng vì file mẫu của cấp trên là để cấp trên kiểm tra ngẫu nhiên 1 người nào đó còn mình thì mình phải báo cáo mỗi tháng cho 237 nhân viên này.
Nên mình cần các anh chị giúp đỡ chuyển từ file mẫu qua file sheet "mong muốn" vì mình sẽ làm được như pivot table nhưng mình làm tay rất nhiều
Nhờ các anh chị hướng dẫn cách mình chuyern từ sheet "Mẫu" qua sheet "mong muốn" guips ah

Em xin chân thành cám ơn
Bạn quản lý nhân viên thì sao bạn không bảo nhân viên nhập theo cái form "mong muốn" của bạn luôn cho khỏe nhỉ? Cái form đầu có dễ nhìn hơn và cũng có dễ lấy dữ liệu hơn đâu
 
Em biết VBA nhưng không giỏi lắm vì mới học lớp cơ bản ah.
EM biết VBA làm được nhưng em không biết làm
Có gì anh viết code cho em học hỏi nhé
Em cám ơn
Bài đã được tự động gộp:

Bạn quản lý nhân viên thì sao bạn không bảo nhân viên nhập theo cái form "mong muốn" của bạn luôn cho khỏe nhỉ? Cái form đầu có dễ nhìn hơn và cũng có dễ lấy dữ liệu hơn đâu
Vì file này là phòng quản trị sẽ yêu cầu họ làm rồi gởi lên hệ thống trình với giám đốc, còn nếu kêu họ nhập thì mình đâu có hỏi để làm gì ah. Phòng mình là phòng xử lý lại thông tin và làm báo cáo lớp dưới trước khi trình BOD nên mới nhờ hỗ trợ ah. làm thì được nhưng làm tay và sai sót nhiều quá nên nhờ giúp đỡ.
 
Em chào các anh chị
Hiện tại em đang quản lý 237 nhân viên cả nước về Lịch công tác (LCT). LCT sẽ được thiết kế 1 tháng có 4 tuần và chỉ đi bán hàng từ thứ 2 đến thứ 6 với nơi bán hàng và số lượng khách hàng quy định.
Đây là mẫu nhân viên sẽ tự cập nhật vào và mình sẽ làm báo cáo cho cấp trên về việc bán hàng như thế nào qua các tuần để tính KPI cho nhân viên.
Nhưng vì file mẫu của cấp trên là để cấp trên kiểm tra ngẫu nhiên 1 người nào đó còn mình thì mình phải báo cáo mỗi tháng cho 237 nhân viên này.
Nên mình cần các anh chị giúp đỡ chuyển từ file mẫu qua file sheet "mong muốn" vì mình sẽ làm được như pivot table nhưng mình làm tay rất nhiều
Nhờ các anh chị hướng dẫn cách mình chuyern từ sheet "Mẫu" qua sheet "mong muốn" guips ah

Em xin chân thành cám ơn
Nếu bạn chịu chỉnh sửa dữ liệu cột [Ngày] như hình sau thì mình sẽ có cách giúp bạn.

1599531743426.png
 
Em chào các anh chị
Hiện tại em đang quản lý 237 nhân viên cả nước về Lịch công tác (LCT). LCT sẽ được thiết kế 1 tháng có 4 tuần và chỉ đi bán hàng từ thứ 2 đến thứ 6 với nơi bán hàng và số lượng khách hàng quy định.
Đây là mẫu nhân viên sẽ tự cập nhật vào và mình sẽ làm báo cáo cho cấp trên về việc bán hàng như thế nào qua các tuần để tính KPI cho nhân viên.
Nhưng vì file mẫu của cấp trên là để cấp trên kiểm tra ngẫu nhiên 1 người nào đó còn mình thì mình phải báo cáo mỗi tháng cho 237 nhân viên này.
Nên mình cần các anh chị giúp đỡ chuyển từ file mẫu qua file sheet "mong muốn" vì mình sẽ làm được như pivot table nhưng mình làm tay rất nhiều
Nhờ các anh chị hướng dẫn cách mình chuyern từ sheet "Mẫu" qua sheet "mong muốn" guips ah

Em xin chân thành cám ơn
Chạy code
Mã:
Sub XYZ()
  Dim sArr(), Res(), tSum(), gSum(), Dic As Object
  Dim iKey, QVK$, Thu$
  Dim sRow&, sCol&, i&, k&, iR&, j&, jC&, sRowRes&, sColRes&
 
  QVK = "QUAY V" & ChrW(7872) & " KHO"
 
  With Sheet1
    i = .Range("B" & Rows.Count).End(xlUp).Row
    j = .Cells(7, Columns.Count).End(xlToLeft).Column
    sArr = .Range("A7", .Cells(i + 1, j)).Value
  End With
  Set Dic = CreateObject("scripting.dictionary")
  sRow = UBound(sArr, 1): sCol = UBound(sArr, 2)
  sArr(sRow, 1) = "AAA"
 
  sRowRes = 1000 'Gioi han so dong ket qua
  sColRes = j \ 2 + 2
  ReDim gSum(1 To sColRes)
  ReDim Res(0 To sRowRes, 1 To sColRes)
  Res(0, 1) = sArr(1, 1)
  Res(0, 2) = sArr(1, 2)
  For j = 3 To sCol Step 2
    Res(0, (j + 3) \ 2) = sArr(1, j)
  Next j
  For i = 2 To sRow - 1
    If sArr(i, 1) <> Empty Then
      Thu = sArr(i, 1)
      Res(k + 1, 1) = Thu
      ReDim tSum(1 To sColRes)
      Dic.RemoveAll
    End If
    For j = 2 To sCol Step 2
      iRey = sArr(i, j)
      If iRey <> Empty And iRey <> QVK Then
        If Dic.exists(iRey) = False Then
          k = k + 1
          Dic.Add iRey, k
          Res(k, 2) = iRey
        End If
        iR = Dic.Item(iRey)
        jC = (j + 4) \ 2
        Res(iR, jC) = sArr(i, j + 1)
        tSum(jC) = tSum(jC) + sArr(i, j + 1)
      End If
    Next j
    If sArr(i + 1, 1) <> Empty Then
      k = k + 1
      Res(k, 2) = QVK
      k = k + 1
      Res(k, 1) = Thu & " Total"
      For j = 3 To sColRes
        Res(k, j) = tSum(j)
        gSum(j) = gSum(j) + tSum(j)
      Next j
    End If
  Next i
  k = k + 1
  For j = 3 To sColRes
    Res(k, j) = gSum(j)
  Next j
  With Sheet2
    .UsedRange.ClearContents
    .Range("A4").Resize(k + 1, sColRes) = Res
  End With
End Sub
 
Em xin lỗi vì đăng vào topic nhưng em có đăng ở nơi khác nhưng chắc k ai thấy để giúp ạ.

Em có file này (em xin lỗi vì đã phải xóa bớt thông tin), ở cột giá bán mỗi lần em nhập số liệu bằng tay vào là file bị đơ mất 20 s k phản hồi. Anh chị có thể giúp em được k ạ.

Em đã có tìm hiểu xóa style, name, object... mà k ăn thua ạ. Em cảm ơn anh chị.
 

File đính kèm

Chạy code
Mã:
Sub XYZ()
  Dim sArr(), Res(), tSum(), gSum(), Dic As Object
  Dim iKey, QVK$, Thu$
  Dim sRow&, sCol&, i&, k&, iR&, j&, jC&, sRowRes&, sColRes&

  QVK = "QUAY V" & ChrW(7872) & " KHO"

  With Sheet1
    i = .Range("B" & Rows.Count).End(xlUp).Row
    j = .Cells(7, Columns.Count).End(xlToLeft).Column
    sArr = .Range("A7", .Cells(i + 1, j)).Value
  End With
  Set Dic = CreateObject("scripting.dictionary")
  sRow = UBound(sArr, 1): sCol = UBound(sArr, 2)
  sArr(sRow, 1) = "AAA"

  sRowRes = 1000 'Gioi han so dong ket qua
  sColRes = j \ 2 + 2
  ReDim gSum(1 To sColRes)
  ReDim Res(0 To sRowRes, 1 To sColRes)
  Res(0, 1) = sArr(1, 1)
  Res(0, 2) = sArr(1, 2)
  For j = 3 To sCol Step 2
    Res(0, (j + 3) \ 2) = sArr(1, j)
  Next j
  For i = 2 To sRow - 1
    If sArr(i, 1) <> Empty Then
      Thu = sArr(i, 1)
      Res(k + 1, 1) = Thu
      ReDim tSum(1 To sColRes)
      Dic.RemoveAll
    End If
    For j = 2 To sCol Step 2
      iRey = sArr(i, j)
      If iRey <> Empty And iRey <> QVK Then
        If Dic.exists(iRey) = False Then
          k = k + 1
          Dic.Add iRey, k
          Res(k, 2) = iRey
        End If
        iR = Dic.Item(iRey)
        jC = (j + 4) \ 2
        Res(iR, jC) = sArr(i, j + 1)
        tSum(jC) = tSum(jC) + sArr(i, j + 1)
      End If
    Next j
    If sArr(i + 1, 1) <> Empty Then
      k = k + 1
      Res(k, 2) = QVK
      k = k + 1
      Res(k, 1) = Thu & " Total"
      For j = 3 To sColRes
        Res(k, j) = tSum(j)
        gSum(j) = gSum(j) + tSum(j)
      Next j
    End If
  Next i
  k = k + 1
  For j = 3 To sColRes
    Res(k, j) = gSum(j)
  Next j
  With Sheet2
    .UsedRange.ClearContents
    .Range("A4").Resize(k + 1, sColRes) = Res
  End With
End Sub
Cám ơn anh rất nhiều, em đã xài được rồi anh, chắc bữa nào nhờ anh "chỉ bảo thêm", Xin chân thành cám ơn
Bài đã được tự động gộp:

Nếu bạn chịu chỉnh sửa dữ liệu cột [Ngày] như hình sau thì mình sẽ có cách giúp bạn.

View attachment 245062
Bạn ơi, nếu mình thêm cũng được không sao, nhưng bạn sẽ viết vba luôn không hay mình làm hàm vậy bạn, chỉ mình với nhé
 
Bạn ơi, nếu mình thêm cũng được không sao, nhưng bạn sẽ viết vba luôn không hay mình làm hàm vậy bạn, chỉ mình với nhé
Nếu dữ liệu chuẩn thì công cụ có sẵn của Excel (Pivot Table) đã giải quyết được rồi. Nhẹ nhàng và chuyên nghiệp
 
Cám ơn anh rất nhiều, em đã xài được rồi anh, chắc bữa nào nhờ anh "chỉ bảo thêm", Xin chân thành cám ơn
Bài đã được tự động gộp:


Bạn ơi, nếu mình thêm cũng được không sao, nhưng bạn sẽ viết vba luôn không hay mình làm hàm vậy bạn, chỉ mình với nhé
Bạn có thể thử code sau:

Mã:
Option Explicit

Sub TongHopDL_HLMT()
    Dim strSQL As String, strSQLTotal As String, strSht As String
    strSht = "[" & Sheet1.Name & "$A8:I65000]"
    strSQL = ""
    strSQL = strSQL & "SELECT F1, " & vbCrLf
    strSQL = strSQL & "       F2, " & vbCrLf
    strSQL = strSQL & "       IIF(ISNULL(F3), 0, F3) AS Tuan1, " & vbCrLf
    strSQL = strSQL & "       0                      AS Tuan2, " & vbCrLf
    strSQL = strSQL & "       0                      AS Tuan3, " & vbCrLf
    strSQL = strSQL & "       0                      AS Tuan4 " & vbCrLf
    strSQL = strSQL & "FROM   " & strSht & vbCrLf
    strSQL = strSQL & " UNION ALL " & vbCrLf
    strSQL = strSQL & "SELECT F1, " & vbCrLf
    strSQL = strSQL & "       F4, " & vbCrLf
    strSQL = strSQL & "       0, " & vbCrLf
    strSQL = strSQL & "       IIF(ISNULL(F5), 0, F5), " & vbCrLf
    strSQL = strSQL & "       0, " & vbCrLf
    strSQL = strSQL & "       0 " & vbCrLf
    strSQL = strSQL & "FROM   " & strSht & vbCrLf
    strSQL = strSQL & " UNION ALL " & vbCrLf
    strSQL = strSQL & "SELECT F1, " & vbCrLf
    strSQL = strSQL & "       F6, " & vbCrLf
    strSQL = strSQL & "       0, " & vbCrLf
    strSQL = strSQL & "       0, " & vbCrLf
    strSQL = strSQL & "       IIF(ISNULL(F7), 0, F7), " & vbCrLf
    strSQL = strSQL & "       0 " & vbCrLf
    strSQL = strSQL & "FROM   " & strSht & vbCrLf
    strSQL = strSQL & " UNION ALL " & vbCrLf
    strSQL = strSQL & "SELECT F1, " & vbCrLf
    strSQL = strSQL & "       F8, " & vbCrLf
    strSQL = strSQL & "       0, " & vbCrLf
    strSQL = strSQL & "       0, " & vbCrLf
    strSQL = strSQL & "       0, " & vbCrLf
    strSQL = strSQL & "       IIF(ISNULL(F9), 0, F9) " & vbCrLf
    strSQL = strSQL & "FROM   " & strSht

    strSQLTotal = ""
    strSQLTotal = strSQLTotal & "SELECT F1, " & vbCrLf
    strSQLTotal = strSQLTotal & "       F2, " & vbCrLf
    strSQLTotal = strSQLTotal & "       Sum(TUAN1) AS Tuan1Total, " & vbCrLf
    strSQLTotal = strSQLTotal & "       Sum(TUAN2) AS Tuan2Total, " & vbCrLf
    strSQLTotal = strSQLTotal & "       Sum(TUAN3) AS Tuan3Total, " & vbCrLf
    strSQLTotal = strSQLTotal & "       Sum(TUAN4) AS Tuan4Total " & vbCrLf
    strSQLTotal = strSQLTotal & "FROM   (" & strSQL & ") " & vbCrLf
    strSQLTotal = strSQLTotal & "WHERE  F2 IS NOT NULL " & vbCrLf
    strSQLTotal = strSQLTotal & "GROUP  BY F1, " & vbCrLf
    strSQLTotal = strSQLTotal & "          F2 " & vbCrLf
    strSQLTotal = strSQLTotal & "UNION ALL " & vbCrLf
    strSQLTotal = strSQLTotal & "SELECT F1 & ' Total:', " & vbCrLf
    strSQLTotal = strSQLTotal & "       '', " & vbCrLf
    strSQLTotal = strSQLTotal & "       Sum(F3), " & vbCrLf
    strSQLTotal = strSQLTotal & "       Sum(F5), " & vbCrLf
    strSQLTotal = strSQLTotal & "       Sum(F7), " & vbCrLf
    strSQLTotal = strSQLTotal & "       Sum(F9) " & vbCrLf
    strSQLTotal = strSQLTotal & "FROM   (" & strSht & ") " & vbCrLf
    strSQLTotal = strSQLTotal & "WHERE  F1 IS NOT NULL " & vbCrLf
    strSQLTotal = strSQLTotal & "GROUP  BY F1 " & vbCrLf
    strSQLTotal = strSQLTotal & "UNION ALL " & vbCrLf
    strSQLTotal = strSQLTotal & "SELECT 'z Grand Total:', " & vbCrLf
    strSQLTotal = strSQLTotal & "       '', " & vbCrLf
    strSQLTotal = strSQLTotal & "       Sum(F3), " & vbCrLf
    strSQLTotal = strSQLTotal & "       Sum(F5), " & vbCrLf
    strSQLTotal = strSQLTotal & "       Sum(F7), " & vbCrLf
    strSQLTotal = strSQLTotal & "       Sum(F9) " & vbCrLf
    strSQLTotal = strSQLTotal & "FROM   " & strSht
        
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No"""
        Sheet2.Range("A5:F1000").ClearContents
        Sheet2.Range("A5").CopyFromRecordset .Execute("Select * From (" & strSQLTotal & ") Order By F1")
    End With
End Sub
Có thể dùng crosstab query cho gọn, nhưng không thể có được những dòng tổng như yêu cầu.
 

File đính kèm

File đính kèm

Web KT

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

Back
Top Bottom