Lọc dữ liệu và tách cột theo điều kiện. (3 người xem)

Liên hệ QC

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

nguyenquyetnd993

Thành viên chính thức
Tham gia
31/5/19
Bài viết
53
Được thích
11
Chào các bác ,
Em đang làm 1 bản thống kê theo mã giao dịch.
Muốn tạo mã VBA để có thể làm cho những lần sau.
Ví dụ :
Những hàng có mã giao dịch giống nhau sẽ xếp nối liền nhau
Những hàng có số tiền âm sẽ ko show ra, nhưng số tài khoản ở hàng đó sẽ được xếp ở cột bên cạnh những Số tài khoản có số tiền dương .
em có làm 1 ví dụ tay trên sheet KQ ở file đính kèm.
Các mã giao dịch khác sẽ được xếp nối tiếp những mã giao dịch đã được lọc.
Xin cảm ơn các bác
 

File đính kèm

Lần chỉnh sửa cuối:
Chào các bác ,
Em đang làm 1 bản thống kê theo mã giao dịch.
Muốn tạo mã VBA để có thể làm cho những lần sau.
Ví dụ :
Những hàng có mã giao dịch giống nhau sẽ xếp nối liền nhau
Những hang có số tiền âm sẽ ko show ra nhưng số tài khoản ở hang đó sẽ dược xếp ở cột bên cạnh những stk có số tiền dương .
em có làm 1 ví dụ tay trên sheet KQ ở file đính kèm.
tks các bác
Có nhiều người không làm công việc giống bạn, vì thế nên cẩn thận trong từng chi tiết yêu cầu, không viết tắt. Nếu không họ sẽ không hiểu đúng mà giúp bạn.
Ví dụ: stk là gì, cột nào? Mã giao dịch là cột "Ma gia dich"? tks là gì?
 
Lần chỉnh sửa cuối:
Có nhiều người không làm công việc giống bạn, vì thế nên cẩn thận trong từng chi tiết yêu cầu, không viết tắt. Nếu không họ sẽ không hiểu đúng mà giúp bạn.
Ví dụ: stk là gì, cột nào? Mã giao dịch là cột "Ma gia dich"? tks là gì?
cảm ơn bác nhắc nhở, em lần đầu đăng bài, em sửa ngay đây
 
Bạn đưa vi dụ quá đơn giản.
Như trường hợp này thì ghi vào cột TK2 thế nào cho từng dòng?View attachment 218515View attachment 218515
cảm ơn anh đã giúp em, sau khi kiểm tra lại có nhưng trường hợp đặc biệt như trên. em muốn như thế này ạ
Anh có thể giúp em sửa lại như em viết ở dưới không ạ, em xin cảm ơn1
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị âm bằng số lượng ô giá trị dương hoặc giá trị ô có số lượng là 1 ô thì sẽ làm như ví dụ Sheet 1
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị dương nhiều hơn ô giá trị âm thì sẽ đc sắp xếp liền nhau nhưng ko thay đổi gì và cho sang sheet 2
nếu cùng 1 mã giao dịch số lượng ô có giá trị âm nhiều hơn giá trị dương thì cũng sẽ đc sắp xếp liền nhau ko thay đổi gì so vs sheet gốc và cho sang sheet 3
 

File đính kèm

Lần chỉnh sửa cuối:
Chào các bác ,
Em đang làm 1 bản thống kê theo mã giao dịch.
Muốn tạo mã VBA để có thể làm cho những lần sau.
Ví dụ :
Những hàng có mã giao dịch giống nhau sẽ xếp nối liền nhau
Những hàng có số tiền âm sẽ ko show ra, nhưng số tài khoản ở hàng đó sẽ được xếp ở cột bên cạnh những Số tài khoản có số tiền dương .
em có làm 1 ví dụ tay trên sheet KQ ở file đính kèm.
Các mã giao dịch khác sẽ được xếp nối tiếp những mã giao dịch đã được lọc.
Xin cảm ơn các bác
Bạn thử.
Mã:
Sub linhtinh()
    Dim arr, arr1, dic As Object, i As Long, lr As Long, a As Long, dk As String, s1 As String, s2 As String, T, b, j As Long
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("raw data")
         lr = .Range("C" & Rows.Count).End(xlUp).Row
         arr = .Range("A2:E" & lr).Value
         ReDim arr1(1 To UBound(arr, 1), 1 To 6)
              For i = 1 To UBound(arr, 1)
                  dk = arr(i, 3)
                  If Not dic.exists(dk) Then
                     dic.Add dk, ""
                     If arr(i, 4) >= 0 Then dic.Item(dk) = Array(i, "k") Else dic.Item(dk) = Array("k", arr(i, 5))
                   Else
                      s1 = dic.Item(dk)(0)
                      s2 = dic.Item(dk)(1)
                      If arr(i, 4) >= 0 Then
                          If s1 = "k" Then s1 = i Else s1 = s1 & "#" & i
                      Else
                          If s2 = "k" Then
                              s2 = arr(i, 5)
                           ElseIf InStr(1, s2, arr(i, 5)) = 0 Then
                              s2 = s2 & ";" & arr(i, 5)
                           End If
                      End If
                      dic.Item(dk) = Array(s1, s2)
                  End If
              Next i
             For Each T In dic.keys
                 s1 = dic.Item(T)(0)
                 s2 = dic.Item(T)(1)
               If s1 <> "k" Then
                 For Each b In Split(s1, "#")
                     a = a + 1
                     For j = 1 To 5
                        arr1(a, j) = arr(b, j)
                     Next j
                        arr1(a, 6) = s2
                Next
               End If
            Next
   End With
   With Sheets("KQ")
        lr = .Range("C" & Rows.Count).End(xlUp).Row
        If lr > 1 Then .Range("A2:F" & lr).ClearContents
        If a Then .Range("A2:F2").Resize(a).Value = arr1
   End With
End Sub
 

File đính kèm

Bạn đưa vi dụ quá đơn giản.
Như trường hợp này thì ghi vào cột TK2 thế nào cho từng dòng?View attachment 218515View attachment 218515
cảm ơn anh đã giúp em, sau khi kiểm tra lại có nhưng trường hợp đặc biệt như trên. em muốn như thế này ạ
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị âm bằng số lượng ô giá trị dương hoặc giá trị ô có số lượng là 1 ô thì sẽ làm như ví dụ Sheet 1
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị dương nhiều hơn ô giá trị âm thì sẽ đc sắp xếp liền nhau nhưng ko thay đổi gì và cho sang sheet 2
nếu cùng 1 mã giao dịch số lượng ô có giá trị âm nhiều hơn giá trị dương thì cũng sẽ đc sắp xếp liền nhau ko thay đổi gì so vs sheet gốc và cho sang sheet 3
Bài đã được tự động gộp:

Bạn thử.
Mã:
Sub linhtinh()
    Dim arr, arr1, dic As Object, i As Long, lr As Long, a As Long, dk As String, s1 As String, s2 As String, T, b, j As Long
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("raw data")
         lr = .Range("C" & Rows.Count).End(xlUp).Row
         arr = .Range("A2:E" & lr).Value
         ReDim arr1(1 To UBound(arr, 1), 1 To 6)
              For i = 1 To UBound(arr, 1)
                  dk = arr(i, 3)
                  If Not dic.exists(dk) Then
                     dic.Add dk, ""
                     If arr(i, 4) >= 0 Then dic.Item(dk) = Array(i, "k") Else dic.Item(dk) = Array("k", arr(i, 5))
                   Else
                      s1 = dic.Item(dk)(0)
                      s2 = dic.Item(dk)(1)
                      If arr(i, 4) >= 0 Then
                          If s1 = "k" Then s1 = i Else s1 = s1 & "#" & i
                      Else
                          If s2 = "k" Then
                              s2 = arr(i, 5)
                           ElseIf InStr(1, s2, arr(i, 5)) = 0 Then
                              s2 = s2 & ";" & arr(i, 5)
                           End If
                      End If
                      dic.Item(dk) = Array(s1, s2)
                  End If
              Next i
             For Each T In dic.keys
                 s1 = dic.Item(T)(0)
                 s2 = dic.Item(T)(1)
               If s1 <> "k" Then
                 For Each b In Split(s1, "#")
                     a = a + 1
                     For j = 1 To 5
                        arr1(a, j) = arr(b, j)
                     Next j
                        arr1(a, 6) = s2
                Next
               End If
            Next
   End With
   With Sheets("KQ")
        lr = .Range("C" & Rows.Count).End(xlUp).Row
        If lr > 1 Then .Range("A2:F" & lr).ClearContents
        If a Then .Range("A2:F2").Resize(a).Value = arr1
   End With
End Sub
cảm ơn anh đã giúp em, sau khi kiểm tra lại có nhưng trường hợp đặc biệt như trên. em muốn như thế này ạ
Anh có thể giúp em sửa lại như em viết ở dưới không ạ, em xin cảm ơn1
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị âm bằng số lượng ô giá trị dương hoặc giá trị ô có số lượng là 1 ô thì sẽ làm như ví dụ Sheet 1
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị dương nhiều hơn ô giá trị âm thì sẽ đc sắp xếp liền nhau nhưng ko thay đổi gì và cho sang sheet 2
nếu cùng 1 mã giao dịch số lượng ô có giá trị âm nhiều hơn giá trị dương thì cũng sẽ đc sắp xếp liền nhau ko thay đổi gì so vs sheet gốc và cho sang sheet 3
 

