Avatar billede piajakobsen Nybegynder
08. august 2009 - 09:30 Der er 6 kommentarer

Excel VBA programmering

Hej,

Jeg skal lave en macro i Excel, som samler nogle data fra flere rækker i én celle.

Forestil jer, at regnearket ser således ud:

Kolonne A: Indeholder regioner - f.eks. Europa, Asien osv. En region kan optræde flere gange.

Kolonne B: Indeholder landene til regionerne.

Kolonne C: Indeholder salgsdata for hvert land.

I kan se et eksempel her:

Region    Land    Salg    Resultat
Europa    England    12    "England: 12 Danmark: 94 Belgien: 24"
Europa    Danmark    94   
Europa    Belgien    24   
Asien    Kina    95    "Kina: 95 Indien: 37 Japan: 96"
Asien    Indien    37   
Asien    Japan    96   


Jeg vil gerne lave en macro, der kan samle regionsdata for lande og salg i én celle per region, som vist i eksemplet ovenover (der skal være linie skift mellem hvert land).

Jeg forestiller mig, at der lavet et loop, der løber alle rækker i kolonne A igennem. I dette loop skal der laves en "If"-sætning, der afgør, om region 1 er lig med eller forskellig fra region 2. Hvis region 1 er lig med region 2, skal det tilsvarende post i kolonne B og C skrives til samme celle som før. Hvis region 1 er forskellig fra region 2, skal der skrives til en ny celle. Kan I følge mig?

Det er et meget stort datasæt, jeg arbejder med, så det ville være en kæmpe hjælp med en macro. Mit problem er bare, at jeg ikke har særlig stor ekspertise i Excel VBA macroer, så jeg ved ikke, hvordan man referer til de forskellig celler, kolonner mm. i regnearket.

Håber I kan hjælpe mig.

På forhånd tak :-)


Mvh. Pia
Avatar billede sostack Nybegynder
08. august 2009 - 17:12 #1
Noget i denne stil?

Sub regs()
regioner = ""
Sum = ""
i = 1
a = 0
While Ark1.Cells(i, 1).Value <> ""
If region = "" Or region = Ark1.Cells(i, 1).Value Then
Sum = Sum & Ark1.Cells(i, 2).Value & ": " & Ark1.Cells(i, 3).Value & " "
Else
a = i - 1
Ark1.Cells(a, 4).Value = "|" & Sum & "|"
Sum = Ark1.Cells(i, 2).Value & ": " & Ark1.Cells(i, 3).Value & " "
End If
region = Ark1.Cells(i, 1)
i = i + 1
Wend
a = i - 1
Ark1.Cells(a, 4).Value = "|" & Sum & "|"
End Sub

mvh Karl Otto
Avatar billede piajakobsen Nybegynder
08. august 2009 - 21:07 #2
Hej Karl Otto!

Tusind millioner tak for hjælpen - det virker helt perfekt:-)

Jeg har dog to spørgsmål:

1. Istedet for at skrive navnet på arket/sheet'et, kan man da skrive Active.Sheet?

2. Hvordan indsætter man et linieskift i cellen for hver land: værdi, så de kommer til at stå i en liste, som vist her:

Land1: Værdi
Land2: Værdi
osv...


På forhånd tusind tak for hjælpen - jeg burde give en middag! ;-)


Mvh. Pia
Avatar billede sostack Nybegynder
08. august 2009 - 22:58 #3
Sådan her:
Sub regs()
regioner = ""
Sum = ""
i = 1
a = 0
While ActiveWorkbook.ActiveSheet.Cells(i, 1).Value <> ""
If region = "" Or region = ActiveWorkbook.ActiveSheet.Cells(i, 1).Value Then
Sum = Sum & ActiveWorkbook.ActiveSheet.Cells(i, 2).Value & ": " & ActiveWorkbook.ActiveSheet.Cells(i, 3).Value & Chr(10)
Else
a = i - 1
ActiveWorkbook.ActiveSheet.Cells(a, 4).Value = Sum
Sum = ActiveWorkbook.ActiveSheet.Cells(i, 2).Value & ": " & ActiveWorkbook.ActiveSheet.Cells(i, 3).Value & Chr(10)
End If
region = ActiveWorkbook.ActiveSheet.Cells(i, 1)
i = i + 1
Wend
a = i - 1
ActiveWorkbook.ActiveSheet.Cells(a, 4).Value = Sum
End Sub

mvh Karl Otto
Avatar billede piajakobsen Nybegynder
08. august 2009 - 23:06 #4
Hej Karl Otto

Det virker helt perfekt. Tusind tak for hjælpen - du har virkelig reddet min dag :-)


Mvh. Pia
Avatar billede sostack Nybegynder
08. august 2009 - 23:09 #5
Hej Pia!

Velbekomme!

mvh Karl Otto
Avatar billede Henrik100 Nybegynder
01. juli 2011 - 11:14 #6
Jeg har brugt den fine samle makro i et andet ark, men har nu problemer i min Excel 2010 version.
Det er denne linie der bliver high lightet i debrug mode:

While ActiveWorkbook.ActiveSheet.Cells(i, 1).Value <> ""

hvad kan være galt?
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