Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1740to1744
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Array zufällig zu x% mit Wert "null"
01.03.2020 11:14:27
Bernd
Hallo Forum, hallo vba Cracks,
ich brauche eure Hilfe zu folgender Aufgabenstellung:
Ich habe ein zweidimensionales Array mit Werten bereits befüllt. Nun sollen ein Teil (Vorgabe x%, woebei x z.B. 25% ist) dieser Werte zufällig durch den Wert "0" ersetzt werden.
Hat jemand eine Idee, we man das Schlank mit einem vba code lösten könnte?
Nutze Excel 2010.
So fülle ich das Array mit Werten.
Lese Werte für Array ein
Set TempRng = Calc.Range("Bereich")
For j = 0 To IpSize
Bereich(0, j) = 0#
Next j
For i = 1 To Size_i
For j = 0 To Size_j
Bereich(i, j) = TempRng.Cells(i + 1, j + 1)
Next j
Next i
Anschließend sollten aus dem Array mit der Größe i = 1 To Size_i und For j = 0 To Size_j z.B. 25% der Werte des Arrays zufüllig auf den Wert "0" gesetzt werden.
Hoffe, mir kann jemand diese Aufgabenstellung lösen...

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array zufällig zu x% mit Wert "null"
02.03.2020 17:50:04
fcs
Hallo Bernd,
leider ist nicht angegeben, wie du die Variable Bereich dimensionert hast.
Auf jeden Fall müssen diese &gr= den von mir verwendeten Werten sein, die ich aus der Größe des Zellbereichs von tempRng berechnet habe.
LG
Franz
Sub MakeArray()
'Deklaration der vorhandenen Variablen
Dim TempRng As Range
Dim i As Long, j As Long
Dim IpSize&, Size_i&, Size_j&
Dim Bereich() As Double
'Deklaration der neuen Variablen
Dim arrRnd() As Variant, k As Long, rndMax As Double, kMax As Long
Dim kProzent, varProzent
Set TempRng = Calc.Range("Bereich")
'Testzeilen zur Festlegung der Größe von Array "Bereich"
IpSize = TempRng.Columns.Count - 1
Size_i = TempRng.Rows.Count - 1
Size_j = TempRng.Columns.Count - 1
ReDim Bereich(0 To Size_i, 0 To Size_j)
For j = 0 To IpSize
Bereich(0, j) = 0#
Next j
For i = 1 To Size_i
For j = 0 To Size_j
Bereich(i, j) = TempRng.Cells(i + 1, j + 1)
Next j
Next i
varProzent = Application.InputBox( _
"Wieviel Prozent der Matrix-Werte sollen auf 0 gesetzt werden?" _
& vbLf & "(Werte von 1 bis 100 sind zulässig!)", _
Title:="0-Werte in Matrix setzen", Default:=25, Type:=1)
Select Case varProzent
Case False
MsgBox "Eingabe wurde abgebrochen oder 0 eingeben"
Exit Sub
Case Is  100
MsgBox "Prozent-Werte >100 sind nicht zulässig"
Exit Sub
End Select
End Sub

Anzeige
AW: Array zufällig zu x% mit Wert "null"
03.03.2020 18:34:34
Bernd
Hallo Franz,
ganz ganz herzlichen Dank für deine Mühe!
Ich schau mir das in Ruhe an (vermutlich erst am Wochenende...).
Bei Fragen melde ich mich nochmals.
Was meinst du mit der Frage
"leider ist nicht angegeben, wie du die Variable Bereich dimensionert hast."
Nach was für vba Text muss ich da suchen. Die Variable Bereich ist als Range definiert.
Was meinst du mit "&gr="? Die Textfolge finde ich nicht in deinem vba-code.
Sorry, wenn ich mich zu blöd anstelle, aber meine vba-Kenntnisse sind wirklich bescheiden und ich versuche dazu zu lernen…
LG zurück
Bernd
Anzeige
AW: Array zufällig zu x% mit Wert "null"
03.03.2020 21:41:18
fcs
Hallo Bernd,
Was meinst du mit der Frage
"leider ist nicht angegeben, wie du die Variable Bereich dimensionert hast."
Nach was für vba Text muss ich da suchen. Die Variable Bereich ist als Range definiert.

Die in deinem geposteten Code-Schnippsel vorhandenen Variablen müssten deklariert werden wie am Beginn meines Makros gezeigt.
Die Größe der Array-Variablen Bereich muss dan so festgelegt werden, dass die Daten aus dem Zellberech TempRng hineinpassen und die nachfolgenden For-Next-Schleifen funktionieren.
Diese Dimensionierung (Zeile, Spalten) von Bereich erfolgt in der Zeile.
   ReDim Bereich(0 To Size_i, 0 To Size_j)

Eigentlich müsste es in deinem Makro auch irgendwo so eine Dimensionierung geben - entweder direkt bei der Deklaration der Variablen oder in einer ReDim anweisung.
Dabei musst die Zeilenzahl bzw. Spaltenzahl des Arrays &gt= den von mir berechneten Werten für Size_i bzw. Size_j sein. Wenn die Werte kleiner sind, dann gibt es Index-Fehler bei der Ausführung des Makros.
Was meinst du mit "&gr="? Die Textfolge finde ich nicht in deinem vba-code.
Da hatte ich einen Tippfehler beim HTML-Code für das Größer-Zeichen. Sollte sein:
Auf jeden Fall müssen diese &gt= den von mir verwendeten Werten sein....
LG
Franz
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige