05. april 2016 - 10:49Der er
6 kommentarer og 2 løsninger
VBA - Unikke værdier
Hej
Jeg har værdier (Ord) i celle F23 til F32 og igen fra D37 til D43. Cellerne kan godt være tomme.
Jeg vil gerne have listet de unikke værdier i cellerne fra C46 og frem til J46. Hvis der er flere unikke værdier end til J46 skal der komme en fejl meddelelse.
Dim lCount As Long Dim rInput As Range Dim rCell As Range Dim colOrd As New Collection Dim colRemove As New Collection
Set rInput = Range("F23:F32,D37:D43")
On Error Resume Next
'Ordene føjes til en collection med nøgle. 'Hvis det allerede forekommer, føjes ordet 'til en anden collection, colRemove. For Each rCell In rInput If IsEmpty(rCell) = False Then colOrd.Add rCell.Value, rCell.Value If Err.Number = 457 Then colRemove.Add rCell.Value, rCell.Value Err.Number = 0 End If End If Next
'colRemove indeholder evt. dubletter, og vi 'gennemløber colRemove og fjerner dubletterne 'fra colOrd If colRemove.Count > 0 Then For lCount = 1 To colRemove.Count colOrd.Remove colRemove.Item(lCount) Next End If
'Nu gennemløbes de unikke værdier i colOrd, 'og de indsættes i celle C46 og mod højre. 'Hvis der er mere end 8 unikke ord, kommer 'en msgbox, og løkken afbrydes. If colOrd.Count > 0 Then For lCount = 1 To colOrd.Count If lCount > 8 Then MsgBox "Der er mere end 8 unikke ord" GoTo BeforeExit End If Range("C46").Offset(0, lCount - 1).Value = colOrd.Item(lCount) Next End If
BeforeExit: Set colOrd = Nothing Set colRemove = Nothing Set rCell = Nothing Set rInput = Nothing
Det forenkler jo sagen :-) Så skulle nedenstående være nok:
Sub Unikke()
Dim lCount As Long Dim rInput As Range Dim rCell As Range Dim colOrd As New Collection
Set rInput = Range("F23:F32,D37:D43")
On Error Resume Next
'Ordene føjes til en collection med nøgle. 'Det sikrer, at ord kun tilføjes én gang. For Each rCell In rInput If IsEmpty(rCell) = False Then colOrd.Add CStr(rCell.Value), CStr(rCell.Value) End If Next
If colOrd.Count > 0 Then For lCount = 1 To colOrd.Count If lCount > 8 Then MsgBox "Der er mere end 8 unikke ord" End If Range("C46").Offset(0, lCount - 1).Value = colOrd.Item(lCount) Next End If
BeforeExit: Set colOrd = Nothing Set rCell = Nothing Set rInput = Nothing
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.