Anzeige
Archiv - Navigation
1216to1220
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
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

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.
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

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige