Sửa giúp code dồn số liệu (1 người xem)

Liên hệ QC

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

Nhờ các bạn sửa giúp code theo file đính kèm,
Cảm ơn các bạn!
Thử code
Mã:
Sub Rectangle1_Click()
    Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long
    Arr = Sheet1.Range("l3:z22").Value
    ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
    For i = 1 To UBound(Arr, 1)
        k = 0
        For j = 1 To UBound(Arr, 2)
            If Arr(i, j) <> "" Then
                k = k + 1
                kq(i, k) = Arr(i, j)
            End If
        Next j
        If jMax < k Then jMax = k 'Tính só cot ket qua
    Next i
    Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq
End Sub
Nếu không đúng ý thì nhập kết quả và gởi lên
 
Upvote 0
Thử code
Mã:
Sub Rectangle1_Click()
    Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long
    Arr = Sheet1.Range("l3:z22").Value
    ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
    For i = 1 To UBound(Arr, 1)
        k = 0
        For j = 1 To UBound(Arr, 2)
            If Arr(i, j) <> "" Then
                k = k + 1
                kq(i, k) = Arr(i, j)
            End If
        Next j
        If jMax < k Then jMax = k 'Tính só cot ket qua
    Next i
    Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq
End Sub
Nếu không đúng ý thì nhập kết quả và gởi lên
Cảm ơn anh
HieuCD
. Anh ơi nhưng em muốn là các số trùng nhau thì chỉ lấy 1 số . anh sửa giúp em với nhé!
 
Upvote 0
Cảm ơn anh
HieuCD
. Anh ơi nhưng em muốn là các số trùng nhau thì chỉ lấy 1 số . anh sửa giúp em với nhé!
Mã:
Sub Rectangle1_Click()
    Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key As String
    Arr = Sheet1.Range("l3:z22").Value
    ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
    With CreateObject("Scripting.dictionary")
        For i = 1 To UBound(Arr, 1)
            k = 0
            For j = 1 To UBound(Arr, 2)
                key = CStr(Arr(i, j))
                If key <> "" Then
                    If Not .exists(key) Then
                        .Add key, ""
                        k = k + 1
                        kq(i, k) = key
                    End If
                End If
            Next j
            .RemoveAll 'Neu loai trung tat ca dòng thì bo lenh nay
            If jMax < k Then jMax = k 'Tính só cot ket qua
        Next i
    End With
    Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq
End Sub
 
Upvote 0
Mã:
Sub Rectangle1_Click()
    Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key As String
    Arr = Sheet1.Range("l3:z22").Value
    ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
    With CreateObject("Scripting.dictionary")
        For i = 1 To UBound(Arr, 1)
            k = 0
            For j = 1 To UBound(Arr, 2)
                key = CStr(Arr(i, j))
                If key <> "" Then
                    If Not .exists(key) Then
                        .Add key, ""
                        k = k + 1
                        kq(i, k) = key
                    End If
                End If
            Next j
            .RemoveAll 'Neu loai trung tat ca dòng thì bo lenh nay
            If jMax < k Then jMax = k 'Tính só cot ket qua
        Next i
    End With
    Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq
End Sub
Cảm ơn anh rất nhiều, code chạy rất chuẩn anh à, Nhưng bây giờ anh giúp em chút síu nữa là khi muốn dồn 2 hoặc nhiều mảng không liền kề nhau thì làm như nào?
 

File đính kèm

Upvote 0
Cảm ơn anh rất nhiều, code chạy rất chuẩn anh à, Nhưng bây giờ anh giúp em chút síu nữa là khi muốn dồn 2 hoặc nhiều mảng không liền kề nhau thì làm như nào?
Thêm vòng lập tính dòng cuối mảng dữ liệu, bạn có thể nhìn bảng và nhập trực tiếp vào lệnh tạo mảng Arr
Mã:
Sub donso() 'Hieucd b2
    Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key As String
    For j = 12 To 26 'Cot L toi cot Z
      i = Cells(65500, j).End(xlUp).Row 'dòng cuoi cot j
      If i > k Then k = i 'dòng cuoi cua mang du lieu
    Next j
    Arr = Sheet1.Range("L3:Z" & k).Value
    ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
    With CreateObject("Scripting.dictionary")
        For i = 1 To UBound(Arr, 1)
            k = 0
            For j = 1 To UBound(Arr, 2)
                key = CStr(Arr(i, j))
                If key <> "" Then
                    If Not .exists(key) Then
                        .Add key, ""
                        k = k + 1
                        kq(i, k) = key
                    End If
                End If
            Next j
            .RemoveAll 'Neu loai trung tat ca dòng thì bo lenh nay
            If jMax < k Then jMax = k 'Tính só cot ket qua
        Next i
    End With
    Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq
End Sub
 
Upvote 0
Thêm vòng lập tính dòng cuối mảng dữ liệu, bạn có thể nhìn bảng và nhập trực tiếp vào lệnh tạo mảng Arr
Mã:
Sub donso() 'Hieucd b2
    Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key As String
    For j = 12 To 26 'Cot L toi cot Z
      i = Cells(65500, j).End(xlUp).Row 'dòng cuoi cot j
      If i > k Then k = i 'dòng cuoi cua mang du lieu
    Next j
    Arr = Sheet1.Range("L3:Z" & k).Value
    ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
    With CreateObject("Scripting.dictionary")
        For i = 1 To UBound(Arr, 1)
            k = 0
            For j = 1 To UBound(Arr, 2)
                key = CStr(Arr(i, j))
                If key <> "" Then
                    If Not .exists(key) Then
                        .Add key, ""
                        k = k + 1
                        kq(i, k) = key
                    End If
                End If
            Next j
            .RemoveAll 'Neu loai trung tat ca dòng thì bo lenh nay
            If jMax < k Then jMax = k 'Tính só cot ket qua
        Next i
    End With
    Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq
End Sub
Thêm vòng lập tính dòng cuối mảng dữ liệu, bạn có thể nhìn bảng và nhập trực tiếp vào lệnh tạo mảng Arr
Mã:
Sub donso() 'Hieucd b2
    Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key As String
    For j = 12 To 26 'Cot L toi cot Z
      i = Cells(65500, j).End(xlUp).Row 'dòng cuoi cot j
      If i > k Then k = i 'dòng cuoi cua mang du lieu
    Next j
    Arr = Sheet1.Range("L3:Z" & k).Value
    ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
    With CreateObject("Scripting.dictionary")
        For i = 1 To UBound(Arr, 1)
            k = 0
            For j = 1 To UBound(Arr, 2)
                key = CStr(Arr(i, j))
                If key <> "" Then
                    If Not .exists(key) Then
                        .Add key, ""
                        k = k + 1
                        kq(i, k) = key
                    End If
                End If
            Next j
            .RemoveAll 'Neu loai trung tat ca dòng thì bo lenh nay
            If jMax < k Then jMax = k 'Tính só cot ket qua
        Next i
    End With
    Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq
End Sub
Em cảm ơn anh
HieuCD
, rất chuẩn anh à! Bây giờ em muốn dồn kết quả vào 1 dòng thì phải làm như nào hả anh? Em loay hoay mãi từ đêm qua tới bây giờ mà vẫn chưa sửa được. Anh sửa giúp em với. Cảm ơn anh rất nhiều.
 
Upvote 0
Em cảm ơn anh
HieuCD
, rất chuẩn anh à! Bây giờ em muốn dồn kết quả vào 1 dòng thì phải làm như nào hả anh? Em loay hoay mãi từ đêm qua tới bây giờ mà vẫn chưa sửa được. Anh sửa giúp em với. Cảm ơn anh rất nhiều.
Nhập tay kết quả gởi lên
 
