Mong các bạn giúp mình làm hàm viết diễn giải dựa vào bảng số liệu! (2 người xem)

Liên hệ QC

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

mountain84

Thành viên mới
Tham gia
25/12/07
Bài viết
41
Được thích
14
Thân gửi các bạn!

Mình có bảng dữ liệu như trong File đính kèm. trong bảng này thể hiện tên nhân viên và tiền lương của các nhân viên trong mỗi tổ, bây giờ mình muốn viết phần diễn giải chi tiết những tổ nào có người khác vào làm thì trừ phần lương của người đấy đi trong tổng tền lương của tổ, còn những người trong tổ mà đi làm ở tổ khác thì sẽ cộng tiền lương của người đấy vào tổng tiền lương của tổ. Nói ở đây thì hơi khó hiểu, các bạn xem file đính kèm thì mình có ví dụ sẽ dễ hiểu hơn.

Rất mong sớm nhận được sự giúp đỡ của các bạn. Chân thành cảm ơn! Capture.PNG
 

File đính kèm

Chắc vấn đề của mình khó quá hay mình trình bày chưa được rõ ràng lắm nên vẫn chưa có bạn nào trợ giúp được mình. Rất mong sớm có bạn có thể trợ giúp được mình vấn đề này để khi mình viết diễn giải như trên vừa nhanh mà lại hạn chế được nhầm lẫn giữa những người ở các tổ. Chân thành cảm ơn các bạn đã quan tâm và trợ giúp mình!
 
Chắc vấn đề của mình khó quá hay mình trình bày chưa được rõ ràng lắm nên vẫn chưa có bạn nào trợ giúp được mình. Rất mong sớm có bạn có thể trợ giúp được mình vấn đề này để khi mình viết diễn giải như trên vừa nhanh mà lại hạn chế được nhầm lẫn giữa những người ở các tổ. Chân thành cảm ơn các bạn đã quan tâm và trợ giúp mình!
Tham khảo hàm JoinText của thầy @ndu96081631 (link bài: "Hàm nối chuỗi có điều kiện" )
Xem file kèm.

Thân
 

File đính kèm

Tham khảo hàm JoinText của thầy @ndu96081631 (link bài: "Hàm nối chuỗi có điều kiện" )
Xem file kèm.

Thân
quá tuyệt vời! cảm ơn bạn rất nhiều vì đã giúp mình! trình độ của mình chỉ sử dụng được cách đơn giản của hàm jointext thôi chứ không hiểu được cách sử dụng phức tạp hơn của hàm jointext như của bạn! Mình cũng không hiểu rõ hàm của bạn nên khi mình thay đổi tên 1 tổ bất kỳ (ví dụ tổ 7 hoặc tổ nào đó thành tên khác) thì phần cộng vào lại xuất hiện tất cả các thành viên trong tổ (mặc dù mình đã đổi tên tổ ở cả sheet data rồi. và mình không rõ lý do tại sao đoạn hàm TEXT(Data!$D$4:$K$500;"#,###") nhiều lúc không hoạt động nên các số bị viết liền hết với nhau như "- 5327453,". Rất mong bạn có thể giúp thêm mình một chút nữa để mình có thể hoàn thiện hơn! Chân thành cảm ơn bạn rất nhiều!
 
quá tuyệt vời! cảm ơn bạn rất nhiều vì đã giúp mình! trình độ của mình chỉ sử dụng được cách đơn giản của hàm jointext thôi chứ không hiểu được cách sử dụng phức tạp hơn của hàm jointext như của bạn! Mình cũng không hiểu rõ hàm của bạn nên khi mình thay đổi tên 1 tổ bất kỳ (ví dụ tổ 7 hoặc tổ nào đó thành tên khác) thì phần cộng vào lại xuất hiện tất cả các thành viên trong tổ (mặc dù mình đã đổi tên tổ ở cả sheet data rồi. và mình không rõ lý do tại sao đoạn hàm TEXT(Data!$D$4:$K$500;"#,###") nhiều lúc không hoạt động nên các số bị viết liền hết với nhau như "- 5327453,". Rất mong bạn có thể giúp thêm mình một chút nữa để mình có thể hoàn thiện hơn! Chân thành cảm ơn bạn rất nhiều!
Đưa file bị lỗi lên đi bạn, mới biết bạn muốn thay đổi cái gì? Và lý do gây lỗi?

Thân
 
1/ Bạn phải ghi chép đồng nhất tên các tổ, không nên lúc thì ghi "Tổ số n", lúc thì ghi chỉ có số "1, 2,....8". Tôi đã điều chỉnh việc này cho bạn trong file kèm.

2/ Bạn cài đặt hệ thống của bạn với số phân cách số thập phân là "," và số hàng ngàn là ".", nên khi định dạng trong hàm TEXT(...,"#,###") không phù hợp với hệ thống của bạn. Tôi cũng đã bổ sung công thức cho phù hợp cả hai hệ thống thường dùng (dấu phân cách tráo đổi qua lại giữa "." và ",")

3/ Khi nào có thời gian tôi sẽ giải thích cho bạn công thức áp dụng, chịu khó chờ hén!

Thân
 

File đính kèm

mình chỉ sử dụng được cách đơn giản của hàm jointext thôi chứ không hiểu được cách sử dụng phức tạp hơn của hàm jointext như của bạn!
Bạn xem giải thích công thức mảng xử lý trong đối số của hàm JoinText theo file đính kèm.

Chúc bạn học vui với GPE.
Thân
 

File đính kèm

Bài nầy dùng hàm Jonitext rất phức tạp, ít người làm được o_O :(, dùng code mới cho đơn giản :)
Chúc các bạn ngày mới vui /-*+//-*+//-*+/
Mã:
Option Explicit
Sub GhiChu()
  Dim sArr(), Res(), toStr As String, iKey, ST
  Dim i As Long, ik As Long, sCol As Long, sRow As Long, k As Long, j As Long, jk As Long
 
  With Sheets("Data")
    toStr = Mid(.Range("D3").Value, 1, 6)
    i = .Range("B65000").End(xlUp).Row
    If i < 4 Then MsgBox ("Khong co du lieu"): Exit Sub
    sCol = .Range("AAA3").End(xlToLeft).Column
    sArr = .Range("A3:A" & i).Resize(, sCol).Value
    sRow = UBound(sArr, 1)
  End With
 
  ReDim Res(1 To UBound(sArr, 1), 1 To 5)
  With CreateObject("scripting.dictionary")
    For i = 2 To sRow - 1
      iKey = Replace(sArr(i, 3), toStr, "")
      sArr(i, 3) = iKey
      If Not .exists(iKey) Then
        k = k + 1
        .Add iKey, k
        Res(k, 1) = iKey
      End If
      ik = .item(iKey)
      Res(ik, 2) = Res(ik, 2) + sArr(i, sCol)
    Next i
    
    For j = 4 To sCol - 1
      iKey = Replace(sArr(1, j), toStr, "")
      sArr(1, j) = iKey
      Res(.item(iKey), 3) = sArr(sRow, j)
    Next j
    On Error Resume Next
    For i = 2 To sRow - 1
      ik = .item(sArr(i, 3))
      For j = 4 To sCol - 1
        ST = Format(sArr(i, j), "#,###")
        If Len(ST) > 0 Then
          jk = .item(sArr(1, j))
          If ik <> jk Then
            If Len(Res(jk, 4)) > 0 Then Res(jk, 4) = Res(jk, 4) & Chr(10)
            Res(jk, 4) = Res(jk, 4) & "-" & ST & " (" & sArr(i, 2) & ", " & toStr & ik & ")"
            If Len(Res(ik, 5)) > 0 Then Res(ik, 5) = Res(ik, 5) & Chr(10)
            Res(ik, 5) = Res(ik, 5) & "+" & ST & " (" & sArr(i, 2) & ", " & toStr & jk & ")"
          End If
        End If
      Next j
    Next i
  End With
  Sheets("GhiChu").Range("A2").Resize(k, 5) = Res
End Sub
 

File đính kèm

Tên tổ nên thống nhất trên tiêu đề cột, code đơn giản và chuẩn hơn
Mã:
Option Explicit
Sub GhiChu()
  Dim sArr(), Res(), iKey, ST
  Dim i As Long, ik As Long, sCol As Long, sRow As Long, k As Long, j As Long, jk As Long
 
  With Sheets("Data")
    i = .Range("B65000").End(xlUp).Row
    If i < 4 Then MsgBox ("Khong co du lieu"): Exit Sub
    sCol = .Range("AAA3").End(xlToLeft).Column
    sArr = .Range("A3:A" & i).Resize(, sCol).Value
    sRow = UBound(sArr, 1)
  End With
 
  ReDim Res(1 To UBound(sArr, 1), 1 To 5)
  With CreateObject("scripting.dictionary")
    For i = 2 To sRow - 1
      iKey = sArr(i, 3)
      If Not .exists(iKey) Then
        k = k + 1
        .Add iKey, k
        Res(k, 1) = iKey
      End If
      ik = .item(iKey)
      Res(ik, 2) = Res(ik, 2) + sArr(i, sCol)
    Next i
    
    For j = 4 To sCol - 1
      ik = .item(sArr(1, j))
      If ik > 0 Then
        Res(ik, 3) = sArr(sRow, j)
      Else
        MsgBox ("Xem lai ten to " & sArr(1, j) & " tren tieu de cot khong khop voi dong")
        Exit Sub
      End If
    Next j
    On Error Resume Next
    For i = 2 To sRow - 1
      ik = .item(sArr(i, 3))
      For j = 4 To sCol - 1
        ST = Format(sArr(i, j), "#,###")
        If Len(ST) > 0 Then
          jk = .item(sArr(1, j))
          If ik <> jk Then
            If Len(Res(jk, 4)) > 0 Then Res(jk, 4) = Res(jk, 4) & Chr(10)
            Res(jk, 4) = Res(jk, 4) & "-" & ST & " (" & sArr(i, 2) & ", " & sArr(i, 3) & ")"
            If Len(Res(ik, 5)) > 0 Then Res(ik, 5) = Res(ik, 5) & Chr(10)
            Res(ik, 5) = Res(ik, 5) & "+" & ST & " (" & sArr(i, 2) & ", " & sArr(1, j) & ")"
          End If
        End If
      Next j
    Next i
  End With
  Sheets("GhiChu").Range("A2").Resize(k, 5) = Res
End Sub
 

File đính kèm

Các bạn nhiệt tình quá! mình cảm ơn các bạn rất nhiều! bạn HieuCD có thể cho mình hỏi code dưới của bạn là sử dụng khi Tên tổ thống nhất trên tiêu đề cột phải không bạn?! vấn đề tên tổ thống nhất trên tiêu đề cột mình có thể làm được bạn à!
 
Các bạn nhiệt tình quá! mình cảm ơn các bạn rất nhiều! bạn HieuCD có thể cho mình hỏi code dưới của bạn là sử dụng khi Tên tổ thống nhất trên tiêu đề cột phải không bạn?! vấn đề tên tổ thống nhất trên tiêu đề cột mình có thể làm được bạn à!
Tiêu đề cột và từng dòng phải nhập thống nhất loại "Tên" của từng tổ, nếu nhập khác nhau như : "A", "tổ A" thì không nhận diện được là cùng 1 tổ
 
Web KT

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

Back
Top Bottom