Hallo Experten,
ich habe ein wirklich kniffliges Problem. Es gibt folgende Tabelle:
Wert…Häufigkeit
a…2
b…3
c…1
d…3
Nun soll in einer weiteren Tabelle folgendes herauskommen:
Wert
a
a
b
b
b
c
d
d
d
Es soll also 2 mal a kommen, weil in obiger Tabelle die Häufigkeit für den Wert a 2 ist usw. Hierfür benötige ich nun eine Formel.
Danke im Voraus für alle guten Ideen.
Grüße
Werner
Hallo Werner,
das nachfolgende Makro macht genau was Du brauchst.
Es stammt nicht von mir, ich habs mal, möglicherweise sogar hier bei wer-weiß-was gefunden und aufgehoben.
Speichere das Makro unter „Diese Arbeitsmappe“ und führe es aus, falls die Werte, wie Du sie beschrieben hast, in dieser Tabelle vorliegen.
Es wird die ganze Zeile so oft multipliziert, wie es in Spalte B steht.
Die Zahlen kannst Du ja dann löschen.
Zur Sicherheit nur mit dem Duplikat einer Tabelle arbeiten!
Sub zeilmulti()
Dim Werte(), zei, ws1, pos, zei2
For zei = 1 To Range(„A65536“).End(xlUp).Row
ReDim Preserve Werte(2, zei)
Werte(1, zei) = Cells(zei, 1)
Werte(2, zei) = Cells(zei, 2)
Next zei
For zei = 1 To zei - 1
For pos = 1 To Werte(2, zei)
zei2 = zei2 + 1
Cells(zei2, 1) = Werte(1, zei)
Cells(zei2, 2) = Werte(2, zei)
Next pos
Next zei
End Sub
Viel Erfolg, Rückmeldung wäre schön!
Ullrich Sander
Hallo Ullrich,
danke für die Hilfe, aber sie bringt mich vorerst noch nicht weiter.
Bei mir ist die erste Tabelle in den Spalten A156:B185, die zweite Tabelle, wohin die Zeilen kopiert werden sollen, befindet sich in A185:A1000.
Wie mache ich es, dass nur die Werte von A156:B185 kopiert und nach A185:A1000 kpoiert werden sollen?
Grüße
Werner
Hallo Werner,
kannst Du das Ergebnis nicht „von Hand“ kopieren?
fragt sich Ullrich Sander
Hallo,
es soll letztendlich von jemand anderem benutzt werden, und dem will ich so wenige mögliche Fehlerquellen wie möglich lassen.
Ich habe nun aber eine gänzlich andere Vorgangsweise gewählt, die funktioniert.
Danke trotzdem für deine Hilfe.
Grüße
Werner
Hallo Werner,
ohne Test aus dem Kopf (also keine Garantie auf Tippfehler).
Sub zeilmulti()
Dim Werte(), zei, ws1, pos, zei2
For zei = 156 To 185 'A156:B185
ReDim Preserve Werte(2, zei)
Werte(1, zei) = Cells(zei-155, 1)
Werte(2, zei) = Cells(zei-155, 2)
Next zei
zei2=186-1 ’ Startzeile
For zei = 1 To 185-165+1 ’ Kann auch ausgerechnet werden
For pos = 1 To Werte(2, zei)
zei2 = zei2 + 1
Cells(zei2, 1) = Werte(1, zei)
Cells(zei2, 2) = Werte(2, zei)
Next pos
Next zei
End Sub
Aber mal ganz ehrlich, was soll das für einen Sinn haben? Und wenn es wirklich notwendig sein sollte, dann prüfe bitte auch ob nicht mehr als Einträge als vorhandene Zeilen existieren (655356-186).
MfG Georg V.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]