Giúp mình hàm Vba để thay hàm chuổi excel được không ạ?

Liên hệ QC

tony008

Thành viên mới
Tham gia
6/10/08
Bài viết
21
Được thích
1
Mình có một danh sách, tên nhà cung cấp, đã dùng hàm chuỗi excel lọc tên trùng và lọc khoảng trắng ra cột L, nhưng nó chạy nặng quá nhiều khi đứng máy luôn. Có anh chị thầy cô giúp mình viết cái code vba để excel chạy bớt nặng được không ạ. Em xin cảm ơn
 

File đính kèm

  • help me.xlsx
    41.3 KB · Đọc: 14
Lần chỉnh sửa cuối:
Upvote 0
ok cảm ơn bạn đã nhắc nhở
ok là tên của bạn hả?
PHP:
Option Explicit

Public Sub DanhMuc()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
    sArr = Sheet2.Range("E8", Sheet2.Range("E100000").End(xlUp)).Value
    R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1)
With CreateObject("Scripting.Dictionary")
    .CompareMode = vbTextCompare
    For I = 1 To R
        If sArr(I, 1) <> Empty Then
            If Not .Exists(sArr(I, 1)) Then
                K = K + 1
                .Item(sArr(I, 1)) = ""
                dArr(K, 1) = sArr(I, 1)
            End If
        End If
    Next I
End With
Sheet2.Range("L8").Resize(R).ClearContents
Sheet2.Range("L8").Resize(K) = dArr
End Sub
 
Upvote 0
Công thức lọc loại trùng, loại rỗng đây.

L8 =IFERROR(INDEX($E$8:$E$1000,AGGREGATE(15,6,ROW($E$1:$E$1000)/($E$8:$E$1000<>"")/(COUNTIF(L$7:L7,$E$8:$E$1000)=0),ROW(G1))),"")

Chỉ enter thôi nhé.
 
Upvote 0
ok là tên của bạn hả?
PHP:
Option Explicit

Public Sub DanhMuc()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
    sArr = Sheet2.Range("E8", Sheet2.Range("E100000").End(xlUp)).Value
    R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1)
With CreateObject("Scripting.Dictionary")
    .CompareMode = vbTextCompare
    For I = 1 To R
        If sArr(I, 1) <> Empty Then
            If Not .Exists(sArr(I, 1)) Then
                K = K + 1
                .Item(sArr(I, 1)) = ""
                dArr(K, 1) = sArr(I, 1)
            End If
        End If
    Next I
End With
Sheet2.Range("L8").Resize(R).ClearContents
Sheet2.Range("L8").Resize(K) = dArr
End Sub
bạn thật vui tính. Cảm ơn bạn nhiều nha
Bài đã được tự động gộp:

ok là tên của bạn hả?
PHP:
Option Explicit

Public Sub DanhMuc()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
    sArr = Sheet2.Range("E8", Sheet2.Range("E100000").End(xlUp)).Value
    R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1)
With CreateObject("Scripting.Dictionary")
    .CompareMode = vbTextCompare
    For I = 1 To R
        If sArr(I, 1) <> Empty Then
            If Not .Exists(sArr(I, 1)) Then
                K = K + 1
                .Item(sArr(I, 1)) = ""
                dArr(K, 1) = sArr(I, 1)
            End If
        End If
    Next I
End With
Sheet2.Range("L8").Resize(R).ClearContents
Sheet2.Range("L8").Resize(K) = dArr
End Sub
nếu cột "tên nhà cung cấp" cột E8 mà mình nhập thêm tên vào thì nó không tự động hiện bên cột L ah bạn hay là mình phải chạy lại từ đầu ạ
 
Lần chỉnh sửa cuối:
Upvote 0
bạn thật vui tính. Cảm ơn bạn nhiều nha
Bài đã được tự động gộp:


nếu cột "tên nhà cung cấp" cột E8 mà mình nhập thêm tên vào thì nó không tự động hiện bên cột L ah bạn hay là mình phải chạy lại từ đầu ạ
Mỗi lần "đụng chạm" vào cột E mà "chạy" 1 lần thì có "phí của" lắm không?
 

File đính kèm

  • help me.xlsm
    47.9 KB · Đọc: 4
