Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
1008to1012
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
Inhaltsverzeichnis

Statistik

Statistik
10.09.2008 21:19:29
F.
Hallo Excelfreunde,
aus einer Liste von ca. 25000 Datensätzen, die in acht Segmente (Spalte A) und dann jeweils zehn Untersegmente (Spalte B) aufgeteilt sind, möchte ich per VBA je 50 Datensätze auswählen. Die 50 auszuwählenden Datensätze können als Grundgesamtheit mal 80 Stk enthalten oder mal 300 Stk. Die Auswahl soll nicht einfach die ersten 50 Datensätze nehmen, sondern gespreizt über das gesamte Segment gehen, also wenn 100 Datensätze vorhanden sind: nimm jeden zweiten Datensatz; wenn 250 Datensätze da sind: nimm jeden fünften Datensatz. Der Datensatz kann entweder in Spalte F mit der Nummer des ersten Segmentes (1-8) markiert werden, oder als Zeile in Tabelle2 geschrieben werden.
Falls jemand eine gute Idee hat, und sie preisgibt, danke ich schon jetzt.
Gruß Friedel_3

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

Betreff
Datum
Anwender
Anzeige
AW: Statistik
11.09.2008 12:19:00
fcs
Hallo Friedel,
genau 50 Datenzeilen-Markierungen je Segment bekommt man nur schwierig hin, da für die Bestimmumg der zu markierenden Zeilen je Segment einige Rundungen und Vorgaben in den Berechnungen gemacht werden müssen.
Hier eine Makro-Lösung. Markiert wird nach den Untersegmenten in Spalte B. Falls du nach Spalte A markieren willst, dann muss du die entsprechende Konstante von 2 auf 1 ändern.
Für die Markierung der Segmente in Spalte A könnte man auch noch eine Formellösung hinbekommen, die aber bei 25000 Zeilen sehr rechenintensiv ist.
Gruß
Franz

Sub aaMarkieren()
Dim wks As Worksheet
Dim lngZeile As Long, lngSchritt As Long
Dim lngZeile1 As Long, lngzeile2 As Long
Dim varWertA
Dim varWertSegment, lngCountSegment As Long
Const lngSpMark As Long = 6 'Spalte (F) für Markierung
Const lngSpSegment As Long = 2 'Spalte (B) mit Unter-Segmenten die markiert weren sollen
Const lngZeilenSegment As Long = 50 'Anzahl zu markierende Zeilen pro Unter-Segment
Set wks = ActiveSheet
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With wks
'vorhandene Markierungen löschen
If .Cells(.Rows.Count, lngSpMark).End(xlUp).Row > 1 Then
.Range(.Cells(2, lngSpMark), .Cells(.Rows.Count, lngSpMark).End(xlUp)).ClearContents
End If
'sortieren nach Spalte A und B
With .Range(.Rows(1), .Rows(.Cells(.Rows.Count, 1).End(xlUp).Row))
.Sort key1:=.Range("A1"), Order1:=xlAscending, _
Key2:=.Range("B1"), order2:=xlAscending, _
Header:=xlYes
End With
For lngZeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
'Wert Spalte A prüfen ob neues Segment beginnt, ggf. Wert einlesen
If varWertA  .Cells(lngZeile, 1) Then
varWertA = .Cells(lngZeile, 1)
'Segmentwert zurücksetzen
varWertSegment = ""
'1. zeile des Segments in Spalte A
lngZeile1 = lngZeile
'letzte Zeile des Segments in Spalte A ermitteln
lngzeile2 = lngZeile
Do Until .Cells(lngzeile2 + 1, 1)  varWertA
lngzeile2 = lngzeile2 + 1
Loop
End If
'Wert in Untersegmentspalte prüfen, ob neues Segment beginnt
If varWertSegment  .Cells(lngZeile, lngSpSegment).Value Then
'neuen Wert aus Unter-Segment Spalte einlesen
varWertSegment = .Cells(lngZeile, lngSpSegment).Value
'Anzahl Einträge für Wert
lngCountSegment = Application.WorksheetFunction.CountIf(.Range(.Cells(lngZeile1, _
lngSpSegment), .Cells(lngzeile2, lngSpSegment)), varWertSegment)
'Zeilenschrittweite für Markierung
With Application.WorksheetFunction
lngSchritt = .Max(.Round(lngCountSegment / lngZeilenSegment, 0), 2)
End With
End If
If lngCountSegment 


Anzeige
AW: Statistik
12.09.2008 10:12:28
F.
Hallo Franz,
danke für die Mühe die du dir gemacht hast.
ich werden den Code in meine Datei einbauen
und testen.
Gruß Friedel_3
AW: Sätze nach Anzahlen auswählen
11.09.2008 13:57:00
Erich
Hi Friedel,
eine Lösung hat Franz dir schon gepostet, hier ist noch eine im Angebot.
Die ausgewählten Sätze werden in Tabelle2 kopiert:

Sub Auswahl()
Dim lngZ As Long, lngE As Long, dblV As Double, dblB As Double
Dim dblI As Double, rng As Range, zz As Double
Sheets("Tabelle1").Select                    ' Quelltabelle
lngZ = Cells(Rows.Count, 1).End(xlUp).Row
lngE = 2
dblV = 2
With Sheets("Tabelle2")                      ' Zieltabelle
.Cells.Clear                              '  (wird geleert!)
Rows(1).Copy .Cells(1, 1)                 ' Überschriftzeile
While dblV 

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Sätze nach Anzahlen auswählen
11.09.2008 15:42:03
Erich
Hi Friedel,
hier noch dazu eine Version, die nicht kopiert, sondern markiert:

Sub Auswahl()
Dim lngZ As Long, lngE As Long, dblV As Double, dblB As Double
Dim dblI As Double, rng As Range, zz As Double
Const lngMark As Long = 4        ' Spalte (D) für Markierung
Const dblAnz As Double = 50      ' Anzahl Sätze pro Seg/USeg
lngZ = Cells(Rows.Count, 1).End(xlUp).Row
dblV = 2
While dblV 

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

AW: Sätze nach Anzahlen auswählen
12.09.2008 09:58:29
F.
Danke für die Antworten und den Code.
Ich werde ihn an meine Datei anpassen
und ausprobieren, denke aber dass er
für meine Zwecke brauchbar ist.
Thx
Gruß Friedel_3
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige