Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Resampling und VBA
#1
Hallo zusammen,

ich soll für die Berechnung eines Konfidenzintervalls ein Resampling (n=1000) einer bestehenden prozentualen Verteilung von 19 Stichproben durchführen. Wie das Resampling funktioniert kann ich mir gerade noch so herleiten. Nun soll ich aber sowohl das ganze Resampling per VBA-Makro durchführen lassen, als auch das Ergebnis des jeweiligen Resamplings, d. h. die Summe der jeweiligen Prozentsätze, per VBA-Makro in eine Liste in ein neues Tabellenblatt mit fortlaufender Zeilennummer (von 1 bis 1000) übertragen. Ich habe schon ein wenig hin und her probiert, aber es ist nichts (sinnvolles) dabei herausgekommen.

Daher meine Frage: Wie könnte bzw. sollte ein entsprechendes Makro aussehen?

Für Vorschläge bin ich sehr dankbar. Zur besseren Übersicht habe ich ein Beispieldatei angehängt.


Angehängte Dateien
.xlsm   Beispiel.xlsm (Größe: 24,62 KB / Downloads: 5)
Antworten Top
#2
Hallo L...,

ich habs so verstanden:

Code:
Private Sub cbTuwat_Click()
Dim Z As Long
Dim S As Long
Dim AnzZ As Long
Dim Anzahl As Long
Dim Summe As Double
Dim Liste As Variant
Dim Ausgabe() As Variant

Anzahl = Range("Anzahl")
Liste = Range("Liste")
AnzZ = UBound(Liste, 1)
ReDim Ausgabe(1 To AnzZ + 2, 1 To Anzahl)
Range("Ausgabe").CurrentRegion.ClearContents

For S = 1 To Anzahl
    Ausgabe(1, S) = "No " & Format(S, "#,##0")
    Summe = 0
    For Z = 1 To AnzZ
        Ausgabe(Z + 1, S) = Liste(WorksheetFunction.RandBetween(1, AnzZ), 1)
        If IsNumeric(Ausgabe(Z + 1, S)) Then
            Summe = Summe + Ausgabe(Z + 1, S)
        End If
    Next Z
    Ausgabe(AnzZ + 2, S) = Summe
Next S
Range("Ausgabe").Resize(AnzZ + 2, Anzahl).Value = Ausgabe
End Sub


Da ich in Makros ungern mit festen Adressen arbeite, benötigt das Makro im Arbeitsblatt drei Namen:

1. Einen benannten Bereich "Liste" in der die zu nutzenden Wahrscheinlichkeiten stehen.
2. Eine benannte Zelle "Anzahl" mit der Anzahl der Test.
3. Eine benannte Zelle "Ausgabe". Ab hier wird die Ausgabe eingetragen. Vohandene Werte werden gnadenlos überschrieben.
Da ich zu Beginn des Makro alte Daten über CurrentRegion lösche, sollte direkt über, unter oder neben dem Bereich keine Einträge erfolgen.


Angehängte Dateien
.xlsm   Beispiel-3.xlsm (Größe: 89,38 KB / Downloads: 1)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#3
PHP-Code:
Sub M_snb()
  
Randomize
  ReDim sp
(9990)
  sn Tabelle2.Range("B3:B21")
  sn(101) = 0
  
  
For 0 To UBound(sp)
    sp(j0) = sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11) + sn(Int(18 Rnd()) + 11)
  Next
  
  Tabelle3
.Cells(12).Resize(UBound(sp) + 1) = sp
End Sub 
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#4
Vielen Dank @Ego! Das sieht super aus und funktioniert wie gedacht. Ich als Laie habe aber noch ein paar Fragen:

1. Ist es möglich die Summe der Prozentsätze eine Zeile nach unten (Zeile 22) zu verschieben?
2. Kann man außerdem noch (in einer weiteren Zeile darunter, d. h. Zeile 23) den gewichteten Mittelwert der jeweiligen Prozentsätze berechnen?
3. Kann man die Ausgabe der "Resamples" auch auf ein anderes Tabellenblatt verschieben?
4. Wie ist es, wenn man mehr als einen Datensatz mit 19 Prozentsätzen hat. Kann man auch mehrere Listen als Quelle auswählen und sich daraus die entsprechenden Parameter berechnen lassen?

Vielen Dank und viele Grüße!
Antworten Top
#5
Hallo L...,


zu 1. und 2.

das Forum sollte Hilfe zur Selbsthilfe und keine ausgefeilte Lösungen geben. Du hast geschrieben :
Zitat:Nun soll ich aber ... per VBA-Makro durchführen lassen, ...  Ich habe schon ein wenig hin und her probiert...
Für mich heißt es, dass du schon Erfahrung in Programmierung hast oder haben solltest. Dann melde dich wenn du an einer Stelle Probleme beim anpassen hast und beschreibe auch deine Versuche.


zu 3.

Wenn du die benannte Zelle Ausgabe in ein anderes Blatt verschiebst, solltest du im Makro die beiden "Range("Ausgabe")" durch "ThisWorkbook.Names("Ausgabe").RefersToRange" ersetzen.

zu 4.

Bei mehr Prozentsätzen kannst den benannten Bereich "Liste" einfach verlängern
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • Lars123
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste