PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerExcelExcelNy klurig fråga... Vilka celler bildar summan?Ny klurig fråga... Vilka celler bildar summan?
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2009-05-29 17:50
 

Har ett antal belopp varav några stycken av dessa bildar en känd summa. Finns det något sätta att få programmet att visa vilka?

Exempel: 10+14+33+8+50 = 68

Det var i ovanstående 10, 8 och 50 som tillsammans blev 68.

Jag vet alltså summan men inte vilka belopp som ingår.

Någon som vet ifall det finns någon kod som kan lösa detta?

Nytt inlägg
 2009-05-31 11:44
 

Vill du veta celladresser eller tal som bygger upp en formel som summerar tal? Kan du klargöra lite?

Nytt inlägg
 2009-06-05 12:38
 

lägg varje värde i A1 till E1 och summan du vill hitta i F1

öppna VBA editorn och klistra in följande

kör diSum så står delarna i var sin rad i direktfönstret

(koden är inte så snygg men den funkar.

Public Sub diSum()
Dim vnt
vnt = Range("A1:E1")
    Call nemSum(vnt, 1, 0, Range("F1"), "")
End Sub

Public Sub nemSum(vvnt, i, iSum, Blisum, str)
    If UBound(vvnt, 2) = i Then Exit Sub
    Dim this
    this = vvnt(1, i)
    If iSum + this = Blisum Then
        Debug.Print str & "," & this
    Else
        If iSum + this < Blisum Then
            Call nemSum(vvnt, i + 1, iSum + this, Blisum, str & "," & this)
        End If
        If iSum < Blisum Then
            Call nemSum(vvnt, i + 1, iSum, Blisum, str)
        End If
    End If
End Sub


Excelspecialisten

Excelforum drivs av Excelspecialisten som bedriver utveckling av program, utbildning samt support och hjälp i Excel och VBA.

www.excelspecialisten.se

Nytt inlägg
 2009-06-29 13:33
 

Jag vill alltså veta vilka vilka belopp som  bildar summan. Om programmet säger vilka celler det är eller belopp spelar ingen roll.

Tror inte jag kan förklara bättre än så om jag förstår din fråga rätt.

Nytt inlägg
 2009-06-29 14:47
 

Excelspecialisten skrev

lägg varje värde i A1 till E1 och summan du vill hitta i F1

öppna VBA editorn och klistra in följande

kör diSum så står delarna i var sin rad i direktfönstret

(koden är inte så snygg men den funkar.

Public Sub diSum()
Dim vnt
vnt = Range("A1:E1")
    Call nemSum(vnt, 1, 0, Range("F1"), "")
End Sub

Public Sub nemSum(vvnt, i, iSum, Blisum, str)
    If UBound(vvnt, 2) = i Then Exit Sub
    Dim this
    this = vvnt(1, i)
    If iSum + this = Blisum Then
        Debug.Print str & "," & this
    Else
        If iSum + this < Blisum Then
            Call nemSum(vvnt, i + 1, iSum + this, Blisum, str & "," & this)
        End If
        If iSum < Blisum Then
            Call nemSum(vvnt, i + 1, iSum, Blisum, str)
        End If
    End If
End Sub

Tack för svar!

Har tyvärr inte riktigt fått det att funka ännu. Är lite osäker på vad jag gör för fel. Följde dina instruktioner men jag får inte upp något i direktfönstret

 

 

Nytt inlägg
 2009-07-02 12:03
 

Hej igen!

Har fått lite hjälp även från en kollega som är lite kunnigare än jag men tyvärr så lyckades inte han heller att få  det till att funka. Visas tyvärr inget i direktfönstret.

Något tips till vad vi ev. kan ha missat?

Nytt inlägg
 2009-07-04 00:15
 

Jag fick det att fungera, men det verkar som att det var en bugg i den.

skriv till exempel 1,2,3,4,5 i a1-e1 och sen 6 i f1. Kör nu med:

 

Public Sub diSum()
Dim vnt
vnt = Range("A1:E1")
    Call nemSum(vnt, 1, 0, Range("F1"), "")
End Sub

Public Sub nemSum(vvnt, i, iSum, Blisum, str)
    If UBound(vvnt, 2) + 1 = i Then Exit Sub 'Här har jag ändrat till +1
    Dim this
    this = vvnt(1, i)
    If iSum + this = Blisum Then
        Debug.Print str & "," & this
    Else
        If iSum + this < Blisum Then
            Call nemSum(vvnt, i + 1, iSum + this, Blisum, str & "," & this)
        End If
        If iSum < Blisum Then
            Call nemSum(vvnt, i + 1, iSum, Blisum, str)
        End If
    End If
End Sub

Då får jag ut 1,2,3 - 1,5 - 2,4 i direktfönstret (CTRL +G) i VBA-editorn. Jag hittar inga andra kombinationer

Nytt inlägg
 2009-07-06 13:08
 

Grymt!

Nu fick jag det till att funka, även med minustal.

Försökte dock att ändra till "fallande led" på talen men då vill det inte funka.

Jag ändrade "A1:E1" till "A1:A5" och "F1" till "A6", men det ville inte.

Är det något annat man ska ändra på?

Nytt inlägg
 2009-07-07 18:44
 

Provade idag att konvertera en kolumn till en rad och använde ovanstående formel, denna gången med mycket fler och större tal. Då hängde sig excel/VBA.

Kan det vara så att den inte orkar med uträkningen?  (Det funkade ju tidigare när jag körde med exempeltalen)

Nytt inlägg
 2009-07-08 09:01
 
 Ändrad av Niklas Jansson  på 2009-07-08 08:01:55

Vad gäller första frågan handlar det ju bara om UBound(vvnt, 2) till UBound(vvnt, 1) och vvnt(1, i) till vvnt(i, 1).

För andra frågan: Detta kallas för en "uttömmande sökning", närmare bestämt en "djupet först"-sökning. Det är det enklaste sättet att lösa problemet. En "Bredden först"-sökning hade förmodligen gett svar tidigare (men fått köra lika länge).

Jag tror att detta är vad som kallas ett NP-komplett problem (om det får finnas med negativa tal är det definitivt det), och att du därför inte kan hoppas på så mycket annat. Du kan förmodligen få lite bättre prestanda genom att sortera listan från störst till minst.

Vågar man fråga vad du ska ha det till?

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerExcelExcelNy klurig fråga... Vilka celler bildar summan?Ny klurig fråga... Vilka celler bildar summan?

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter