# Excel VBA (absoluter anfänger...)



## Rani22 (10. Mai 2011)

hallo,

im laufe eines projektes muss ich aus einer excel datei zufallswerte eintragen. 

dies sieht in etwa wie folgt aus:







wobei die tabelle über mehrere tausend zeilen geht. hier nur zur vereinfachung.

für mich ist es nun wichtig dass immer, wenn z.b. amerika ausgewählt ist ich den wert mit 1,1 multiplizieren muss und immer wenn umsatz als kpi gewählt ist der wert in einem zufallsbereich zwischen 600.000 $ und 900.000 $ liegt.

wie kann ich das am besten realisieren? über makro aufzeichnen geht ja leider nicht.

gibt es dafür möglicherweise einen kurzen VBA code?

wäre echt super wenn ihr mir helfen könntet weil ich echt keine ahnung in VBA hab.

danke schonmal


----------



## aze (10. Mai 2011)

hi

Ich musste letztens etwas ähnliches machen.Da ich mich mit VBA nicht auskenne habe ich es mit Java und Apache Poi gemacht.Wenn du Interesse hast könnte ichd ir den Code schicken.

Schöne grüße

Aze


----------



## Michael... (10. Mai 2011)

Rani22 hat gesagt.:


> für mich ist es nun wichtig dass immer, wenn z.b. amerika ausgewählt ist ich den wert mit 1,1 multiplizieren muss und immer wenn umsatz als kpi gewählt ist der wert in einem zufallsbereich zwischen 600.000 $ und 900.000 $ liegt.


Und was ist wenn nicht? In Excel gibt es Formeln Zufall(), Wenn(...

So nebenbei was hat das mit Softwareentwicklung zu tun? Schon mal in einem Excelforum nachgefragt?


----------



## XHelp (10. Mai 2011)

Michael... hat gesagt.:


> So nebenbei was hat das mit Softwareentwicklung zu tun?


Die Forumbeschreibung ist ja:


> Softwareentwicklung Allgemeine Softwareentwicklung - *Andere Programmiersprachen*, Regex, OOP, Design Patterns


----------



## Rani22 (10. Mai 2011)

es geht hier ja um programmierung...

ich formuliers mal allgemein...



WENN land = "amerkia" -> dann wert = wert * 1,1;

wenn kpi = "umsatz" -> dann wertebereich = wertebereich zwischen 600.000 und 900.000.

und wie xhelp schon geschrieben hat... hier gehts um vba... also kein java... was aber auch ne programmiersprache is...


----------



## XHelp (10. Mai 2011)

Hast du denn irgendwelche Werte, oder müssen diese komplett per Zufall generiert werden?


----------



## Rani22 (10. Mai 2011)

sind zufallsbereiche

wie eben hier bei umsatz zwischen 600k und 900k

die werte müssen neu generiert werden


€dit

ich bräuchte hier wohl ne if abfrage in ner while schleife mit der ich in spalte "ergebnis" den wert ausrechne der sich aus den variablen "kpi" und "land" zusammensetzt...

nur die sytax fehlt mir eben...


----------



## XHelp (10. Mai 2011)

Welchen Sinn hätte das einen Zufallswert * 1.1 zu rechnen?


----------



## Rani22 (10. Mai 2011)

den, dass die länder ne bestimmte gewichtung haben z.b. amerika ne stärkere gewichtung als deutschland oder umgekehrt


----------



## XHelp (10. Mai 2011)

Und das soll nur einmalig passieren, oder jedes mal neue Werte?


----------



## Rani22 (10. Mai 2011)

erstmals nur einmalig

weshalb ich auch überleg ob ich des ganze ned einfach über filter befülle und dann 2 extra spalten mache


----------



## Michael... (11. Mai 2011)

Hab ich das richtig verstanden: Es soll in obiger Tabelle die Spalte Wert gefüllt werden.
Wenn in Spalte Land "Amerika" dann Wert (welcher Wert) *1,1 
Wenn in Spalte KPI "Umsatz" dann Zufallswert zwischen 600k und 900k

Wenn das die Anforderung ist, dann tunt man sich doch mit einer kurzen Formel leichter als sich im VBA sich die Finger wund zu tippen.
Natürlich kann man vieles auch mit VBA lösen:
For-Schleife über einzelne Spalten If Cells(...).Value ="..." Then ...

Bin aber der Meinung, das mit Excel im Allgemeinen und mit VBA viel zu viel gemacht wird. Und da ich in der Vergangenheit schon unzählige VBA "Verbrechen" diverser Praktikanten und Werkstudenten korrigieren und anpassen musste unterstütze ich sowas nur in Ausnahmefällen ;-)


----------



## Rani22 (11. Mai 2011)

hi, also der zufallswert soll in E2:Exx geschrieben werden

dieser ist von den KPI abhängig z.b. bei Umsatz ist der mögliche Wertebereich zwischen 600k und 900k. diese zufallszahl soll unter "Wert" eingetragen werden. hierbei wäre wohl ne schleife zwischen E2:Exx nötig.

der zweite schritt wäre... A2:Axx in ner schleife auslesen ob der wert "Amerika" entspricht und wenn die bedingung wahr ist dann (am einfachsten wohl hinter wert) noch ne spalte mit "Faktor" einfügen, in der der faktor dann abgelegt wird.

d.h. wenn in Axx "Amerika steht" in Fxx den Faktor "1,1" hinterlegen.

alles in allem brauch ich eigentlich nur die syntax wie ich prüfen kann ob in Axx "Amerika" steht und wie ich dann in dem neuen Feld den Faktor hinterlegen kann. alles andere kann man dann schon selbst ableiten.

hoff ihr könnt mir helfen.

lg rani


----------



## Michael... (11. Mai 2011)

Rani22 hat gesagt.:


> hoff ihr könnt mir helfen.


Ich sehe da kein Argument das mit VBA zu lösen, daher gibt's diesbzgl. meinerseits keine Hilfe ;-)

Warum sollte das nicht mit den Excelformeln gelöst werden? Ist ein Aufwand von 1 bis 5 Minuten.

Bsp. Faktor (mal abgesehen davon, ob man den nicht direkt verrechnen sollte statt ihn in einer Spalte anzuzeigen)
Einfach 
	
	
	
	





```
=WENN(A2="Amerika";1,1;"")
```
 in die "Faktor" Spalte schreiben und schon hat man innerhalb von 10 sec überall wo in Spalte A "Amerika" steht in Spalte F 
	
	
	
	





```
1,1
```
 stehen, in den anderen steht nichts.

Zeitaufwand das in VBA zu machen mit Editor öffnen usw. ca 50 sec ==> Zeitaufwand Faktor 5 ;-)


----------



## Rani22 (12. Mai 2011)

Michael... hat gesagt.:


> Ich sehe da kein Argument das mit VBA zu lösen, daher gibt's diesbzgl. meinerseits keine Hilfe ;-)
> 
> Warum sollte das nicht mit den Excelformeln gelöst werden? Ist ein Aufwand von 1 bis 5 Minuten.
> 
> ...



na dann kannst du mir sicher auch erklären wie ich 20 fälle unterscheiden soll aba excel nur 7 fälle in einer wenn funktion zulässt?


----------



## Michael... (12. Mai 2011)

Rani22 hat gesagt.:


> na dann kannst du mir sicher auch erklären wie ich 20 fälle unterscheiden soll


Naja, das ist ein bisher nicht erwähnter Punkt. In dem Fall würde ich mit SVERWEIS und einer Referenztabelle arbeiten.


----------



## areafo (13. Mai 2011)

```
Sub Zufallswerte()
Dim LandZelle As Range
Dim KPIZelle As Range
Dim Wert As Range
Dim rngWert As Range
'Nimmt an das jeder Datensatz ein Land hat und setzt Bereich von A2 bis Endzeile des letzten Landes in Spalte A
Set rngWert = ActiveWorkbook.ActiveSheet.Range("E2:E" & Cells(1, 1).End(xlUp).Row)

For Each Wert In rngWert
    'setzt dynamisch aktuelle Zellen neben der aktiven Iteration
    Set LandZelle = Wert.Offset(, -4)
    Set KPIZelle = Wert.Offset(, -1)
    'Wenn Land Amerika entspricht und KPI Umsatz dann Zufallszahl zwischen 600.000 und 900.000 in Wert
    If LandZelle = "Amerika" And KPIZelle = "Umsatz" Then
        Wert = WorksheetFunction.randbetween(600000, 900000)
    Else
        If LandZelle = "Amerika" Then Wert = Int(Rnd(100) * 100) * 1.1
    End If

Next Wert 
End Sub
```


----------