Upvote 0
nếu cột "tên nhà cung cấp" cột E8 mà mình nhập thêm tên vào thì nó không tự động hiện bên cột L ah bạn hay là mình phải chạy lại từ đầu ạ
Sau khi thêm, phải chạy lại sub.
Mã:
Sub Macro1()

    Dim lastRow As Long
    lastRow = Range("E" & Rows.Count).End(xlUp).Row
    Range("E8:E" & lastRow).Copy Range("L8")
    Range("L8:L" & lastRow).RemoveDuplicates Columns:=1, Header:=xlNo
    Range("L8:L" & lastRow).Sort Key1:=Range("L8"), Order1:=xlAscending, Header:=xlNo
End Sub
 
Upvote 0
Mỗi lần "đụng chạm" vào cột E mà "chạy" 1 lần thì có "phí của" lắm không?
cảm ơn bạn rất nhiều, bạn có thể giúp mình thêm 1 bước sắp sếp tên lọc ra theo thứ tự A,B,C không vậy.Mình không rành lênh VBA lắm, cảm ơn bạn nhiều
Bài đã được tự động gộp:

Sau khi thêm, phải chạy lại sub.
Mã:
Sub Macro1()

    Dim lastRow As Long
    lastRow = Range("E" & Rows.Count).End(xlUp).Row
    Range("E8:E" & lastRow).Copy Range("L8")
    Range("L8:L" & lastRow).RemoveDuplicates Columns:=1, Header:=xlNo
    Range("L8:L" & lastRow).Sort Key1:=Range("L8"), Order1:=xlAscending, Header:=xlNo
End Sub
code của bạn có cần chạy lại không hay là tự động ra luôn ạ
Bài đã được tự động gộp:

Sau khi thêm, phải chạy lại sub.
Mã:
Sub Macro1()

    Dim lastRow As Long
    lastRow = Range("E" & Rows.Count).End(xlUp).Row
    Range("E8:E" & lastRow).Copy Range("L8")
    Range("L8:L" & lastRow).RemoveDuplicates Columns:=1, Header:=xlNo
    Range("L8:L" & lastRow).Sort Key1:=Range("L8"), Order1:=xlAscending, Header:=xlNo
End Sub
code của bạn có cần chạy lại không hay là tự động ra luôn ạ
 
Upvote 0
cảm ơn bạn rất nhiều, bạn có thể giúp mình thêm 1 bước sắp sếp tên lọc ra theo thứ tự A,B,C không vậy.Mình không rành lênh VBA lắm, cảm ơn bạn nhiều
Thay Sub cũ trong Module bằng cái này:
PHP:
Option Explicit

Public Sub DanhMuc()
Application.ScreenUpdating = False
Dim sArr(), dArr(), I As Long, K As Long, R As Long, Txt As String
    sArr = Sheet2.Range("E8", Sheet2.Range("E100000").End(xlUp)).Value
    R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1)
With CreateObject("Scripting.Dictionary")
    .CompareMode = vbTextCompare
    For I = 1 To R
        If sArr(I, 1) <> Empty Then
            Txt = Application.WorksheetFunction.Trim(sArr(I, 1))
            If Not .Exists(Txt) Then
                K = K + 1
                .Item(Txt) = ""
                dArr(K, 1) = Application.WorksheetFunction.Proper(Txt)
            End If
        End If
    Next I
End With
With Sheet2
    .Range("L8").Resize(R).ClearContents
    .Range("L8").Resize(K) = dArr
    .Range("L8").Resize(K).Sort Key1:=.Range("L8"), Order1:=xlAscending
End With
End Sub
 
Upvote 0
Thay Sub cũ trong Module bằng cái này:
PHP:
Option Explicit

Public Sub DanhMuc()
Application.ScreenUpdating = False
Dim sArr(), dArr(), I As Long, K As Long, R As Long, Txt As String
    sArr = Sheet2.Range("E8", Sheet2.Range("E100000").End(xlUp)).Value
    R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1)
With CreateObject("Scripting.Dictionary")
    .CompareMode = vbTextCompare
    For I = 1 To R
        If sArr(I, 1) <> Empty Then
            Txt = Application.WorksheetFunction.Trim(sArr(I, 1))
            If Not .Exists(Txt) Then
                K = K + 1
                .Item(Txt) = ""
                dArr(K, 1) = Application.WorksheetFunction.Proper(Txt)
            End If
        End If
    Next I
End With
With Sheet2
    .Range("L8").Resize(R).ClearContents
    .Range("L8").Resize(K) = dArr
    .Range("L8").Resize(K).Sort Key1:=.Range("L8"), Order1:=xlAscending
End With
End Sub
cảm ơn bạn rất nhiều.
 
Upvote 0
Web KT

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

Back
Top Bottom