Avatar billede Spassmager Nybegynder
03. september 2009 - 10:28 Der er 6 kommentarer og
1 løsning

Makro med VBA der summerer afhængigt af betingelserne!

Da jeg arbejder meget med Excel har jeg læst en bog om VBA. Sidder dog nu med et problem som jeg ikke syntes jeg kan løse ved hjælp af min nyerhvervede viden!

Jeg har et data sæt der har følgende struktur:

Kolonne A              B       
'0101 - Kons'        1000
'0102 - Beh'        2000
'1208 - Besog'      3000
'2105 - Pod'        4000 
'2112 - Brud'        5000
  .                  .
  .                  .
  .                  .
  .                  .

Det jeg ønsker er, at hvis Teksten i kolonne A starter med 0, så summeres de tilhørende værdier fra kolonne B. Startes der med 1 summeres disse værdier fra kolonne B osv. således fås f.eks. følgende i dette eksempel:

0-Grundydelser = 3000
1-Tillæg      = 3000
2-Ydelse      = 9000
osv.

De forskellige kategorier af ydelser går fra 0 til 9.

Jeg har prøvet at lave en løkke med forskellige if-sætninger og en inputboks hvor jeg indtaster hvilken værdi jeg vil have summeret, f.eks. indtastede jeg 0 for de tekst-strenge der startede med 0 osv. men kan slet ikke få det til at virke! Så "avanceret" makro kunne jeg ikke lave vha. VBA-bogen jeg har læst! Håber nogen kan hjælpe? :)

Størrelsen på datasættet kan variere fra tid til anden, men jeg kan selvfølgelig altid rette cellerne i VBA fra gang til gang jeg skal bruge makroen! Men kunne være fedt med en makro der bare kan køres uden at gøre dette hver gang - det er dog ikke det vigtigste lige nu!

Med venlig hilsen
Michael
Avatar billede excelent Ekspert
03. september 2009 - 21:17 #1
Sub tst()

Dim tal(10)
For t = 1 To Cells(65536, 1).End(xlUp).Row
x = Left(Cells(t, 1), 1)
tal(x) = tal(x) + Cells(t, 2)
Next

For t = 0 To 9
Cells(t + 1, 4) = t
Cells(t + 1, 5) = tal(t)
Next

End Sub
Avatar billede kedde65 Praktikant
03. september 2009 - 21:39 #2
Skal det laves i VBA?

Du kan jo med standard Excel lave en ekstra kolonne, hvor du trækker første karakter af kolonne A ud. Det vil sige, der får du enten o, 1 eller 2. Herefter så kan du lave en sum.hvis formel. Det vil kunne løse dit problem.

Stor hilsen
Christian Kjær
Officekonsulenterne
Avatar billede Spassmager Nybegynder
04. september 2009 - 09:30 #3
#1: Virker ikke, den siger at jeg mangler at definere t i "For t=1.."

#2:Jo det kan man godt og har også gjort det når jeg har lavet lignende ting tidligere! Men det tager stadig en del tid at justere fra gang til gang. Da jeg udfører proceduren ofte ville det super med en makro der ikke tager højde for datasættets størrelse og som kan udføres med få tryk på et par knapper! så tænkte VBA ville være oplagt at bruge! Ellers tak for hjælpen :)
Avatar billede excelent Ekspert
04. september 2009 - 11:47 #4
dim t

indsæt lige ON ERROR RESUME NEXT som linie 2

resultat indsættes i kolonne d og e
Avatar billede Spassmager Nybegynder
05. september 2009 - 14:32 #5
#4: Tak, jeg har ikke haft mulighed for at tjekke det endnu og skal først på arbejdet igen tirsdag hvor jeg har det fulde datasæt, så jeg rigtig kan teste det! Laver dog et "falsk" datasæt engang her i weekenden hvor jeg kan tjekke det, men det virker formentlig :) vender tilbage engang når jeg har tjekket det... tak for hjælpen indtil nu i hvert fald! :)
Avatar billede Spassmager Nybegynder
10. september 2009 - 10:11 #6
Nu har så endelig testet koden og den fungerer helt som det var tiltænkt så det er simpelthen perfekt!! tusind tak for hjælpen!!

den endelige kode kom til at se således ud:
Sub tst()

Dim tal(10)
Dim t
Dim x

On Error Resume Next

    For t = 1 To Cells(65536, 1).End(xlUp).Row
        x = Left(Cells(t, 1), 1)
        tal(x) = tal(x) + Cells(t, 2)
    Next
   
    For t = 0 To 9
        Cells(t + 1, 4) = t
        Cells(t + 1, 5) = tal(t)
    Next
   
End Sub
Avatar billede excelent Ekspert
10. september 2009 - 18:49 #7
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