Helpmij.nl
Helpmij.nl
Helpmij.nl
Steun Helpmij.nl! Klik hier     Computerprobleem? Klik hier!

Quote

Weergeven resultaten 1 tot 20 van 20

Onderwerp: vermenigvuldigingsprodukt

  1. #1
    Vraag is opgelost

    vermenigvuldigingsprodukt

    Dag allen,

    Het gaat over het vermenigvuldigen van waarden in een Range met gebruik van VBA.

    Ik krijg een array met vermenigvuldige waarden van range("A1: D10") met:

    Code:
    sn=Evaluate(Sheet1.Cells(1).CurrentRegion.Address & "*10")
    of
    Code:
    sn=[A1:D10*10]
    of
    Code:
    sn=[Sheet1!A1:D10*10]
    of
    Code:
    Sheet1.Cells(1).CurrentRegion.name="snb"
    sn=[snb*10]
    Ik ben op zoek naar een werkbladfunktie waarmee ik hetzelfde resultaat krijg zonder evaluate te gebruiken.

    niet werkend voorbeeld:

    Code:
    sn=Sheet1.Cells(1).CurrentRegion
    sp=application.product(sn *10)

    NB. Ik ben niet op zoek naar de 'copy/pastespecial/operation product' methode
    Evenmin naar een lus om ieder element van de array te vermenigvuldigen

    Bij voorbaat dank.
    VBA voor smarties

    VBA is een taal die je moet leren met een grammatica- en een woordenboek.
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
    overmorgen

  2. #2
    Mega Honourable Senior Member
    Geregistreerd
    19 mei 2007
    Code:
    =SOMPRODUCT(A1:D10*10)
    Te kort door de bocht?
    Mvgr. & succes, Cobbe

    Heb je een oplossing voor je probleem,
    vergeet dan niet de vraag als opgelost te merken.
    En denk er aan: Zorgen moet je doen, niet maken.

  3. #3
    @Cobbe

    Veel te....

    Ik zoek niet naar een Excelformule, maar naar een equivalent in VBA.
    VBA voor smarties

    VBA is een taal die je moet leren met een grammatica- en een woordenboek.
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
    overmorgen

  4. #4
    Mega Senior Jack Nouws's avatar
    Geregistreerd
    16 april 2008
    Locatie
    Zundert
    Afstand tot server
    ±150 km
    Zoiets
    Code:
    sp = [product(sn*10)]
    Wees gelukkig met wat je hebt in plaats van ongelukkig door wat je ontbreekt

  5. #5
    @Jack

    Dank voor je reaktie, edoch

    - de [ ] variant van Evaluate kan niets met variabelen
    - jouw suggestie maakt gebruik van evaluate; daar was ik juist niet naar op zoek.
    VBA voor smarties

    VBA is een taal die je moet leren met een grammatica- en een woordenboek.
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
    overmorgen

  6. #6
    Giga Honourable Senior Member HSV's avatar
    Geregistreerd
    18 juli 2008
    @snb,

    Hoe haal je het resultaat tevoorschijn in jouw evaluatie?

    Kun je hier iets mee?

    De cellen A1:B5 gevuld met (1,2,3,4,5);(1,2,3,4,5)
    Code:
    sn = Cells(1).CurrentRegion
    sp = Application.Product(10, Application.Index(sn, Application.Transpose(Array(1, 2, 3, 4, 5)), array(1,2)))
    msgbox sp
    ____________
    mvg,
    Harry

    Lag nooit om de keuzes van dien vraauw, bist ter zulf aine van....
    (Grunnegs-Gronings)

  7. #7
    @HSV

    Bedankt, maar dat gaat hem niet worden. Product vermenigvuldigt alle getallen van de matrix met elkaar en resulteert in 1 waarde.

    Het resultaat moet een matrix zijn waarvan ieder element met 10 is vermenigvuldigd.
    Laatst aangepast door snb : 24 april 2017 om 09:59
    VBA voor smarties

    VBA is een taal die je moet leren met een grammatica- en een woordenboek.
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
    overmorgen

  8. #8
    snb,

    Als je er geen bezwaar tegen hebt om een hulp-range te gebruiken ergens in je Workbook, dan zou je iets kunnen doen met PRODUCTMAT.

    Onderstaande levert in sn de gevraagde matrix, die vervolgens in A21 : D30 wordt gezet:

    Code:
    Sub test()
        Dim sn
        sn = Range("M1:V10")
        sn = Application.WorksheetFunction.MMult(sn, Range("A1:D10"))
        Range("A21:D30") = sn
    End Sub
    In M1:V10 (de hulp-range) staat een 10×10 matrix met nullen en alleen op de diagonaal 10× een 10.
    Je kunt natuurlijk deze 10×10 matrix ook aanmaken binnen VBA, maar dan moet je wel gebruikmaken van de for…next lussen om deze te vullen.

    Jan
    Laatst aangepast door jgkdrt : 24 april 2017 om 10:02

  9. #9
    @jgkdrt

    Dank voor je suggestie.

    Tegen een extra array heb ik wel bezwaar
    Het gaat mij er nl. niet om om 2 arrays met elkaar te vermenigvuldigen, maar om ieder element van een array met een vast getal te vemenigvuldigen.
    Dat doet Excel automatisch braaf met de ingebouwde 'evaluate' methode; wat mij bevreemdt is, dat Excel daarvoor geen afzonderlijke formule/funktie heeft.
    VBA voor smarties

    VBA is een taal die je moet leren met een grammatica- en een woordenboek.
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
    overmorgen

  10. #10
    Giga Senior
    Verenigingslid

    Geregistreerd
    19 april 2007
    Locatie
    den haag
    Afstand tot server
    ±111 km
    dit werkt als alleen kolomA is gevuld.
    Code:
    Sub test()
        sn = Sheets(1).Cells(1).CurrentRegion.Value
        ReDim m(0)
        m(0) = 10
        sn = WorksheetFunction.MMult(sn, m)
    End Sub
    of deze:
    Code:
    Sub test()
        sn = Sheets(1).Cells(1).CurrentRegion.Value
        sn = WorksheetFunction.MMult(sn, Array(10))
    End Sub
    Laatst aangepast door sylvester-ponte : 24 april 2017 om 11:16
    groeten Sylvester Ponten

  11. #11
    Giga Senior Ginger's avatar
    Geregistreerd
    29 december 2006
    Locatie
    Delft
    Afstand tot server
    ±162 km
    @Sylvester...
    ____________________________
    GINGER AlsoKnownAs REDHEAD
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Test een nieuwe VBA-code altijd éérst uit op een
    kopie van het bestand ipv direct in het orgineel...!

    + + + + + + + + + + + + + + + + + + + + + + + + + +

  12. #12
    @Sylv,


    Dankjewel,
    Edoch, het gaat over bijv A1 : D10 (zie #1)
    VBA voor smarties

    VBA is een taal die je moet leren met een grammatica- en een woordenboek.
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
    overmorgen

  13. #13
    Senior Member rebmog's avatar
    Geregistreerd
    14 juli 2009
    Locatie
    Overijssel
    Een mogelijkheid zonder Evaluate, maar wél met een klein loopje (niet uitgebreid getest):
    Code:
    Sub rebmog1()
        sn1 = Sheets(1).Cells(1).CurrentRegion
        ReDim sn2(1 To UBound(sn1, 2), 1 To UBound(sn1, 2)) As Double
        For i = 1 To UBound(sn2)
            sn2(i, i) = 10
        Next
        sp = Application.MMult(sn1, sn2)
    End Sub
    Just for the fun, ook nog een versie met matrixconstante. Hiervoor is echter wel Evaluate nodig:
    Code:
    Sub rebmog2()
        sn = Sheets(1).Cells(1).CurrentRegion
        For i = 1 To UBound(sn, 2)
            sArrCnst = sArrCnst & ";" & Application.Substitute(Application.Rept(",0", UBound(sn, 2)), "0", "10", i)
        Next
        sp = Evaluate("=MMULT(" & Sheets(1).Cells(1).CurrentRegion.Address & ",{" & Mid(Replace(sArrCnst, ";,", ";"), 2) & "})")
    End Sub
    Voor geïnteresseerden. De matrixformule kan in bovenstaande code bijv. als volgt op de sheet geplaatst worden:
    Code:
    Sheets(1).Range("H1").Resize(UBound(sn), UBound(sn, 2)).FormulaArray = "=MMULT(" & Sheets(1).Cells(1).CurrentRegion.Address & ",{" & Mid(Replace(sArrCnst, ";,", ";"), 2) & "})"
    Rebmog


    Als iedereen hetzelfde denkt, denkt er niemand

  14. #14
    @Rebmog

    Dank ! Ik hoop niet dat het je nachtrust heeft gekost.

    Ik heb nu de volgende aanpak:

    Code:
    Sub M_snb()
        sn = Cells(7, 8).CurrentRegion
        Cells(7, 8).CurrentRegion.Offset(20) = Application.MMult(sn, Evaluate("(row(1:" & UBound(sn) & ")=column(1:" & UBound(sn, 2) & "))*10"))
    end sub
    De suggestie van jgdkrt van een matrix met alleen 10 op de diagonaal liet het kwartje vallen.
    VBA voor smarties

    VBA is een taal die je moet leren met een grammatica- en een woordenboek.
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
    overmorgen

  15. #15
    Voortbordurend op dezelfde suggestie:

    Code:
    Sub x10()
        sn = Cells(1, 1).CurrentRegion   'A1:C10 in dit voorbeeld
        sp = Array(Array(10, 0, 0), Array(0, 10, 0), Array(0, 0, 10))
        Cells(1).CurrentRegion.Offset(15) = Application.MMult(sn, sp)
    End Sub
    Attached Files Attached Files

  16. #16
    @Wher

    Dat klopt, maar is niet flexibel/variabel.
    VBA voor smarties

    VBA is een taal die je moet leren met een grammatica- en een woordenboek.
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
    overmorgen

  17. #17
    Inderdaad, niet variabel, eigenlijk "ad hoc" geschreven voor het voorbeeld.
    Maar als ik je code uit post 14 test, lijkt hij enkel te werken indien de CurrentRegion een "vierkante" range betreft, dus evenveel rijen als kolommen.
    Misschien is deze variatie dan flexibeler en ook toepasbaar op ranges met aantal rijen <> aantal kolommen:

    Code:
    Sub M_snb()
        sn = Cells(1).CurrentRegion
        Cells(1).CurrentRegion.Offset(15) = Application.MMult(sn, Evaluate("(row(1:" & UBound(sn, 2) & ")=column(1:" & UBound(sn, 2) & "))*10"))
    End Sub
    Laatst aangepast door WHER : 28 april 2017 om 15:31

  18. #18
    Giga Honourable Senior Member HSV's avatar
    Geregistreerd
    18 juli 2008
    Ik dacht dat je de evaluate methode niet wilde gebruiken.

    Code:
    Cells(1).CurrentRegion.Name = "bereik"
        Cells(1).CurrentRegion.Offset(20) = Evaluate("bereik * 10")
    ____________
    mvg,
    Harry

    Lag nooit om de keuzes van dien vraauw, bist ter zulf aine van....
    (Grunnegs-Gronings)

  19. #19
    @wher

    Je hebt 100% gelijk.


    @HSV

    Ik was op zoek naar een werkbladfunktie (zie #1).
    Dat binnen die werkbladfunktie gebruik gemaakt wordt van evaluate heb ik niet uitgesloten.
    VBA voor smarties

    VBA is een taal die je moet leren met een grammatica- en een woordenboek.
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.
    overmorgen

  20. #20
    Giga Honourable Senior Member HSV's avatar
    Geregistreerd
    18 juli 2008
    Zonder lijkt me zonder.

    Quote Origineel gepost door snb Bekijk Bericht

    Ik ben op zoek naar een werkbladfunktie waarmee ik hetzelfde resultaat krijg zonder evaluate te gebruiken.
    ____________
    mvg,
    Harry

    Lag nooit om de keuzes van dien vraauw, bist ter zulf aine van....
    (Grunnegs-Gronings)

Berichtenregels

  • U mag geen nieuwe vragen starten.
  • U mag niet reageren op berichten.
  • U mag geen bijlagen versturen.
  • U mag uw berichten niet bewerken.
  •  
Helpmij.nl
Helpmij.nl

Helpmij.nl en business

Partners
Sponsoren
Aanbiedingen