Dùng hàm Filter2DArray lọc , chỉnh sữa và xóa dữ liệu 1 lúc 3 sheet (1 người xem)

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

vanhesing

Thành viên thường trực
Tham gia
12/8/10
Bài viết
223
Được thích
30
Dear Cả Nhà !
Trong file mình có sử dụng hàm Filter2DArray của bác ndu96081631 để lọc và chỉnh sữa dữ liệu , tuy nhiên mình chỉ thao tác được trên 1 sheet , khi muốn lọc và sữa cho cả 3 sheet cùng 1 lúc thì không được .
Trong file cụ thể mình có 3 sheet . dữ liệu kết nối với nhau là thông tin chung . Mình nạp dữ liệu 3 sheet vào 3 listbox.Nếu chỉnh sữa bình thường không lọc thì không có vấn đề gì xảy ra. nhưng khi lọc rồi chỉnh sữa thì dữ liệu ở listbox 1 được nạp cho listbox 2 và 3 và không chỉnh sữa được nữa .
Mình có tìm hiểu lại nhưng không dám chắc nên đưa file lên nhờ mọi người giúp đỡ .
Xin mọi người giúp mình phần code xóa dữ liệu dựa vào hàm Filter2DArray.(xóa dữ liệu được chọn ở ca 3 sheet dựa vào thông tin chung )
Thanks All
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Dear Cả Nhà !
Trong file mình có sử dụng hàm Filter2DArray của bác ndu96081631 để lọc và chỉnh sữa dữ liệu , tuy nhiên mình chỉ thao tác được trên 1 sheet , khi muốn lọc và sữa cho cả 3 sheet cùng 1 lúc thì không được .
Trong file cụ thể mình có 3 sheet . dữ liệu kết nối với nhau là thông tin chung . Mình nạp dữ liệu 3 sheet vào 3 listbox.Nếu chỉnh sữa bình thường không lọc thì không có vấn đề gì xảy ra. nhưng khi lọc rồi chỉnh sữa thì dữ liệu ở listbox 1 được nạp cho listbox 2 và 3 và không chỉnh sữa được nữa .
Mình có tìm hiểu lại nhưng không dám chắc nên đưa file lên nhờ mọi người giúp đỡ .
Xin mọi người giúp mình phần code xóa dữ liệu dựa vào hàm Filter2DArray.(xóa dữ liệu được chọn ở ca 3 sheet dựa vào thông tin chung )
Thanks All
Hàm filter2Darray đối số là 1 mảng sArr , do đó nếu bạn lọc cho cả 3 sheets thì đương nhiên bạn phải đưa toàn bộ dữ liệu của 3 sheets đó vào mảng SArr này
Có nhiều cách để làm việc trên, ví dụ :
* 1-đưa dữ liệu 3 sheets vào 3 mảng Arr khác nhau , nối 3 mảng Arr này thành một mảng sArr duy nhất
 
Upvote 0
Hàm filter2Darray đối số là 1 mảng sArr , do đó nếu bạn lọc cho cả 3 sheets thì đương nhiên bạn phải đưa toàn bộ dữ liệu của 3 sheets đó vào mảng SArr này
Có nhiều cách để làm việc trên, ví dụ :
* 1-đưa dữ liệu 3 sheets vào 3 mảng Arr khác nhau , nối 3 mảng Arr này thành một mảng sArr duy nhất

Cụ thể chút bằng code được không bạn vì mình còn mơ hồ về hàm này .Nối 3 mảng thành 1 mình chưa hình dung ra được
Thanks
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Mọi người ai giúp mình chổ này với-0-/.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
cho mình up cái .thanks
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0

code Filter2D có vẻ phước tạp, hình như nó là tinh hoa của GPE thì phải (người đâu tiên khởi xướng hình như anh NDU sau đó được các bậc cao thủ về code như SWiton HoangTrongNghia .v.v. phát triển thêm, không biết phải không, tôi lơ mơ hiểu về nó thôi)

như vậy bạn muốn là sau khi sửa hoặc xóa thì nó sẻ thực hiện trên cả 3 sheet.
như vậy nó đâu có liên quan gì tới cái filter2D ta?
tôi nghỉ là sau khi sửa thì bạn lặp qua các sheet dùng phương thức find chép nội dung này xuống (hoặc xóa đi dòng đó)

như như vậy thì việc tao ra 3 cái listbox là có cần thiết ko?chắc chỉ cần toại ra một cái
dùng dictionary để loại bỏ những mã trùng ở các sheet.
ví dụ để nạp vào listbox1
Mã:
Private Sub CheckBox1_Click()
 Dim sharr As Variant, sarr(), sh As Worksheet, i, j, k As Long, dic As Object
Set dic = CreateObject("Scripting.Dictionary")

If CheckBox1.Value = True Then

ReDim sarr(1 To 60000, 1 To 10) As Variant
For Each sh In Worksheets

If sh.Index < 4 Then
sharr = sh.[a8].Resize(sh.[A60000].End(3).Row - 8, 10).Value
For i = 1 To UBound(sharr)
    k = k + 1
   If Not dic.Exists(sharr(i, 2)) Then
  dic.Add sharr(i, 2), ""
    For j = 1 To UBound(sharr, 2)
      
        sarr(k, j) = sharr(i, j)
    Next j
    End If
Next i
End If
Next
 ReDim sArray(1 To k, 1 To 10)
 sArray = sarr
  ListBox1.List() = sArray
  End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
code Filter2D có vẻ phước tạp, hình như nó là tinh hoa của GPE thì phải (người đâu tiên khởi xướng hình như anh NDU sau đó được các bậc cao thủ về code như SWiton HoangTrongNghia .v.v. phát triển thêm, không biết phải không, tôi lơ mơ hiểu về nó thôi)

như vậy bạn muốn là sau khi sửa hoặc xóa thì nó sẻ thực hiện trên cả 3 sheet.
như vậy nó đâu có liên quan gì tới cái filter2D ta?
tôi nghỉ là sau khi sửa thì bạn lặp qua các sheet dùng phương thức find chép nội dung này xuống (hoặc xóa đi dòng đó)

như như vậy thì việc tao ra 3 cái listbox là có cần thiết ko?chắc chỉ cần toại ra một cái
dùng dictionary để loại bỏ những mã trùng ở các sheet.
ví dụ để nạp vào listbox1
Mã:
Private Sub CheckBox1_Click()
 Dim sharr As Variant, sarr(), sh As Worksheet, i, j, k As Long, dic As Object
Set dic = CreateObject("Scripting.Dictionary")

If CheckBox1.Value = True Then

ReDim sarr(1 To 60000, 1 To 10) As Variant
For Each sh In Worksheets

If sh.Index < 4 Then
sharr = sh.[a8].Resize(sh.[A60000].End(3).Row - 8, 10).Value
For i = 1 To UBound(sharr)
    k = k   1
   If Not dic.Exists(sharr(i, 2)) Then
  dic.Add sharr(i, 2), ""
    For j = 1 To UBound(sharr, 2)
      
        sarr(k, j) = sharr(i, j)
    Next j
    End If
Next i
End If
Next
 ReDim sArray(1 To k, 1 To 10)
 sArray = sarr
  ListBox1.List() = sArray
  End If
End Sub
Chào bạn
hàm Filter2D là của thầy NDU .
Việc mình dùng hàm này để chỉnh sữa trên 3 sheet phục vụ công việc 1 phần và tìm hiểu thêm độ sâu của hàm 1 phần nữa,nếu thao tác được trên cả 3 sheet thì tuyệt vời góp phần cho hàm này trở thành tinh hoa của GPE.
Nói chung , mục đích là tìm hiểu học hỏi thêm về hàm này .Cảm ơn bạn đã gợi ý phương thức Find.mình đã làm rồi nhưng có vẻ chưa thỏa mãn tính tò mò với hàm Filter2D.nên muốn xem thử hàm Filter2D có làm được việc này không.!
Thanks
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0

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

Back
Top Bottom