File đính kèm

Bài đã được tự động gộp:


cảm ơn anh đã giúp em, sau khi kiểm tra lại có nhưng trường hợp đặc biệt như trên. em muốn như thế này ạ
Anh có thể giúp em sửa lại như em viết ở dưới không ạ, em xin cảm ơn1
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị âm bằng số lượng ô giá trị dương hoặc giá trị ô có số lượng là 1 ô thì sẽ làm như ví dụ Sheet 1
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị dương nhiều hơn ô giá trị âm thì sẽ đc sắp xếp liền nhau nhưng ko thay đổi gì và cho sang sheet 2
nếu cùng 1 mã giao dịch số lượng ô có giá trị âm nhiều hơn giá trị dương thì cũng sẽ đc sắp xếp liền nhau ko thay đổi gì so vs sheet gốc và cho sang sheet 3
Bạn thử.
 

File đính kèm

Em cảm ơn anh nhiều ạ
Nhưng a có thể cho em xin 1 bản final ( xin lõi vì phiền anh sửa )
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị âm là 1 thì được chỉnh sửa như trước và cho vào sheet1
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị dương là 1 và âm lớn hơn 1( ko trùng vs sheet 1) thì sẽ đước sắp xếp liền nhau không thay đổi gì so vs sheet gốc và cho vào sheet 2
Những mã giao dịch còn lại( nằm ngoài sheet 1 và sheet 2) xếp liền nhau và cho sang sheet 3( nêu· có thể anh có thể giúp em xếp cột tiền theo giá trị từ lớn tới nhỏ nhưng vẫn giữ các giá trị cùng mã giao dịch liền nhau)
em xin cảm ơn anh nhiều !
 
Lần chỉnh sửa cuối:
Em cảm ơn anh nhiều ạ
Nhưng a có thể cho em xin 1 bản final ( xin lõi vì phiền anh sửa )
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị âm là 1 thì được chỉnh sửa như trước và cho vào sheet1
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị dương là 1 và âm lớn hơn 1( ko trùng vs sheet 1) thì sẽ đước sắp xếp liền nhau không thay đổi gì so vs sheet gốc và cho vào sheet 2
Những mã giao dịch còn lại( nằm ngoài sheet 1 và sheet 2) xếp liền nhau và cho sang sheet 3( nêu· có thể anh có thể giúp em xếp cột tiền theo giá trị từ lớn tới nhỏ nhưng vẫn giữ các giá trị cùng mã giao dịch liền nhau)
em xin cảm ơn anh nhiều !
Từ yêu cầu và ví dụ "đơn giản" bây giờ thành "đang giỡn" thế này?
218541
 
Xin lỗi Bác do trong lúc làm mới phát hiện ra lỗi cần chỉnh . cháu xin lỗi ạ. Bản thử trước a snow gửi rất ổn nhưng cháu muốn tối ưu hơn ạ . cháu xin lỗi nếu làm mọi người khó chịu
Tạm thời ban đầu phải có các cột phụ để giải quyết các "Nếu" của bạn, sau này tính sau.
Bạn kiểm tra sheet Gpe1 xem kết quả thế nào rồi tính tiếp các sheet khác.
 
Tạm thời ban đầu phải có các cột phụ để giải quyết các "Nếu" của bạn, sau này tính sau.
Bạn kiểm tra sheet Gpe1 xem kết quả thế nào rồi tính tiếp các sheet khác.
cảm ơn bác nhưng kết quả ở Sheet Gpe 1 sai rồi ạ.
kết quả cháu muốn ra như sheet 1 ở đây ạ
 

File đính kèm

Lần chỉnh sửa cuối:
Em cảm ơn anh nhiều ạ
Nhưng a có thể cho em xin 1 bản final ( xin lõi vì phiền anh sửa )
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị âm là 1 thì được chỉnh sửa như trước và cho vào sheet1
Nếu Cùng 1 mã giao dịch số lượng ô có giá trị dương là 1 và âm lớn hơn 1( ko trùng vs sheet 1) thì sẽ đước sắp xếp liền nhau không thay đổi gì so vs sheet gốc và cho vào sheet 2
Những mã giao dịch còn lại( nằm ngoài sheet 1 và sheet 2) xếp liền nhau và cho sang sheet 3( nêu· có thể anh có thể giúp em xếp cột tiền theo giá trị từ lớn tới nhỏ nhưng vẫn giữ các giá trị cùng mã giao dịch liền nhau)
em xin cảm ơn anh nhiều !
Bạn xem nhé.
 

File đính kèm

Web KT

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

Back
Top Bottom