langkhachquaduong
Thành viên chính thức
- Tham gia
- 23/7/19
- Bài viết
- 50
- Được thích
- 8
Dùng thủ tục đi, hàm sao làm được. Hoặc dùng chức năng Consolidate có sẵn trong Excel cũng được màMình có 1 hàm unique để lọc dữ liệu duy nhất.
Làm cách để khi ta gõ hàm unique vào ô b1 , kết qủa unique là 10 giá trị thì tự động hàm unique gán giá trị xuống ô b1 đến b10.
Nếu bạn dùng phiên bản office 365 thì thậm chí bạn không cần làm gì cả, tự nhiên nó được vậy thôiMình có 1 hàm unique để lọc dữ liệu duy nhất.
Làm cách để khi ta gõ hàm unique vào ô b1 , kết qủa unique là 10 giá trị thì tự động hàm unique gán giá trị xuống ô b1 đến b10.
Function UNIQUE(Rng As Range)
Dim Arr As Variant, Cls As Range
Dim J As Long, K As Long, W As Long
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
ReDim Arr(1 To 2 * Rng.Cells.Count, 1 To 1)
For Each Cls In Rng
J = J + 1
If Not dic.exists(Cls.Value) Then
dic.Add Cls.Value, J
W = W + 1: Arr(W, 1) = Str(Cls.Value)
End If
Next
UNIQUE = Arr()
End Function
Không phải vậy đâu sư phụ à. Ý người ta là làm sao cho nó tự động fill công thức mảng kìa. Như trong video, em gõ công thức vào 1 cell, enter phát là nó tự fill xuống đến hết mà không cần phải quét chọn trước vùng chứa kết quả (mà dù có quét cũng không biết phải quét bao nhiêu ô là đủ)Nếu không có 365 thì xài tạm cái này:
PHP:Function UNIQUE(Rng As Range) Dim Arr As Variant, Cls As Range Dim J As Long, K As Long, W As Long Dim dic As Object Set dic = CreateObject("Scripting.Dictionary") ReDim Arr(1 To 2 * Rng.Cells.Count, 1 To 1) For Each Cls In Rng J = J + 1 If Not dic.exists(Cls.Value) Then dic.Add Cls.Value, J W = W + 1: Arr(W, 1) = Str(Cls.Value) End If Next UNIQUE = Arr() End Function
Loại hàm mảng này tôi đã từng giải thíchn cách dùng rồi.Nếu không có 365 thì xài tạm cái này:
...
Chắc là ý như Video ... VBA thừa sức viết ra và không xài tới API của BillMình có 1 hàm unique để lọc dữ liệu duy nhất.
Làm cách để khi ta gõ hàm unique vào ô b1 , kết qủa unique là 10 giá trị thì tự động hàm unique gán giá trị xuống ô b1 đến b10.
Tìm trên diễn đàn nha, trước đây mình có làm thử theo file trên diễn đàn, chạy chậm quá nên xóa mấtMình có 1 hàm unique để lọc dữ liệu duy nhất.
Làm cách để khi ta gõ hàm unique vào ô b1 , kết qủa unique là 10 giá trị thì tự động hàm unique gán giá trị xuống ô b1 đến b10.
Bạn kiểm tra thử xem,Mình có 1 hàm unique để lọc dữ liệu duy nhất.
Làm cách để khi ta gõ hàm unique vào ô b1 , kết qủa unique là 10 giá trị thì tự động hàm unique gán giá trị xuống ô b1 đến b10.
Option Explicit
Public RangesToExpand As New Collection
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Dim oneCell As Range
Dim strFormula
Application.EnableEvents = False
For Each oneCell In RangesToExpand
With oneCell
strFormula = .Cells(1, 1).FormulaArray
.CurrentRegion.ClearContents
.FormulaArray = strFormula
RangesToExpand.Remove .Address(, , , True)
End With
Next oneCell
Application.EnableEvents = True
End Sub
Function UNIQUES_COL(rng As Range) As Variant()
Dim list As New Collection
Dim Ulist() As Variant
Dim Value, i As Long
On Error Resume Next
For Each Value In rng
list.Add CStr(Value), CStr(Value)
Next
On Error GoTo 0
ReDim Ulist(list.Count - 1, 0)
For i = 0 To list.Count - 1
Ulist(i, 0) = list(i + 1)
Next
If TypeName(Application.Caller) = "Range" Then
If Application.EnableEvents Then
With Application.Caller
If .Rows.Count <> i Or .Columns.Count <> 1 Then
If ThisWorkbook.RangesToExpand Is Nothing Then
Set ThisWorkbook.RangesToExpand = New Collection
End If
With .Resize(i, 1)
ThisWorkbook.RangesToExpand.Add item:=.Cells, Key:=.Address(, , , True)
End With
End If
End With
End If
End If
UNIQUES_COL = Ulist
End Function
=UNIQUES_COL($A$1:$A$13)
TransposeArray = ResizeArray(Total)
Mình đã text thử ok đó.Bạn kiểm tra thử xem,
Bỏ đoạn này vào ThisWorkbook module:
Mã:Option Explicit Public RangesToExpand As New Collection Private Sub Workbook_SheetCalculate(ByVal Sh As Object) Dim oneCell As Range Dim strFormula Application.EnableEvents = False For Each oneCell In RangesToExpand With oneCell strFormula = .Cells(1, 1).FormulaArray .CurrentRegion.ClearContents .FormulaArray = strFormula RangesToExpand.Remove .Address(, , , True) End With Next oneCell Application.EnableEvents = True End Sub
Bỏ đoạn này vào Module có tên "FUNCUNIQUE" hoặc một module mới.
Mã:Function UNIQUES_COL(rng As Range) As Variant() Dim list As New Collection Dim Ulist() As Variant Dim Value, i As Long On Error Resume Next For Each Value In rng list.Add CStr(Value), CStr(Value) Next On Error GoTo 0 ReDim Ulist(list.Count - 1, 0) For i = 0 To list.Count - 1 Ulist(i, 0) = list(i + 1) Next If TypeName(Application.Caller) = "Range" Then If Application.EnableEvents Then With Application.Caller If .Rows.Count <> i Or .Columns.Count <> 1 Then If ThisWorkbook.RangesToExpand Is Nothing Then Set ThisWorkbook.RangesToExpand = New Collection End If With .Resize(i, 1) ThisWorkbook.RangesToExpand.Add item:=.Cells, Key:=.Address(, , , True) End With End If End With End If End If UNIQUES_COL = Ulist End Function
Gõ vào F1:
Mã:=UNIQUES_COL($A$1:$A$13)
Bác nhớ từ khóa tên gì không em muốn kham khảo.Tìm trên diễn đàn nha, trước đây mình có làm thử theo file trên diễn đàn, chạy chậm quá nên xóa mất
xem video bài số 4 Anh ý xài 365 đấy không quét chọn đối số của hàm thì chỉ có nước gõ vào thôi bạn ợTrong Excel 365 thì hàm Unique nó tự động điền xuống dưới luôn, không cần phải quét chọn toàn bộ ô trước khi gõ hàm.
Em nhầm, bác Quote nhanh quá, em đang xài 365 nên có cái hàm nàyxem video bài số 4 Anh ý xài 365 đấy không quét cho đối số của hàm thì chỉ có nước gõ vào thôi bạn ợ
Bạn thử lấy code phía trên bỏ vô module chạy.Gõ vào 1 ô thì tự điền công thức giống như hàm unique 365Trong Excel 365 thì hàm Unique nó tự động điền xuống dưới luôn, không cần phải quét chọn toàn bộ ô trước khi gõ hàm.
Hàm 365 là hàm có trên 1 Cells thôi nhé bạn ... còn hàm đó là mảng rùi thử xóa vài cells trong hàm xem nó ko cho xóa đâuBạn thử lấy code phía trên bỏ vô module chạy.Gõ vào 1 ô thì tự điền công thức giống như hàm unique 365
Dạ đúng rồi này phải xoá luôn 1 mảng.Hàm 365 là hàm có trên 1 Cells thôi nhé bạn ... còn hàm đó là mảng rùi thử xóa vài cells trong hàm xem nó ko cho xóa đâu