Upvote 0
Mã:
Sub donso() 'Hieucd b3 (Láy nhieu mang)
    Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key
    For j = 12 To 26 'Cot L toi cot Z
      i = Cells(65500, j).End(xlUp).Row 'dòng cuoi cot j
      If i > k Then k = i 'dòng cuoi cua mang du lieu
    Next j
    Arr = Sheet1.Range("L4:Z" & k).Value
    k = 0
    With CreateObject("Scripting.dictionary")
        For i = 1 To UBound(Arr, 1)
            For j = 1 To UBound(Arr, 2)
                key = Arr(i, j)
                If TypeName(key) = "Double" Then
                    If Not .exists(key) Then
                        .Add key, ""
                        k = k + 1
                        ReDim Preserve kq(1 To k)
                        kq(k) = key
                    End If
                End If
            Next j
        Next i
    End With
    Sheet1.Range("B2").Resize(, k).Value = kq
End Sub
 
Upvote 0
Thử rút gọn code của bạn HieuCD
Mã:
Sub donso() 'Hieucd b3 (Láy nhieu mang)
Dim Arr(), i As Long, j As Long, k As Long, key
    For j = 12 To 26 'Cot L toi cot Z
        i = Sheet1.Cells(Rows.Count, j).End(xlUp).Row 'dong cuoi cot j
        If i > k Then k = i 'dong cuoi cua mang du lieu
    Next j
    Arr = Sheet1.Range("L4:Z" & k).Value
    With CreateObject("Scripting.dictionary")
        For i = 1 To UBound(Arr, 1)
            For j = 1 To UBound(Arr, 2)
                key = Arr(i, j)
                If TypeName(key) = "Double" Then
                    If Not .exists(key) Then .Add key, ""
                End If
            Next j
        Next i
        Sheet1.Range("B2").Resize(, .Count).Value = .keys()
    End With
End Sub
 
Upvote 0
Mã:
Sub donso() 'Hieucd b3 (Láy nhieu mang)
    Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key
    For j = 12 To 26 'Cot L toi cot Z
      i = Cells(65500, j).End(xlUp).Row 'dòng cuoi cot j
      If i > k Then k = i 'dòng cuoi cua mang du lieu
    Next j
    Arr = Sheet1.Range("L4:Z" & k).Value
    k = 0
    With CreateObject("Scripting.dictionary")
        For i = 1 To UBound(Arr, 1)
            For j = 1 To UBound(Arr, 2)
                key = Arr(i, j)
                If TypeName(key) = "Double" Then
                    If Not .exists(key) Then
                        .Add key, ""
                        k = k + 1
                        ReDim Preserve kq(1 To k)
                        kq(k) = key
                    End If
                End If
            Next j
        Next i
    End With
    Sheet1.Range("B2").Resize(, k).Value = kq
End Sub
Cảm ơn anh
HieuCD!
code rất tuyệt vời anh à! Chúc anh công tác tốt và gặp nhiều may mắn mọi điều an lành.
 
Upvote 0
Thử rút gọn code của bạn HieuCD
Mã:
Sub donso() 'Hieucd b3 (Láy nhieu mang)
Dim Arr(), i As Long, j As Long, k As Long, key
    For j = 12 To 26 'Cot L toi cot Z
        i = Sheet1.Cells(Rows.Count, j).End(xlUp).Row 'dong cuoi cot j
        If i > k Then k = i 'dong cuoi cua mang du lieu
    Next j
    Arr = Sheet1.Range("L4:Z" & k).Value
    With CreateObject("Scripting.dictionary")
        For i = 1 To UBound(Arr, 1)
            For j = 1 To UBound(Arr, 2)
                key = Arr(i, j)
                If TypeName(key) = "Double" Then
                    If Not .exists(key) Then .Add key, ""
                End If
            Next j
        Next i
        Sheet1.Range("B2").Resize(, .Count).Value = .keys()
    End With
