Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeilen durch "Zufall" löschen

Zeilen durch "Zufall" löschen
Careem21
Hallo zusammen,
ich suche eine Art "Zufallsgenerator", der eine Anzahl "x" an Zellen in einer .xls Datei löscht.
Beim Klick auf einen OptionButton solll man gefragt werden, wieviel Zeilen, mit dem Schlagwort "y" in Spalte "A" übrig bleiben sollen.
D.h.:
Ich habe eine .xls-Datei mit den Spalten "Name", "Kosten", "Kommentar". In Der .xls sind ca. 400 Zeilen Datensätze. Durch Zufall sollen nun z.b. nur noch 100 Zeilen übrig bleiben (also -300), bei denen der Name "Hans" vorkommt.
Ich hoffe das ist einigermaßen verständlich :)
Ich kann es leider nicht genauer beschreiben.
Ich bin dankbar für jede Hilfe!
Danke und Gruß
Careem
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
doppelt
15.06.2011 11:26:10
Rudi
AW: Zeilen durch "Zufall" löschen
15.06.2011 11:31:16
marco
naja, du kannst mit rows(i) auf eine zeile zugreifen und mit rows(i).entireline.delete kannst du sie löschen. dann erzeugst du halt in einer while-schleife zufällig x ganzzahlen zwischen 1 und max. anzahl deiner zeilen und löscht dann jeweils die zugehörige zeile. ganzzahlige zufallszahlen kannst du so erzeugen:
Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze) . Dann erzeugst du zuerste eine ganzzahlige um die Anzahl der zu löschenden zeilen zu ermitteln und dann für jede zeile eine neue um die zeilennummer zu ermittlen.
Anzeige
AW: Zeilen durch "Zufall" löschen
15.06.2011 11:44:22
Reinhard
Hallo Careem,

Option Explicit
Sub Zufall()
Dim Eingabe, Zei As Long, Max As Long
Const Such As String = "a"
Eingabe = InputBox("Zahl:")
If Not IsNumeric(Eingabe) Then Exit Sub
Max = Cells(Rows.Count, 1).End(xlUp).Row
While Application.CountIf(Columns(1), Such) > CLng(Eingabe)
Do
Zei = Int(Rnd() * Max) + 1
Loop While Cells(Zei, 1).Value  Such
Rows(Zei).Delete
Max = Max - 1
Wend
End Sub

Gruß
Reinhard
Anzeige
AW: ohne Randomize ist das kein Zufall ...
20.06.2011 10:01:52
Dirk
Hallo!
Probier mal so: (in ein Modul und Aufruf ueber Button)
Sub delete_RandRows()
'this macro deletes rows randomly
Dim i As Long, MyRnd As Single, FirstRow As Long, LastRow As Long
Dim RowNum As Long '(Number of Rows)
Dim RowCnt As Long  '(numbers of rows to be deleted)
Dim RowMarker As String  '(Value to determin deletable row)
RowMarker = Application.InputBox("Bitte Loeschkriterium eingeben (z.B. 'Hans')", " _
Benutzereingabe", Type:=2)
If RowMarker = "" Then
'keine Eingabe, exit sub
Exit Sub
End If
'get LastRow
LastRow = Range("A65536").End(xlUp).Row
'get firstrow (there need to be an empty row before firstrow or firstrow = 1)
FirstRow = Range("A" & LastRow).End(xlUp).Row
RowNum = LastRow - (FirstRow - 1)
Row_entry:
RowCnt = 0
RowCnt = Application.InputBox("Bitte Zahl der verbleibenden Zeilen eingeben" & vbCrLf & _
"Anzahl existierende Zeilen: " & RowNum, "Benutzereingabe", Type:=1)
If RowCnt = 0 Then
'keine Eingabe, exit sub
Exit Sub
ElseIf RowCnt > RowNum Then
'Zahl zu gross, nochmal
GoTo Row_entry
End If
Redo_Delete:
'ermittle random Zeile
MyRnd = Round(Rnd() * (RowNum + FirstRow - 1), 0)
If MyRnd = 0 Then
GoTo Redo_Delete
End If
'Pruefe Zeile auf Marker und loesche, falls vorhanden
If WorksheetFunction.CountIf(Range(Cells(MyRnd, 1), Cells(MyRnd, 20)), RowMarker)  0 Then
Rows(MyRnd).Delete xlShiftUp
LastRow = LastRow - 1
RowNum = RowNum - 1
If LastRow = FirstRow + RowCnt - 1 Then
MsgBox "Done!"
Exit Sub
End If
End If
GoTo Redo_Delete
End Sub

Gruss
Dirk aus Dubai
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige