hongphuong
Tôi yêu THVBA
Em chào các anh chị
Em nhờ các anh chị viết giúp hàm này với ạ
Em cảm ơn ạ
Em nhờ các anh chị viết giúp hàm này với ạ
Em cảm ơn ạ
Bạn cần đăng nhập để thấy đa phương tiện
VIP
Bạn ơi, tại sao 55 = 1 mà 22 = 2, không hiểu gì hết á.
Option Explicit
Function DemSo(sRng As Range) As String
Dim iRng As Range
Dim iString As String
Dim i As Long
Dim j As Long
Dim A As Variant
Dim Temp As Variant
Dim Dict As Object
Set Dict = CreateObject("Scripting.Dictionary")
Dim iCheck As Long
Dim iCount As Long
ReDim Temp(0) As Variant
iCheck = 0
For Each iRng In sRng
If iString = "" Then
iString = iRng.Value
Else
iString = iString & "," & iRng.Value
End If
Next iRng
A = Split(iString, ",")
For i = LBound(A) To UBound(A)
If i <> UBound(A) Then
If Not Dict.Exists(A(i)) Then
Dict.Add A(i), 1
Temp(iCheck) = A(i)
iCheck = iCheck + 1
ReDim Preserve Temp(UBound(Temp) + 1) As Variant
End If
Else
If Not Dict.Exists(A(i)) Then
Temp(iCheck) = A(i)
Else
ReDim Preserve Temp(UBound(Temp) - 1) As Variant
End If
End If
Next i
For i = LBound(Temp) To UBound(Temp)
For j = LBound(A) To UBound(A)
If Temp(i) = A(j) Then
iCount = iCount + 1
End If
Next j
If DemSo = "" Then
DemSo = "So " & Temp(i) & " - " & iCount & "lan"
Else
DemSo = DemSo & " ; So " & Temp(i) & " - " & iCount & "lan"
End If
iCount = 0
Next i
End Function
Hi vọng cái này đúng ý của bạnEm cảm ơn các anh @Yukino Ichikawa @Cẩm Giang anh viết chi tiết quá cơ
Nhưng em chỉ cần kết quả như hình ảnh này anh oi
Anh sửa giúp em với anh nhé
Function Dem(rng As Range) As Variant
Dim Dic As Object, Dic2 As Object, Tmp, sArr, i&, S, So%, KQ, k&
Set Dic = CreateObject("Scripting.Dictionary")
Set Dic2 = CreateObject("Scripting.Dictionary")
sArr = Split(rng.Value, ",")
For i = 0 To UBound(sArr)
If sArr(i) <> Empty Then
Dic.Item(sArr(i)) = Dic.Item(sArr(i)) & "#" & i
End If
Next
For Each S In Dic.Keys
Tmp = Split(Dic.Item(S), "#")
So = UBound(Tmp)
If So > 0 Then
If Dic2.exists(So) = False Then
Dic2.Add (So), ""
End If
End If
Next
ReDim KQ(1 To Dic2.Count, 1 To 1) As Variant
For Each S In Dic2.Keys
k = k + 1
KQ(k, 1) = S
Next
Dem = KQ
End Function
Option Explicit
Function DemSo(sRng As Range) As String
Dim iRng As Range
Dim iString As String
Dim i As Long
Dim j As Long
Dim A As Variant
Dim Temp As Variant
Dim Dict As Object
Set Dict = CreateObject("Scripting.Dictionary")
Dim iCheck As Long
Dim iCount As Long
ReDim Temp(0) As Variant
iCheck = 0
For Each iRng In sRng
If iString = "" Then
iString = iRng.Value
Else
iString = iString & "," & iRng.Value
End If
Next iRng
A = Split(iString, ",")
For i = LBound(A) To UBound(A)
If i <> UBound(A) Then
If Not Dict.Exists(A(i)) Then
Dict.Add A(i), 1
Temp(iCheck) = A(i)
iCheck = iCheck + 1
ReDim Preserve Temp(UBound(Temp) + 1) As Variant
End If
Else
If Not Dict.Exists(A(i)) Then
Temp(iCheck) = A(i)
Else
ReDim Preserve Temp(UBound(Temp) - 1) As Variant
End If
End If
Next i
For i = LBound(Temp) To UBound(Temp)
For j = LBound(A) To UBound(A)
If Temp(i) = A(j) Then
iCount = iCount + 1
End If
Next j
If DemSo = "" Then
'DemSo = "So " & Temp(i) & " - " & iCount & "lan"
DemSo = iCount & "lan"
Else
'DemSo = DemSo & " ; So " & Temp(i) & " - " & iCount & "lan"
DemSo = iCount & "lan"
End If
iCount = 0
Next i
End Function
Theo như trong hình ảnh của bạn (phần màu vàng) thì chỉ trả về kết quả sau khi tính. Như thế thì sau khi trả về kết quả thì làm sao biết được 1 số nào đó có kết quả là bao nhiêu.Nhưng em chỉ cần kết quả như hình ảnh này anh oi
Function DemSo_2_3(sRng As Range) As String
Dim iRng As Range
Dim iString As String, i As Long, j As Long, A As Variant
Dim Temp As Variant
Dim Dict As Object
Set Dict = CreateObject("Scripting.Dictionary")
Dim iCheck As Long
Dim iCount As Long
ReDim Temp(0) As Variant
iCheck = 0
For Each iRng In sRng
If iString = "" Then
iString = iRng.Value
Else
iString = iString & "," & iRng.Value
End If
Next iRng
A = Split(iString, ",")
For i = LBound(A) To UBound(A)
If i <> UBound(A) Then
If Not Dict.Exists(A(i)) Then
Dict.Add A(i), 1
Temp(iCheck) = A(i)
iCheck = iCheck + 1
ReDim Preserve Temp(UBound(Temp) + 1) As Variant
End If
Else
If Not Dict.Exists(A(i)) Then
Temp(iCheck) = A(i)
Else
ReDim Preserve Temp(UBound(Temp) - 1) As Variant
End If
End If
Next i
For i = LBound(Temp) To UBound(Temp)
For j = LBound(A) To UBound(A)
If Temp(i) = A(j) Then
iCount = iCount + 1
End If
Next j
If DemSo_2_3 = "" Then
'DemSo_2_3 = "So " & Temp(i) & " - " & iCount & "lan"
DemSo_2_3 = DemSo_2_3 & iCount & ","
'DemSo_2_3 = iCount & "lan"
Else
'DemSo_2_3 = DemSo_2_3 & " ; So " & Temp(i) & " - " & iCount & "lan"
DemSo_2_3 = DemSo_2_3 & iCount & ","
'DemSo_2_3 = iCount & "lan"
End If
iCount = 0
Next i
End Function
Function DemSo(sRng As Range, sohang As Integer)
Dim iRng As Range
Dim i As Long, R As Integer, Row As Integer, so As Integer
Dim A As Variant, Arr(1 To 100, 1 To 2), dArr()
Dim Dict As Object
Dim iString As String
Set Dict = CreateObject("Scripting.Dictionary")
'Noi cac range thanh 1 chuoi duoc phan cach bang dau ","
For Each iRng In sRng
If iString = "" Then
iString = iRng.Value
Else
iString = iString & "," & iRng.Value
End If
Next iRng
A = Split(iString, ",")
'Duyet qua tung so de dem so lan xuat hien cua tung so
For i = LBound(A) To UBound(A)
If Not Dict.Exists(A(i)) Then
R = R + 1
Dict.Add A(i), R
Arr(R, 1) = A(i)
Arr(R, 2) = Arr(R, 2) + 1
If so < Arr(R, 2) Then so = Arr(R, 2)
Else
Row = Dict.Item(A(i))
Arr(Row, 2) = Arr(Row, 2) + 1
If so < Arr(Row, 2) Then so = Arr(Row, 2)
End If
Next i
Dict.RemoveAll
ReDim dArr(1 To so, 1 To 1)
'Duyet lai so lan xuat hien cua cac so va gom cac so co lan xuat hien giong nhau
R = 0
For i = 1 To 100
If Arr(i, 2) <> Empty Then
If Not Dict.Exists(Arr(i, 2)) Then
R = R + 1
Dict.Add Arr(i, 2), R
dArr(R, 1) = Arr(i, 2) & " : " & Arr(i, 1)
Else
Row = Dict.Item(Arr(i, 2))
dArr(Row, 1) = dArr(Row, 1) & ", " & Arr(i, 1)
End If
End If
Next i
Set Dict = Nothing
DemSo = dArr(sohang, 1)
End Function
Lỗi là lỗi như thế nào, bạn không thể nói rõ hơn được à.khi dữ liệu nhiều hơn một chút thì bị lỗi
Bạn sửa chỗ này thành:DemSo = dArr(sohang, 1)
If sohang <= R Then
DemSo = dArr(sohang, 1)
Else
DemSo = ""
End If