End Sub
Cảm ơn bạn
batman1
đã rút gọn code, chạy rất tốt, nhưng có điều là không xóa dữ liệu cũ đi nên hay bị nhầm dữ liệu.
 
Upvote 0
Upvote 0
Nhờ các bạn sửa giúp code theo file đính kèm,
Cảm ơn các bạn!
Bài này trước đây tôi có làm 1 lần, nó thế này:
1> Viết 1 hàm lọc duy nhất
Mã:
Function UniqueList(ParamArray Arrays())
  Dim item, aTmpArr, aSubArr
  'On Error Resume Next
  With CreateObject("Scripting.Dictionary")
    For Each aSubArr In Arrays
      aTmpArr = aSubArr
      If Not IsArray(aTmpArr) Then aTmpArr = Array(aTmpArr)
      For Each item In aTmpArr
        If TypeName(item) <> "Error" Then
          If Len(item) Then
            If Not .exists(item) Then .Add item, Empty
          End If
        End If
      Next
    Next
    If .Count Then UniqueList = .Keys
  End With
End Function
2> Code áp dụng:
Mã:
Sub Main()
  Dim Arr
  Arr = UniqueList(Range("L4:Z23"), Range("L31:Z50"))
  If IsArray(Arr) Then Range("B2").Resize(, UBound(Arr) + 1).Value = Arr
End Sub
 
Upvote 0
Bài này trước đây tôi có làm 1 lần, nó thế này:
1> Viết 1 hàm lọc duy nhất
Mã:
Function UniqueList(ParamArray Arrays())
  Dim item, aTmpArr, aSubArr
  'On Error Resume Next
  With CreateObject("Scripting.Dictionary")
    For Each aSubArr In Arrays
      aTmpArr = aSubArr
      If Not IsArray(aTmpArr) Then aTmpArr = Array(aTmpArr)
      For Each item In aTmpArr
        If TypeName(item) <> "Error" Then
          If Len(item) Then
            If Not .exists(item) Then .Add item, Empty
          End If
        End If
      Next
    Next
    If .Count Then UniqueList = .Keys
  End With
End Function
2> Code áp dụng:
Mã:
Sub Main()
  Dim Arr
  Arr = UniqueList(Range("L4:Z23"), Range("L31:Z50"))
  If IsArray(Arr) Then Range("B2").Resize(, UBound(Arr) + 1).Value = Arr
End Sub
Cảm ơn bác
ndu96081631
đã quan tâm vấn đề và giúp đỡ. Nhưng bác
ndu96081631
vẫn chưa xóa dữ liệu cũ đi bác à.
 
Upvote 0
Bài này trước đây tôi có làm 1 lần, nó thế này:
1> Viết 1 hàm lọc duy nhất
Mã:
Function UniqueList(ParamArray Arrays())
  Dim item, aTmpArr, aSubArr
  'On Error Resume Next
  With CreateObject("Scripting.Dictionary")
    For Each aSubArr In Arrays
      aTmpArr = aSubArr
      If Not IsArray(aTmpArr) Then aTmpArr = Array(aTmpArr)
      For Each item In aTmpArr
        If TypeName(item) <> "Error" Then
          If Len(item) Then
            If Not .exists(item) Then .Add item, Empty
          End If
        End If
      Next
    Next
    If .Count Then UniqueList = .Keys
  End With
End Function
2> Code áp dụng:
Mã:
Sub Main()
  Dim Arr
  Arr = UniqueList(Range("L4:Z23"), Range("L31:Z50"))
  If IsArray(Arr) Then Range("B2").Resize(, UBound(Arr) + 1).Value = Arr
End Sub
Trời, em chưa để ý bác
ndu96081631
à, code này thuận tiện quá bác ndu96081631 à, Không phải thêm nhiều vòng lặp mà vẫn dồn cho nhiều mảng, bác bận tâm thêm cho em dòng xoa dữ cũ liệu vào với nhé, Cảm ơn bác!
 
Upvote 0
Web KT

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

Back
Top Bottom