• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Excel Macro en vermenigvuldigen

Status
Niet open voor verdere reacties.

88Gamer88

Gebruiker
Lid geworden
17 sep 2017
Berichten
44
Hallo allemaal,

Ik zit met het volgende probleem.

Ik heb in excel een macro zitten die een berekening maakt.
(Van koperen munten stuk tot de totale waarden gouden muntstukken)

Alleen als ik de uitslag van me macro wilt vermenigvuldigen door =som(kolom*kolom) blijft ik het probleem houden dat er #waarde bllijft staan.

Hopelijk kan iemand me helpen ?
(Vermoedelijk werkt het niet omdat het berekend is met een macro ?)


Code van de macro
Code:
Function CoppersToMoney(Coppers As Long) As String

' This function will format a number (value) into WoW Gold/Silver/Copper values
' The INPUT is any number (value) (...that isn't too big to kill Excel)
' The OUTPUT is a "(x)g (y)s (z)c" WoW currency formatted string


' Tell Excel to recalculate this value if/when other cells change
' by making sure it is defined as "volatile"
    Application.Volatile (True)


' Declare vars
' (Using Long to possibly avoid overflow if the string has a very large number to parse)
    Dim iCopper As Long
    Dim iSilver As Long
    Dim iGold As Long


' Crunch numbers
    iGold = Int(Coppers / 10000)
    iSilver = Int((Coppers - (iGold * 10000)) / 100)
    iCopper = Int((Coppers - (iGold * 10000) - (iSilver * 100)))


' Return the full formatted string
CoppersToMoney = iGold & "g " & iSilver & "s " & iCopper & "c"


Finish:
End Function

Hopelijk dat iemand mij uit kan leggen hoe ik deze uitkomt kan vermenigvuldigen met een cijfer in een kolom.

Alvast bedankt :)
 
Laatst bewerkt:
Waarom gebruik je hier een UDF voor? Plaats het bestandje even. Wat =som(kolom*kolom) moet zijn is mij niet duidelijk.
 
Zowel in F5 als J5 staat tekst. Wat wil je met elkaar vermenigvuldigen?
 
Ik wil graag dat de antwoord wat in J5 zich vermenigvuldigen met H5 wat vervolgens in L5 moet te komen staan.


Dus als ik U5 aanpas dat alles automatisch verwerkt wordt
 
Laatst bewerkt:
Dan ga ik dit op een andere manier oplossen.

OW zag dat een fout gemaakt had F5 had H5 moeten zijn. (zie ik nu pas)

Had wel een vraag over iets anders.
Nu zit er in dat excel bestand een .csv lijst met items die om de 60 minuten geupdate wordt.
Alleen dit gebeurd iedere keer in een andere volgorde.

Nu vroeg ik me af is er een manier om een cel via naam aan te spreken ipv cel "AH!G15014" dat er gezocht wordt naar een naam + achterliggende cel.

Dus voor mij als leek =som(Naam+achterliggende cel"getal") dat deze waarde weergegeven worden in een andere cel.

(Dus in plaats van cel"=AH!G15014" dat het cel gepakt wordt via de naam)
 
Laatst bewerkt:
Wat is de verwachte uitkomst?

Misschien: 95g 440s 440c ??
 
In de cel zet je voor het totaal....
Code:
=CoppersToMoney(U5;H5)
...en voor de stukprijs blijft het gewoon.
Code:
=CoppersToMoney(U5)


Code:
Function CoppersToMoney(Coppers As Long,[COLOR=#0000ff] Optional total As Long[/COLOR]) As String


' This function will format a number (value) into WoW Gold/Silver/Copper values
' The INPUT is any number (value) (...that isn't too big to kill Excel)
' The OUTPUT is a "(x)g (y)s (z)c" WoW currency formatted string




' Tell Excel to recalculate this value if/when other cells change
' by making sure it is defined as "volatile"
    Application.Volatile (True)




' Declare vars
' (Using Long to possibly avoid overflow if the string has a very large number to parse)
    Dim iCopper As Long
    Dim iSilver As Long
    Dim iGold As Long




' Crunch numbers
    iGold = Int(Coppers [COLOR=#0000ff]* IIf(total = 0, 1, total)[/COLOR] / 10000)
    iSilver = Int((Coppers [COLOR=#0000cd]* IIf(total = 0, 1, total)[/COLOR] - (iGold * 10000)) / 100)
    iCopper = Int((Coppers[COLOR=#0000ff] * IIf(total = 0, 1, total) [/COLOR]- (iGold * 10000) - (iSilver * 100)))




' Return the full formatted string
CoppersToMoney = iGold & "g " & iSilver & "s " & iCopper & "c"




Finish:
End Function
 
Je bent geweldig :thumb:.
Toppie

Vroeg ik me af is er toevallig ook iets mogelijk om ipv van =CoppersToMoney(U5;H5) iets als =CoppersToMoney(U5+H5) te gebruiken ?
Dat ik het kan laten op tellen of verminderen.

Alvast bedankt
 
Zoiets?

In de cel:
Code:
=CoppersToMoney(U5;"*";H5)
Code:
Function CoppersToMoney(Coppers As Long, Optional teken, Optional total As Long) As String


' This function will format a number (value) into WoW Gold/Silver/Copper values
' The INPUT is any number (value) (...that isn't too big to kill Excel)
' The OUTPUT is a "(x)g (y)s (z)c" WoW currency formatted string




' Tell Excel to recalculate this value if/when other cells change
' by making sure it is defined as "volatile"
    Application.Volatile (True)




' Declare vars
' (Using Long to possibly avoid overflow if the string has a very large number to parse)
    Dim iCopper As Long
    Dim iSilver As Long
    Dim iGold As Long


'iSilver = Int((Coppers * IIf(total = 0, 1, total) - (iGold * 10000)) / 100)
' Crunch numbers
If Not IsMissing(teken) Then
    iGold = Int(Evaluate(Join(Array(Coppers, teken, IIf(total = 0, 1, total)))) / 10000)
    iSilver = Int((Evaluate(Join(Array(Coppers, teken, IIf(total = 0, 1, total)))) - (iGold * 10000)) / 100)
    iCopper = Int((Evaluate(Join(Array(Coppers, teken, IIf(total = 0, 1, total)))) - (iGold * 10000) - (iSilver * 100)))
Else
   iGold = Int(Coppers / 10000)
    iSilver = Int((Coppers - (iGold * 10000)) / 100)
    iCopper = Int((Coppers - (iGold * 10000) - (iSilver * 100)))
End If
' Return the full formatted string
CoppersToMoney = iGold & "g " & iSilver & "s " & iCopper & "c"




Finish:
End Function
 
Heb de code veranderd maar is ik bijvoorbeeld nu =CoppersToMoney(U5;"+";H5) doet ipv * krijg ik geen geledigde waarde te zijn

Knipsel.JPG

Zo iets als mogelijk is wil ik graag er bij gebruiken.

Dus dat zo wel * of + of - kan gebruiken.
Of doe ik iets goed bij het invoeren in de cel
 
Laatst bewerkt:
Gaat volgens mij wel goed.
 

Bijlagen

  • Beta3.xlsb
    1,3 MB · Weergaven: 53
Hallo Harry,

Als ik dat zo bekijk gebeurd er alleen * | + | - | bij de 5 van de aantallen.

Ik bedoelde als ik uiteindelijk alles vermenigvuldigd heb met die 5 om vervolgens alles bij elkaar te laten optellen / aftrekken.
Dus dat ik de bedragen zelf nog kan op tellen.
 
Maak even een bestandje met wat de bedoeling is, hoef ik er niet zo naar te gissen.
Kijk morgenavond wel of er enige reactie is.
 
Heb hier een foto bijgevoegd hopelijk dat wat duidelijker kan zijn.

Knipsel.JPG

Nadat alles vermenigvuldigd is 149900 * 5 = 74g 95s 0c wil ik dat antwoord op tellen / aftellen met de antwoorden die er onder aanstaan.

Normaal gesproken zou je =som(cel+cel+cel) doen, maar dat werkt nu jammer genoeg niet.
 
Zet onderstaande UDF eens in een module.
Code:
Function per_craft(rng As Range)
Dim st(2)
sn = rng
For i = 1 To UBound(sn)
  sq = Split(sn(i, 1))
     st(0) = st(0) + Val(sq(0))
     st(1) = st(1) + Val(sq(1))
     st(2) = st(2) + Val(sq(2))
    Next i
  per_craft = st(0) & "g " & st(1) & "s " & st(2) & "c"
End Function

Functie aanroep:
Code:
=per_craft(L5:L7)
 
Laatst bewerkt:
Ik ga het zo proberen, alvast bedankt.

Zie alleen dat ik een verkeerde waarde gehanteerd heb :(.
Kan me zelf wel voor me kop slaan :confused:

Dus moet waarschijnlijk weer helemaal over nieuw beginnen.

Knipsel.JPG

Had de informatie van kolom G gepakt maar blijkt dat het van kolom J moet zijn.
Dus werkt de berekening niet meer, aangezien de eerste kolom G in "koperen munten" is maar de laatste kolom J is berekent wordt met . er in.

Dus wat eerst 4999999 was wordt nu weer gegeven als 499.9999 (499g 99s 99c)

Pfff


EDIT: Of valt dit nog aan te passen in de berekening ?
 
Laatst bewerkt:
Plaats Excelbestanden in plaats van plaatjes.
Doe er voor het gemak ook even de verwachte uitkomst van de verschillende getallen in.
Zoiets als wat moet 5 worden → 5g 0s 0c ???
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan