Dansk Regneark Forum
  Hjælp Hjælp  Søg i forum   Arrangementer   Opret ny bruger Opret ny bruger  Log ind Log ind


Emne lukketHjælp til VBA kode - med flere variater.

 Besvar Besvar
Forfatter
Jyde73 Se dropdown
Forum Begynder
Forum Begynder


Medlem: 06.Mar.2019
Land: Danmark
Status: Offline
Point: 23
Direkte link til dette indlæg Emne: Hjælp til VBA kode - med flere variater.
    Sendt: 15.Jun.2019 kl. 16:40
Hej VBA-gutter!

Jeg er interesseret i at lave en makro, som kan håndtere de samme handlinger igen og igen.

Mit ønske er:

At give resultatet (summere kolonne B) for alle (kolonne A) med ABC0101 til ABC0199 og ABC0201 til ABC0299 osv.... Se vedhæftet.
Nogle rækker er eksempelvis fra ABC0101 til ABC0132 og ABC0201 til ABC0258 - altså varierende.

Håber jeg har forklaret spørgsmålet korrekt?

Glæder mig til at se svaret.

På forhånd tak.
Mvh
BjarneLOL

VBA
Til top



Til top
Jyde73 Se dropdown
Forum Begynder
Forum Begynder


Medlem: 06.Mar.2019
Land: Danmark
Status: Offline
Point: 23
Accepteret svar Accepteret svar
Direkte link til dette indlæg Sendt: 16.Jun.2019 kl. 09:42
whauuuu - fedt og tusinde tak. Det var lige det jeg søgte. Og så kort en kode - Fantastisk.

Jeg giver dig fuld point Big smile

Rigtig god søndag - Tak for hjælpen.
Mvh Bjarne
Til top
SpillOperator Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 30.Maj.2019
Status: Offline
Point: 73
Direkte link til dette indlæg Sendt: 15.Jun.2019 kl. 17:41
Skal det være VBA? Man kan nemt og hurtigt lave en simpel, formelbaseret løsning med SUM.HVISER() / SUMIFS().

I den uploadede fil er der to ark: et, hvor jeg har organiseret data i tabeller for at gøre formlerne mere læsevenlige, og et med "rå" referencer:





Til top
Jyde73 Se dropdown
Forum Begynder
Forum Begynder


Medlem: 06.Mar.2019
Land: Danmark
Status: Offline
Point: 23
Direkte link til dette indlæg Sendt: 15.Jun.2019 kl. 17:55
Hej SpillOperator

Tusinde tak for hurtig svar. Er en fin løsning i excelformler.
Jeg er på udkig efter noget kode, eftersom jeg skal håndtere mange nye lister, som skal sorteres.
Dvs. jeg har brug for en makro, som kan håndtere det samme som du har lavet i excelformler.
Måske kan jeg integrere dine formler i en kode?
Jeg er desværre ikke så hård til VBA. 
Håber på et positivt svar. Ellers må jeg bruge det som du allerede har lavet. TAK.
Hvordan giver jeg dig point?
Mvh
Bjarne

Til top
Jyde73 Se dropdown
Forum Begynder
Forum Begynder


Medlem: 06.Mar.2019
Land: Danmark
Status: Offline
Point: 23
Direkte link til dette indlæg Sendt: 15.Jun.2019 kl. 18:02
bonus info.

ABC01 = 01 kan gå fra 01 til 99
ABC0101 = 01 kan gå fra 01 til 99

Kan man bruge noget kode, som ser på de enkelte cifre og regner ud fra det?

Smile
Til top
SpillOperator Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 30.Maj.2019
Status: Offline
Point: 73
Direkte link til dette indlæg Sendt: 15.Jun.2019 kl. 18:47
Hmmm.. Hvor bøvlet og kompleks en eventuel VBA-løsning vil være kommer an på, hvad du kan svare på følgende indedende spørgsmål Wink:
  • Vil data altid være struktureret med Name i kolonne A og Result i kolonne B?
  • Vil ABC altid være ABC, eller kan det fx være DEF eller ABCDEF etc?
  • Vil Name altid slutte med 4 cifre, eller kan der også kun være 2?
  • Vil det niveau, hvorpå subtotalerne skal beregnes, altid være de to første cifre, altså ABC01XX etc?
  • Vil listerne være på forskellige ark i samme fil, eller i forskellige filer, eller i flere forskellige ark i flere forskellige filer?
  • Hvis listerne er i flere ark i samme fil (uanset om det er en eller flere filer), vil der så være ark i samme fil uden lister?
Uanset hvad tror jeg desværre det bliver for omfattende ift hvad jeg har mulighed for at bruge tid på, men jeg vil umiddelbart mene at du skal kigge nærmere på Right/Mid/Left/Len funktionerne i VBA, og være ret omhyggelig med at designe nestede loops gennem arrays af de data fra listerne, du indlæser. Måske der er nogle andre herinde der ikke ser det som en så stor opgave, som jeg gør?

Jeg er ret ny i dette forum, og har ikke fået sat mig ind i det med points... Du skrev så fint tak, that's what matters :-)

Til top
Jyde73 Se dropdown
Forum Begynder
Forum Begynder


Medlem: 06.Mar.2019
Land: Danmark
Status: Offline
Point: 23
Direkte link til dette indlæg Sendt: 15.Jun.2019 kl. 22:56
Hej igen SpillOperator

Mange tak for feed back. Jeg forsøger, at besvarer dine spørgsmål så godt som muligt.

1) Data vil altid være struktureret i kolonne A og resultatet i kolonne B!
2) Ja - der vil være forskellige variationer af bogstaverne.... DEEF, ABBC, DDDLLL, (så bogstaverne kan være af forskellige længde. Men vil altid slutte med 4 cifre, som er kriteriet.

ABC = værk
01 = overordnet enhed
01 = enhed

3) Der kan ikke være 2 tal-cifre - altid 4.
4) Ja - subtotalerne skal udregne på de første 2 cifre (overordnet enhed).
5) Det vil være på værk niveau. Dvs. en ny fil, med nyt ark. Her skal koden kunne køres. Arkene kan hedde forskellige navne efter forskellige værk, så det skal være noget med active.sheet ;-) i koden.
6) Nej - der vil kun være et ark med data, i en fil.

OK - ja det var også kun en forespørgsel om nogle VBA-kyndige kunne hitte ud af koden.

Hvis det bliver for lang håret, så må jeg bruge excel-formlerne.

Om ikke andet, så mange, mange tak.
God lørdag aften/nat.
Mvh Bjarne



Til top
SpillOperator Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 30.Maj.2019
Status: Offline
Point: 73
Direkte link til dette indlæg Sendt: 16.Jun.2019 kl. 00:44
Tak Bjarne,

Her er et bud. Koden kan selvfølgelig gøres mere robust og elegant, men den viser i hvert fald grundfunktionaliteten. Og den virker fint på det testsæt jeg har lavet i den uploadede fil med 10.000 datarækker Big smile Jeg har fjernet de forklarende kommentarer fra koden nedenfor, men dem kan du se i den rigtige makro i filen.

Som du selv var inde på er tricket at isolere intervallerne som "talværdien af de første to af de sidste fire  karakterer i Name". Dette kan fx gøres ved først at isolere de sidste 4 karakterer ved brug af funktionen Right, og herefter isolere de første 2 karakter af disse ved brug af funktionen Left.

Sub BeregnSubtotaler()

    ActiveSheet.Range("D1:E99").Clear
    Dim SourceArray As Variant
    Dim ResultArray(99) As Long
    SourceArray = ActiveSheet.UsedRange

    Dim i As Long, j As Long

    For i = 2 To UBound(SourceArray)
        For j = 1 To 99
            If j = CLng(Left(Right(SourceArray(i, 1), 4), 2)) Then
ResultArray(j) = ResultArray(j) + CLng(SourceArray(i, 2)
            End If
        Next
    Next
   
    For i = 1 To 99
        ActiveSheet.Range("D" & i) = CStr(i) & "01 to " & CStr(i) & "99:"
        ActiveSheet.Range("E" & i) = ResultArray(i)
    Next

End Sub


På det andet ark har jeg gjort det samme, bare ved hjælp af en hjælpekolonne i datatabellen og en pivot. Resultaterne er heldigvis de samme Wink

Håber det kan hjælpe dig et skridt videre. Og sig til, hvis der er noget der ikke giver mening.

Godnat, og god fornøjelse!

SpillOperator
Til top
Jyde73 Se dropdown
Forum Begynder
Forum Begynder


Medlem: 06.Mar.2019
Land: Danmark
Status: Offline
Point: 23
Accepteret svar Accepteret svar
Direkte link til dette indlæg Sendt: 16.Jun.2019 kl. 09:42
whauuuu - fedt og tusinde tak. Det var lige det jeg søgte. Og så kort en kode - Fantastisk.

Jeg giver dig fuld point Big smile

Rigtig god søndag - Tak for hjælpen.
Mvh Bjarne
Til top
 Besvar Besvar

Skift forum Forum tilladelser Se dropdown

© 2010 - 2024 Dansk Regneark Forum - en del af Excel-regneark.dk