Sửa Code cho Hàm tự tạo

Liên hệ QC

Phương Phương mito

Thành viên thường trực
Tham gia
1/5/19
Bài viết
275
Được thích
65
Kính gửi ANh chị,
Em có code ghép dữ liệu vào một ô theo điều kiện do một Anh trợ giúp, Kết quả ra như ở D21 tại Sheet1. Giờ em muốn định dạng như ô L21 và đã đã sửa Code nhưng kết quả nó không được như ý muốn là tách giá trị theo từng tình trạng hàng tại ô L23.
(1) Nhờ các ANh chị xem giúp em code em sửa sai chỗ nào với ạ.
(2) Em muốn dụng hàm tự tạo này bên Sheet Khac tại Ô D4. Nhưng nó không ra được kết quả và báo lỗi là do đâu ạ.
 

File đính kèm

  • Ham tu tao ghep du lieu.xlsm
    24 KB · Đọc: 31
Kính gửi ANh chị,
Em có code ghép dữ liệu vào một ô theo điều kiện do một Anh trợ giúp, Kết quả ra như ở D21 tại Sheet1. Giờ em muốn định dạng như ô L21 và đã đã sửa Code nhưng kết quả nó không được như ý muốn là tách giá trị theo từng tình trạng hàng tại ô L23.
(1) Nhờ các ANh chị xem giúp em code em sửa sai chỗ nào với ạ.
(2) Em muốn dụng hàm tự tạo này bên Sheet Khac tại Ô D4. Nhưng nó không ra được kết quả và báo lỗi là do đâu ạ.
Bạn xem lại vùng dữ liệu nhé:
Mã:
D4=gpe(Sheet1!$C$4:$K$14,C4)
 
Upvote 0
Bạn xem lại vùng dữ liệu nhé:
Mã:
D4=gpe(Sheet1!$C$4:$K$14,C4)
Nhưng em đã đặt tên vùng dữ liệu bên sheet1 là VUNG rồi mà anh. Và để áp dụng được linh hoạt em cũng đã tạo Name Động. Sao bắt buộc phải dùng địa chỉ kiểu này Sheet1!$C$4:$K$14 mà không dùng được địa chỉ theo Define Name ạ
 
Upvote 0
Mình có tải file của bạn về thử thì file ấy không dùng Name cho sheet khác ngoài sheet1 được
mình lấy code sang file mới thì sài bình thường ok. do file hay do Excel nhỉ? hihi
Em cũng không rõ anh ạ. Em chưa tìm được nguyên nhân luôn ấy. Không biết nó do cái gì ạ. Anh xem giúp em cái đoạn Code mà em sửa ấy ạ, phải sửa lại sao để được định dạng Tình trạng hàng1 - giá trị trương ứng1; Tình trạng 2 - Giá trị tương ứng 2. A xem giúp em với ạ.
 
Upvote 0
Em có code ghép dữ liệu vào một ô theo điều kiện do một Anh trợ giúp
Tôi đọc Code thì ra "một Anh" quen quen...
Từ bài trước nếu yêu cầu như thế này thì xong rồi, cần gì nhờ xong rồi tự sửa mà "không được".
Em cũng không rõ anh ạ. Em chưa tìm được nguyên nhân luôn ấy. Không biết nó do cái gì ạ. Anh xem giúp em cái đoạn Code mà em sửa ấy ạ, phải sửa lại sao để được định dạng Tình trạng hàng1 - giá trị trương ứng1; Tình trạng 2 - Giá trị tương ứng 2. A xem giúp em với ạ.
 

File đính kèm

  • Ham tu tao ghep du lieu.xlsm
    26.8 KB · Đọc: 8
Lần chỉnh sửa cuối:
Upvote 0
Có anh Chị nào xem giúp em với ạ ! Em cảm ơn ạ.
Hình như code của bạn là của bác
Kính gửi ANh chị,
Em có code ghép dữ liệu vào một ô theo điều kiện do một Anh trợ giúp, Kết quả ra như ở D21 tại Sheet1. Giờ em muốn định dạng như ô L21 và đã đã sửa Code nhưng kết quả nó không được như ý muốn là tách giá trị theo từng tình trạng hàng tại ô L23.
(1) Nhờ các ANh chị xem giúp em code em sửa sai chỗ nào với ạ.
(2) Em muốn dụng hàm tự tạo này bên Sheet Khac tại Ô D4. Nhưng nó không ra được kết quả và báo lỗi là do đâu ạ.
Bạn xem cái code này chỉnh lại 1 chút.
Mã:
Public Function Gpe(ByVal Rng As Range, MaNV As String) As String
Dim sArr(), dArr(), I As Long, K1 As Long, R As Long, Rws As Long, Txt As String
    sArr = Rng.Value
    R = UBound(sArr)
    ReDim dArr(1 To R, 1 To 4)
    
    ' 5 là so Column can lam viec "gia tri hang, loai hang, tinh trang hang...
    
With CreateObject("Scripting.Dictionary")
    For I = 2 To R
        If sArr(I, 1) = MaNV Then
            '=================================================
            If Not .Exists(sArr(I, 3)) Then
                K1 = K1 + 1
                .Item(sArr(I, 3)) = K1
                dArr(K1, 1) = sArr(I, 3)    'Loai hang'
                dArr(K1, 2) = 1
                dArr(K1, 4) = sArr(I, 9) & "-" & sArr(I, 7)  'Gia Tri hang ban'

            Else
                Rws = .Item(sArr(I, 3))
                dArr(Rws, 2) = dArr(Rws, 2) + 1             'Gia Tri hang ban'
                dArr(Rws, 4) = dArr(Rws, 4) & "," & sArr(I, 9) & "-" & sArr(I, 7)   'Tinh trang hang'
            End If
            '=================================================Ma hang'
        End If
    Next I
End With
    Txt = "+ " & sArr(1, 3) & ": "
    For I = 1 To K1
        Txt = Txt & dArr(I, 1) & " (" & dArr(I, 2) & "), "
    Next I
    Txt = Txt & ChrW(10) & "+ " & sArr(1, 7) & ": "
    For I = 1 To K1
        Txt = Txt & dArr(I, 1) & " (" & dArr(I, 4) & "), "
    Next I
Gpe = Txt
End Function
 
Upvote 0
Hình như code của bạn là của bác

Bạn xem cái code này chỉnh lại 1 chút.
Mã:
Public Function Gpe(ByVal Rng As Range, MaNV As String) As String
Dim sArr(), dArr(), I As Long, K1 As Long, R As Long, Rws As Long, Txt As String
    sArr = Rng.Value
    R = UBound(sArr)
    ReDim dArr(1 To R, 1 To 4)
   
    ' 5 là so Column can lam viec "gia tri hang, loai hang, tinh trang hang...
   
With CreateObject("Scripting.Dictionary")
    For I = 2 To R
        If sArr(I, 1) = MaNV Then
            '=================================================
            If Not .Exists(sArr(I, 3)) Then
                K1 = K1 + 1
                .Item(sArr(I, 3)) = K1
                dArr(K1, 1) = sArr(I, 3)    'Loai hang'
                dArr(K1, 2) = 1
                dArr(K1, 4) = sArr(I, 9) & "-" & sArr(I, 7)  'Gia Tri hang ban'

            Else
                Rws = .Item(sArr(I, 3))
                dArr(Rws, 2) = dArr(Rws, 2) + 1             'Gia Tri hang ban'
                dArr(Rws, 4) = dArr(Rws, 4) & "," & sArr(I, 9) & "-" & sArr(I, 7)   'Tinh trang hang'
            End If
            '=================================================Ma hang'
        End If
    Next I
End With
    Txt = "+ " & sArr(1, 3) & ": "
    For I = 1 To K1
        Txt = Txt & dArr(I, 1) & " (" & dArr(I, 2) & "), "
    Next I
    Txt = Txt & ChrW(10) & "+ " & sArr(1, 7) & ": "
    For I = 1 To K1
        Txt = Txt & dArr(I, 1) & " (" & dArr(I, 4) & "), "
    Next I
Gpe = Txt
End Function

Dear Anh,
Hàm của anh trợ giúp đã đúng ạ. Nhưng em hỏi thêm ạ, chẳng hạn ở đây tình trạng của Nhân viên a với mã hàng Ô tô thì nó vẫn để dạng Giá trị hàng bán: Ô tô (0-70,0-80) mà chưa gộp lại được thành Giá trị hàng bán: Ô tô (0-150). ANh xem giúp em với ạ. Em cảm ơn Anh.
 

File đính kèm

  • Ham tu tao ghep du lieu.xlsm
    20.6 KB · Đọc: 8
Upvote 0
Tôi đọc Code thì ra "một Anh" quen quen...
Từ bài trước nếu yêu cầu như thế này thì xong rồi, cần gì nhờ xong rồi tự sửa mà "không được".
Dạ sợ bị mắng nên ngại hỏi ạ. Code Anh giúp em đã đúng rồi ạ. Nhưng cái phần nó gộp giá trị theo tình trạng vẫn chưa gọn được ạ: Kiểu vầy ạ dạng Giá trị hàng bán: Ô tô (0-70,0-80) mà chưa gộp lại được thành Giá trị hàng bán: Ô tô (0-150)
 
Upvote 0
Dạ sợ bị mắng nên ngại hỏi ạ. Code Anh giúp em đã đúng rồi ạ. Nhưng cái phần nó gộp giá trị theo tình trạng vẫn chưa gọn được ạ: Kiểu vầy ạ dạng Giá trị hàng bán: Ô tô (0-70,0-80) mà chưa gộp lại được thành Giá trị hàng bán: Ô tô (0-150)
Hàm của bạn chỗ đặt tên để áp dụng được cho các SHeet khác của File chỗ đặt tên Scope bạn phai để toàn Worksheet ấy thì mới dùng được cho tất cả các SHeet trong File. Còn sửa hàm Code này thì mình không giúp được vì dốt Code lắm.
 
Upvote 0
Hình như code của bạn là của bác

Bạn xem cái code này chỉnh lại 1 chút.
Mã:
Public Function Gpe(ByVal Rng As Range, MaNV As String) As String
Dim sArr(), dArr(), I As Long, K1 As Long, R As Long, Rws As Long, Txt As String
    sArr = Rng.Value
    R = UBound(sArr)
    ReDim dArr(1 To R, 1 To 4)
   
    ' 5 là so Column can lam viec "gia tri hang, loai hang, tinh trang hang...
   
With CreateObject("Scripting.Dictionary")
    For I = 2 To R
        If sArr(I, 1) = MaNV Then
            '=================================================
            If Not .Exists(sArr(I, 3)) Then
                K1 = K1 + 1
                .Item(sArr(I, 3)) = K1
                dArr(K1, 1) = sArr(I, 3)    'Loai hang'
                dArr(K1, 2) = 1
                dArr(K1, 4) = sArr(I, 9) & "-" & sArr(I, 7)  'Gia Tri hang ban'

            Else
                Rws = .Item(sArr(I, 3))
                dArr(Rws, 2) = dArr(Rws, 2) + 1             'Gia Tri hang ban'
                dArr(Rws, 4) = dArr(Rws, 4) & "," & sArr(I, 9) & "-" & sArr(I, 7)   'Tinh trang hang'
            End If
            '=================================================Ma hang'
        End If
    Next I
End With
    Txt = "+ " & sArr(1, 3) & ": "
    For I = 1 To K1
        Txt = Txt & dArr(I, 1) & " (" & dArr(I, 2) & "), "
    Next I
    Txt = Txt & ChrW(10) & "+ " & sArr(1, 7) & ": "
    For I = 1 To K1
        Txt = Txt & dArr(I, 1) & " (" & dArr(I, 4) & "), "
    Next I
Gpe = Txt
End Function
Thưa Anh,
Em muốn hỏi thêm cái yêu cầu này của em ngoài cách làm hàm thế này có cách khác không ạ. Vì nếu em chạy một Code khác cùng với hàm này trong một File, thì nó chạy Code khác nó rất chậm ạ. Ngồi chờ mãi nó mới chạy xong ạ.
 
Upvote 0
Thưa Anh,
Em muốn hỏi thêm cái yêu cầu này của em ngoài cách làm hàm thế này có cách khác không ạ. Vì nếu em chạy một Code khác cùng với hàm này trong một File, thì nó chạy Code khác nó rất chậm ạ. Ngồi chờ mãi nó mới chạy xong ạ.
Bạn khi chạy code tắt công thức đi là được mà.Xong khi nào chạy xong mở công thức là được.
 
Upvote 0
Web KT
Back
Top Bottom