PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBAHämta x antal rader givet värde i specifik kolumnHämta x antal rader givet värde i specifik kolumn
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2018-10-27 12:44
 

Hur borde jag tänka när jag ska sätta upp ett macro som automatiskt hämtar de rader vars värde i en viss kolumn är lika med ett visst värde (i kolumn x)? Jag vill få ut datan i utan formler i ett nytt blad och jag vill att den ursprungliga listan med data inte ändrar format (dvs ingen filtrering efter att macrot har körts).

Det som gör detta klurigt för mig är att datan i ursprungslistan fylls på genom ett annat macro (data from web) och vidare gäller att värdet jag vill använda som key för att matcha kolumn x inte alltid är detsamma.

Tack på förhand!

 

/Magnus Eke

 

Nytt inlägg
 2018-10-29 08:12
 

Läses datan ut till en tabell eller bara rakt upp och ner till ett blad? Är området du får data till det samma varje gång eller har det olika storlek (bredd och djup), Nyckeln som förändras, hur ser logiken ut där? hur vet man vilken nyckel som ska användas för varje rad?
Nytt inlägg
 2018-10-29 19:00
 
 Ändrad av magnus-eke  på 2018-10-29 20:02:34

 Hej Christian, Tack för ditt svar. Svarar i samma följd som du ställt frågorna:

1. Rakt upp och ner till ett blad.

2. Området har samma bredd sett till att det handlar om samma kolumner. Dock varierar antalet rader som ska kopieras beroende på hur många rader som innehåller gällande nyckel i kolumn x.

3. Nyckeln = en specifik cells värde (i exemplet nedan cell H8)som ligger utanför området med data.

Jag hittar ingenstans jag kan bifoga ett dokument som exempel, så kika nedanstående förenklade exempel med överskrifter samt tre rader med data. Det jag vill kunna göra är att ha ett macro som automatiskt hämtar ut de rader där kolumn 1 = H8. I praktiken hade det tilltänkta macrot alltså hämtat de båda nedersta raderna.

Cell H8 = xx

 

Kol 1     Kol 2     Kol 3

yy           12,2      Grön

xx           14,4      Grön

xx           12,3       Blå

 

Några förslag? :)

 

Nytt inlägg
 2018-10-30 08:37
 
Hej hej

Skapa en modul och lägg in koden nedan:
Notera att jag satt en statisk range, satte hundra rader ("a1:G100"), sätt denna så att storleken aldrig kan vara för liten.
Koden utgår ifrån att du har rubriker på rad 1 och att dessa ska med.
Matchningen med din nyckel skiljer på stora och små bokstäver.

Kan vara smart att jämföra resultat med förväntat resultat. Ex. =antal.om("a1:G100; H8) så att du ser att du fick med rätt antal rader..

Mvh Christian

Option Explicit

Sub ReadData()

Dim ws As Worksheet: Set ws = ActiveSheet
Dim rngData As Range: Set rngData = ws.Range("A1:G100")
Dim keyVal As String: keyVal = ws.Range("h8").Value

Dim vntData As Variant: vntData = rngData
Dim vntOut As Variant
ReDim vntOut(1 To UBound(vntData, 1), 1 To UBound(vntData, 2))
Dim i, k, m As Long

m = 1

For i = 1 To UBound(vntData, 1)
If i = 1 Then
For k = 1 To UBound(vntOut, 2)
vntOut(m, k) = vntData(i, k)
Next k
m = m + 1
ElseIf vntData(i, 1) = keyVal Then
For k = 1 To UBound(vntOut, 2)
vntOut(m, k) = vntData(i, k)
Next k
m = m + 1
End If
Next i

Call writeData(vntOut)


End Sub

Function writeData(vnt As Variant)

Dim ws As Worksheet: Set ws = Worksheets.Add
Dim trng As Range: Set trng = ws.Range(Cells(1, 1), Cells(UBound(vnt, 1), UBound(vnt, 2)))

trng.Value = vnt


End Function
Nytt inlägg
 2018-11-01 19:17
 

 Sorry, men jag tror du får vägleda mig lite här,

Vilken av variablerna/syntaxen referar till det worksheet jag ska hämta datan ifrån respektive vilken refererar till fliken man klistrar in datan i?

 

 

 

 

Nytt inlägg
 2018-11-02 10:56
 
Hej hej

I koden som jag skrev så ska koden köras från det blad där din indata finns.

Activesheet utgår nämligen från det aktiva bladet. Vill du istället kunna köra koden från valfritt blad så får du byta ut

Set ws = activesheet, mot:
Set ws = thisworkbook.sheet("namnet på ditt data blad").

Området på bladet sätts med
Set rngData = ws.Range("A1:G100")
Där byter du ut "A1:G100" mot den storleken du vill ha. Se till att området är så stort som du tror att framtida data maximalt kommer att vara, så slipper du gå in och ändra innan varje körning.

När data sedan skrivs ut med functionen WriteData, så skapas ett helt nytt blad med:
Set ws = Worksheets.Add
Så du får alltså ett extra blad varje gång koden körs.

Funkar detta för dig?
Mvh
Christian


Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBAHämta x antal rader givet värde i specifik kolumnHämta x antal rader givet värde i specifik kolumn

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter