Jag håller på med ett lite "program" i excel som söker i en lista med +5000 produkter. Programmet består av ett blad med alla produkter i en lista och ett sammanfattningsblad där alla beräkningar sker. På sammanfattningsbladet skriver man in namnet på sin produkt och en sökning startar och letar reda på den produkten i listan och det sker en massa beräkningar med de data som är associerade med produkten. Just nu är det 25st kolumner med data till varje produkt. Till att börja med är det troligtvis mycket lättare att använda excels inbyggda funktion, find. Ok, skall se om jag kan förklara lite bättre, jag har ordnat till det på följande sätt: Vi börjar bakifrån:hämta data från flera kolumner i excel
Så som jag har löst det så gör programmet 25st sökningar för varje produkt man matar in, en för varje kolumn. Knappast snabbt eller så snyggt.
Nu undrar jag om ngn av er kan en lösning så att när sökningen har skett och man har hittat sin produkt så kan 25st beräkningar ske och sedan klistras in i på sammanfattningsbladet eller något liknande. Det jag är ute efter är att det bara skall ske en sökning per produkt. Sen om datan från listan bara kopieras eller om beräkningarna kan ske innan värdena kopieras in på sammanfattningsbladet spelar mindre roll.
Min sökning ser ut på detta sätt om det är till hjälp att bygga vidare på:
Function getDimention(vTum)
On Error Resume Next
Dim cSource As Range
Dim cData As Range
Dim vDimention As Variant
If vTum.Value <> "" Then
For Each cSource In Worksheets("DATABAS").Range("B3:B5680").Cells
If cSource.Value = "" Then Exit For
If cSource.Value = vTum.Offset(0, -1).Value Then
vVarde = CDec(cSource.Offset(0, 2) * vTum.Value / 100)
Exit For
End If
Next cSource
Else
vVarde = ""
End If
getDimention = vVarde
End Function Sv: hämta data från flera kolumner i excel
Förklara lite bättre hur du vill att programmet skall fungera?
Vill du ha formler, eller ska du uppdatera en hel sida.
Rent spontant låter det som att du vill använda en HLOOKUP, eller MATCH-formel.
Det finns ofta bättre lösningar än VBA, som tenderar att bli långsamma och klumpiga.Sv: hämta data från flera kolumner i excel
På sammanställningssidan skriver man i första kolumnen tex "skruv", då ploppar det upp en rullista (mha VB) med alla produkter som innehåller det ordet och man väljer den man är ute efter. I nästa kolumn skriver man in en variabel som alla beräkningar sedan skall baseras på. När detta värde är ifyllt så startar då mina 25st sökningar och beräkningarna returneras till kolumn 3-28. Anropningen kör jag så här "=getDimention(B2)" osv. för varje funktion.
Sen fortsätter det så att man på nästa rad matar in nästa produkt man är ute efter. Typ att man gör en inköpslista med alla produkter man vill ha med en massa data presenterade.
Och beräkningarna skulle inte behöva ske i VB utan det kan man ju göra när datan har hämtats in i Excel istället.
Men det är kanske som du säger att det finns en bättre funktion direkt i excel än att gå omvägen via VB. Skall kolla lite på detta idag. Fast det vore trevligt med en VB-lösning med.Sv: hämta data från flera kolumner i excel
<b>>Fast det vore trevligt med en VB-lösning med.</b>
Av erfarenhet säger jag: Tänk inte så!
VB-lösningar finns <b>alltid</b>, men är i praktiken långsammare och krångligare än rena excelformler, i mer än 90% av fallen.
Tyvärr så har du gett ungefär all information utom just den man behöver... =)
Nåväl, låt mig se om jag har förstått en del rätt;
1. Du har en "databassida", där du har en lista på något sätt?
2. Du har en "presentationssida", där du vill kunna välja en produkt på ett eller annat sätt?
Rätt?
Sen skriver du "I nästa kolumn skriver man in en variabel som alla beräkningar sedan skall baseras på." Innebär det att du har flera olika typer av värden för varje produkt, typ olika skruvstorlekar, i din databas?
Hur använder du det värdet sen?
Tar du typ 60mm * 30 öre/mm, eller slår du upp värden från databasen på något sätt?
Som det ser ut i koden så verkar det ju som om du letar i en lista med olika tumstorlekar, tittar i cellen två steg till höger om den hittade efter något slags värde, multiplicerar det med antalet tum och trixar lite?
Då skulle du kunna börja med att lägga till en kolumn i din "databas", där du redan gör hela den beräkningen. Du har tum-antalen i kolumn B, och något värde i kolumn D?
Då gör du i kolumn E (eller närmast lediga), där du skriver =B2*D2/100, typ.
På så sätt behöver man inte göra den beräkningen någon annanstans.
I dina celler på presentationsbladet kör du sen med HLOOKUP.
"Datarange" skall vara hela din "databas", "Search value" skall vara antalet tum, och "column offset" skall vara antalet kolumner mellan B och den du har det beräknade värdet i.
Jag kan nästan garantera att det är det bästa sättet att lösa det på, på alla sätt. Effektivast, lättast och mest lättläst. Återkom om du har frågor.
PS. För övrigt heter det väl Dimension? =)