Avatar billede tvc Seniormester
05. september 2004 - 00:20 Der er 9 kommentarer og
2 løsninger

Lopslag efter flere værdier som opfylder en betingelse

Hej eksperter

Jeg søger en funktion der kan foretage Lopslag efter flere værdier som opfylder en betingelse og derpå kæde disse sammen til en tekst.

Jeg har et efterposteringsark:

EP nr.      Konto    Tekst      Beløb
1          1010      Omp. oms.  100
2          2000      Omp. vk.    50
3          1010      Omp. oms.    57
4          1050      Omp. rab.    5     
5          1010      Omp. oms.    4

Ved anvendelse af sum.hvis overføre jeg summen vedr. et kontonummer til min balance og her er det så jeg ud for summen gerne vil have en opremsning af de EP nr. som indgår i summen. I ovenstående tilfælde skulle det se ud som følger.

Konto      EP nr.        Beløb
1010      1,3,5          161

Er der nogle der kan hjælpe min med en løsning og muligt uden VBA ellers med VBA.

Hilsen

TVC
Avatar billede japping Nybegynder
05. september 2004 - 08:07 #1
Ja, jeg kan godt løse opgaven men ikke gratis.
Skriv hvis du er interesseret.
Avatar billede sjap Praktikant
05. september 2004 - 12:19 #2
Hvis jeg har forstået det korrekt, er det ikke så kompliceret ,så hvis du kan bruge nedenstående, så er det ganske gratis :0)

Function ListEPnr(KontoNr As Integer, KontoOmråde As Range) As String
ListEPnr = ""
For Each c In KontoOmråde
    If c = KontoNr Then
        ListEPnr = ListEPnr & "," & Cells(c.Row, 1).Value
    End If
Next c
ListEPnr = Right(ListEPnr, Len(ListEPnr) - 1)
End Function
Avatar billede bak Forsker
05. september 2004 - 22:02 #3
Japping -> Her forlanger vi ikke penge for at løse opgaver. Hvis du ønsker at tjene på din viden så hop til sharks-forum.
Avatar billede kabbak Professor
06. september 2004 - 23:42 #4
Her er en til summen, det er sjaps der er rettet til ;-))

Function ListEPnrSum(KontoNr As Integer, KontoOmråde As Range) As String
Værdi = 0
For Each c In KontoOmråde
    If c = KontoNr Then
    Værdi = Værdi + Cells(c.Row, 4).Value
    End If
Next c
ListEPnrSum = Værdi
End Function
Avatar billede kabbak Professor
06. september 2004 - 23:44 #5
nåå lavet om til en variant

Function ListEPnrSum(KontoNr As Integer, KontoOmråde As Range) As Variant
Værdi = 0
For Each c In KontoOmråde
    If c = KontoNr Then
    Værdi = Værdi + Cells(c.Row, 4).Value
    End If
Next c
ListEPnrSum = Værdi
End Function
Avatar billede tvc Seniormester
08. september 2004 - 19:57 #6
Sjap og Kabbak

Tak for jeres svar. Jeg er ikke helt stiv i VBA så jeg må nok bede om lidt mere hjælp til denne VBA.

Jeg har prøvet jeres begges VBA'er og nedenfor er det Sjap's jeg har indsat og rettet i der hvor jeg tror der skal rettet - er dette korrekt?

Function ListEPnr(KontoNr As Integer, KontoOmråde As Range) As String
ListEPnr = ""
For Each c In Range(B2, B6)
    If c = 1010 Then
        ListEPnr = ListEPnr & "," & Cells(c.Row, 1).Value
    End If
Next c
ListEPnr = Right(ListEPnr, Len(ListEPnr) - 1)
End Function

Dette er hvordan mit test ark er opbygget:

    A    B    C    D
1    EP nr.    Konto    Tekst    Beløb
2    1    1010    Omp.    100
3    2    2000    Omp.    50
4    3    1010    Omp.    57
5    4    1050    Omp.    5
6    5    1010    Omp.    4

Mit resultat, på det andet ark, skulle gerne komme til at se således ud:

    A    B    C            D    E            F
1    EP nr.    Konto    Tekst            Beløb    Saldo før EP    Saldo efter EP
2    1, 3, 5    1010    Omsætning    161    1000            1161
3    4    1050    Andre indt.    5    20            25
4    2    2000    Vareforbrug    50    450            500

Hvordan bestemmer jeg hvor resultatet af VBA'en skal vises og skal VBA'en sættes ind under programkoder i arket eller Thisworkbook?

Jeg håber I kan hjælpen mig med dette.
Avatar billede kabbak Professor
08. september 2004 - 20:49 #7
Begge koder slal ind i et modul.

Når du højreklikker på fanen af et ark og vælg vis programkode
Kan du i venstre side se dine arknavne.

Oppe i menulinien vælger du
Insert > module

Nu kan du se ovre under arkene til venstre står Module1.

Se nu er Module1 makeret med grå baggrund, det er her koden skal være


***************** kode

Function ListEPnr(KontoNr As Integer, KontoOmråde As Range) As String
ListEPnr = ""
For Each c In KontoOmråde
    If c = KontoNr Then
        ListEPnr = ListEPnr & "," & KontoOmråde.Cells(c.Row, 1).Value
    End If
Next c
ListEPnr = Right(ListEPnr, Len(ListEPnr) - 1)
End Function
Function ListEPnrSum(KontoNr As Integer, KontoOmråde As Range) As String
Værdi = 0
For Each c In KontoOmråde
    If c = KontoNr Then
    Værdi = Værdi + KontoOmråde.Cells(c.Row, 4).Value
    End If
Next c
ListEPnrSum = Værdi
End Function

*********  Kode slut

I Resultat arkets B kolonne skriver du dine Kontonumre neden under hinanden.
                                       
I A2 skriver    du                           
                                       
=ListEPnr(B2;Ark1!A1:D6)

I D2 skriver du
=ListEPnrSum(B2;Ark1!A1:D6)

Ret ark1  til dit navnet på dit testark
Avatar billede tvc Seniormester
09. september 2004 - 10:49 #8
Tak kabbak og Sjap

Jeres samarbejde om mit lille problem virker perfekt!

Hvordan kan jeg give jer begge point?
Avatar billede sjap Praktikant
09. september 2004 - 16:31 #9
Det kræver vist at kabbak lige får smidt et svar :0)
Avatar billede kabbak Professor
09. september 2004 - 16:51 #10
et svar. ;-))
Avatar billede kabbak Professor
09. september 2004 - 17:20 #11
Tak for point
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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