Avatar billede Slettet bruger
17. oktober 2010 - 12:49 Der er 7 kommentarer og
1 løsning

Simpel VBA kode (da jeg er ny med VBA)

Hej

Først vil jeg lige sige, at dette er min første VBA-opgave.

Jeg har et ark (ark1) med rækker der beskriver personer (poster).
Hver ny post starter med navnet, men det er forekslligt hvilke værdier der ellers er skrevet under hvert navn. Hvis landet er angivet står det under land, hvis det ikke er andet findes land ikke som en række.

Eks på ark 1:

Kolonne A
Navn
Fødselsdag
Land
"tom række"
Navn
Land
"Tom række"
Navn
Fødselsdag
"Tom række"
osv...

Værdierne står i kolonne B.

Jeg vil gerne lave en løkke der gør følgende:

Gennemløber ark1 indtil der kommer to tomme rækker i træk.

Mens ark1 gennemløbes skal der ske følgende:
Hvis der i rækken i kolonne A stødes på "værdien" navn skal "værdien" i rækken i kolonne b kopieres til ark 2 kolonne b i den næste tomme række. Hvis der så kommer en række i ark1 med værdien "land", skal værdien i kolonne 2 kopieres til ark2 kolonne 3 i den seneste række hvor der netop er tilføjet et navn.

Dvs. jeg vil gerne ende med en liste med navne i kolonne B og lande  i kolonne C i ark 2 som er samlet fra ark1.

Nogen der kan hjælpe? Please - husk at jeg er (næsten) helt ny i VBA.
Avatar billede excelent Ekspert
17. oktober 2010 - 13:55 #1
Står det sådan:
Navn
Anders
Fødselsdag
11-02-1998
Land
Danmark

eller

Anders
11-02-1998
Danmark

vis et par eks. samt lidt  af kolonne A i Ark2
Avatar billede Slettet bruger
17. oktober 2010 - 14:11 #2
Hej

I ark1 står det sådan:

Kolonne a | Kolonne b
Navn | Anders
Land | Danmark
Fødselsdag | 11-02-1998
"Tom række"
Navn | Peter
Land | Sverige
"Tom række"
Osv.

I ark2 kunne jeg godt tænke mig at det kommer til at se ud som følger:

Kolonne A | Kolonne B | Kolonne C
"Tom cells" | Navn | Land
"Tom celle" | Anders | Danmark
"Tom celle" | Peter | Sverige
osv

Giver det mening?
Avatar billede excelent Ekspert
17. oktober 2010 - 14:44 #3
Sub Flyt()
Set sh2 = Sheets("Ark2")
Columns("A:A").SpecialCells(xlCellTypeConstants, 23).Select
For Each c In Selection
rk1 = sh2.Cells(10000, 2).End(xlUp).Offset(1, 0).Row
rk2 = sh2.Cells(10000, 3).End(xlUp).Offset(1, 0).Row
If c = "Navn" Then sh2.Cells(rk1, "B") = c.Offset(0, 1)
If c = "Land" Then sh2.Cells(rk2, "C") = c.Offset(0, 1)
Next
End Sub


klik på følgende link hvis du skal have hjælp til koden
http://pmexcelent.dk/ModulTips.html
Avatar billede Slettet bruger
17. oktober 2010 - 15:08 #4
Tak - det virker.

Vil du forklarer hvad der sker i linie 3, 4 og 6?

Og hvis du smider et svar, sender jeg points :-)
Avatar billede Slettet bruger
17. oktober 2010 - 15:32 #5
Hmm - hvordan håndterer koden, hvis en post ikke har angivet noget lande. Bliver kolonnen med lande i ark2 så forskubbet en tand opad?
Avatar billede excelent Ekspert
17. oktober 2010 - 15:50 #6
ja det gør den vist prøv udskift med denne

Sub Flyt()
Set sh2 = Sheets("Ark2")
Columns("A:A").SpecialCells(xlCellTypeConstants, 23).Select
For Each c In Selection
rk1 = sh2.Cells(10000, 2).End(xlUp).Offset(1, 0).Row
rk2 = sh2.Cells(10000, 3).End(xlUp).Offset(1, 0).Row
If c = "Navn" Then sh2.Cells(rk1, "B") = c.Offset(0, 1)
If c = "Land" Then sh2.Cells(rk1 - 1, "C") = c.Offset(0, 1)
Next
End Sub
Avatar billede Slettet bruger
21. oktober 2010 - 09:47 #7
Hej

Jeg fik det til at køre. Hvis du smider et svar kvitterer jeg med point.

Tak.
Avatar billede excelent Ekspert
21. oktober 2010 - 15:11 #8
velbekom
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester