Just nu i M3-nätverket
Gå till innehåll

Hitta unika värden i flera kolumner


KarinP_79

Rekommendera Poster

Jag behöver hjälp. Jag har testat diverse olika varianter utan att finna en lösning på denna nöt.

 

Min excelfil består av ca 10 kolumner med 365 rader i varje. I cellerna finns textvärden, dock inte rena textvärden utan länkningar till textvärden som ligger i ett annat jätteblad som innehåller ca 60 kolumner. Jag behöver nu finna alla de unika värdena i mina kolumner. Dvs i 3650 celler ligger kanske 50 unika värden.

 

Avancerat filter fungerar inte (har provat att stapla innehållet i alla kolumner i en enda jättekolumn). Jag gissar att det behövs till något slags makro men känner mig inte säker på hur man skriver makron även om jag kan hjälpligt läsa/förstå redan skrivna makron.

 

Hjälp!??

Länk till kommentar
Dela på andra webbplatser

Fungerar det inte att kopiera ihop värdena i en ny kolumn och på dessa lägga avancerat filter? Dvs kopiera kolumn för kolumn och klistra enbart in värdena, inte formlerna.

 

men visst går det att ordna via VBA-kod

Sub UnikaVärden()
Dim rnSource As Range
Set rnSource = Blad1.Range("a1").CurrentRegion
Dim myDict As Object
Set myDict = CreateObject("scripting.Dictionary")

Dim c As Range
For Each c In rnSource
   	If Not myDict.exists(c.Value) Then
       	myDict.Add c.Value, 1
   	End If
Next c
Dim v As Variant
Dim rnTarget As Range
Set rnTarget = Blad1.Range("c1")
Dim rwIndex As Integer
rwIndex = 1
For Each v In myDict.keys
   	rnTarget.Cells(rwIndex, 1) = v
   	rwIndex = rwIndex + 1

Next v


End Sub

anpassa rnSource och rnTarget till att passa ditt blad.

Länk till kommentar
Dela på andra webbplatser

Fungerar det inte att kopiera ihop värdena i en ny kolumn och på dessa lägga avancerat filter? Dvs kopiera kolumn för kolumn och klistra enbart in värdena, inte formlerna.

 

Eftersom värdena uppdateras så blir det i sådana fall ett makro vilket som, dvs ett makro som kopierar och klistrar in bara värdena. Jag ska testa koden bums!

Länk till kommentar
Dela på andra webbplatser

Sub UnikaVärden()
       Dim rnSource As Range
       Set rnSource = Blad1.Range("C5").CurrentRegion
       Dim myDict As Object
       Set myDict = CreateObject("scripting.Dictionary")

       Dim c As Range
       For Each c In rnSource
       If Not myDict.exists(c.Value) Then
               myDict.Add c.Value, 1
       End If
       Next c
       Dim v As Variant
       Dim rnTarget As Range
       Set rnTarget = Blad1.Range("P5")
       Dim rwIndex As Integer
       rwIndex = 1
       For Each v In myDict.keys
       rnTarget.Cells(rwIndex, 1) = v
       rwIndex = rwIndex + 1

       Next v


End Sub

 

Fungerar inte. Tyckte det var minimalt med delar som jag skulle byta ut. Jag har angett rnSource till C5 där första värdet/cellen börjar och rnTarget till P5, där jag vill ha resultatet.

Datorn "stannar upp" men det händer nada. Får inte ens ett felmeddelande...?

Länk till kommentar
Dela på andra webbplatser

Notera att allokeringen för rnSource sker via CurrentRegion. Du har troligen ett exakt område du kan ange istället, säg att du skriver

 

Set rnSource = Blad1.Range("C5:L370")

istället.

 

Orsaken till felet är nog helt enkelt att din cell på C5 inte är "ensam" på det sätt som CurrentRegion kräver.

Länk till kommentar
Dela på andra webbplatser

Notera att allokeringen för rnSource sker via CurrentRegion. Du har troligen ett exakt område du kan ange istället, säg att du skriver

 

Set rnSource = Blad1.Range("C5:L370")

istället.

 

Orsaken till felet är nog helt enkelt att din cell på C5 inte är "ensam" på det sätt som CurrentRegion kräver.

 

Mycket tacksam för svar. Jag blir knäpp för det känns ju som att du vet vad du pratar om. Men uppenbarligen håller inte min dator med. Har ändrat till C5:M258 (bara arbetsdagar) men det händer fortfarande inte ett skvatt. :(

Länk till kommentar
Dela på andra webbplatser

mmh, mystiskt.

 

testa denna bok

UnikaVärden.xls

 

Koden borde fungera oavsett vad som står i cellerna, den plockar bara värden. jag skulle kunna lägga in felkontroll i koden men kanske enklare om du laddar upp ett icke fungerande exempel här.

 

Vad för version av Excel? Hur snabb dator? Det senare ska iofs inte spela roll. Jag testade med ett område om cirka 66000 unika celler/värden som koden läste in och skrev ut på kring en sekund på min datorn, på en riktigt långsam borde det inte ens där ta mer än några sekunder.

Länk till kommentar
Dela på andra webbplatser

mmh, mystiskt.

testa denna bok

UnikaVärden.xls

 

Woohooj! Tackar! Nu har jag löst det! Om jag förstått det jag korrigerat så måste makrot ligga i bladet (inte i modul där jag hade det från början) och bladet måste heta samma sak som i grunden, kan alltså inte döpa om det till "planering" utan det måste heta Blad2. Då funkade koden som ett smäck! Det får inte heller ligga värden direkt anslutande till currentregion, då kommer de med, men jag löste det genom att lägga in en tom kolumn och en tom rad runt värdena.

 

Stort tack för all din hjälp! Utan dig hade jag aldrig fått ordning på detta!

Länk till kommentar
Dela på andra webbplatser

Du kan döpa om bladet som du blir. Dock har ett blad två namn, ett i Excel-fönstret och i VBA-projektet. Koden ovan använder VBA-namnet. Enkelt helt enkelt.

 

ok nej, koden kan ligga i modul så den inte använder några lokala funktioner (som Me) som bara fungerar om koden ligger på ett blad.

Länk till kommentar
Dela på andra webbplatser

Du kan döpa om bladet som du blir. Dock har ett blad två namn, ett i Excel-fönstret och i VBA-projektet. Koden ovan använder VBA-namnet. Enkelt helt enkelt.

 

ok nej, koden kan ligga i modul så den inte använder några lokala funktioner (som Me) som bara fungerar om koden ligger på ett blad.

 

Aha! Då blev allt plötsligt solklart. Supertack!!! (Jag är nästan beredd att skänka dig en cyberpuss!)

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...