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

khanhly94

Thành viên chính thức
Tham gia ngày
1 Tháng năm 2019
Bài viết
82
Được thích
24
Điểm
20
Tuổi
24
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

vulunktheky

Thành viên chính thức
Tham gia ngày
2 Tháng ba 2018
Bài viết
76
Được thích
10
Điểm
170
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)
 

khanhly94

Thành viên chính thức
Tham gia ngày
1 Tháng năm 2019
Bài viết
82
Được thích
24
Điểm
20
Tuổi
24
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 ạ
 

ducdoom

Thành viên mới
Tham gia ngày
24 Tháng mười hai 2018
Bài viết
41
Được thích
37
Điểm
15
Tuổi
24
Có anh Chị nào xem giúp em với ạ ! Em cảm ơn ạ.
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
 

khanhly94

Thành viên chính thức
Tham gia ngày
1 Tháng năm 2019
Bài viết
82
Được thích
24
Điểm
20
Tuổi
24
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 ạ.
 

Ba Tê

Cạo Rồi Khỏi Gội
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,007
Được thích
15,548
Điểm
1,860
Tuổi
60
Nơi ở
An Giang
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

Lần chỉnh sửa cuối:

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
1,922
Được thích
1,665
Điểm
210
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
 

khanhly94

Thành viên chính thức
Tham gia ngày
1 Tháng năm 2019
Bài viết
82
Được thích
24
Điểm
20
Tuổi
24
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

khanhly94

Thành viên chính thức
Tham gia ngày
1 Tháng năm 2019
Bài viết
82
Được thích
24
Điểm
20
Tuổi
24
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)
 

hoangquandu

Thành viên mới
Tham gia ngày
30 Tháng mười 2009
Bài viết
29
Được thích
2
Điểm
365
Tuổi
25
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.
 

khanhly94

Thành viên chính thức
Tham gia ngày
1 Tháng năm 2019
Bài viết
82
Được thích
24
Điểm
20
Tuổi
24
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 ạ.
 

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
1,922
Được thích
1,665
Điểm
210
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.
 
Top