Anzeige
Archiv - Navigation
1708to1712
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

Liste erstellen

Liste erstellen
19.08.2019 16:54:24
Frank
Hallo VBA Profis,
ich benötige da noch mal Hilfe vom Fachmann/Fachfrau.
Hab eine kniffelige Aufgabe in 2 Schritten.
Ich habe eine beschriebene Tabelle A1:J10 (= 100 Zellen).
Alle 100 Zellen sind mit verschiedenen Texten und Zahlen beschrieben.
Es soll eine Liste im Tabellenblatt ab A20 erstellt werden, in dem
NUR Zellen mit dem Inhalt "0" sind.
Die Liste soll die Zellen auflisten. (Also wenn wenn A1, B3, D4 und E9 eine "0"
steht, dann soll die Liste wie folgt aufgebaut sein:
A_1
B_3
D_4
E_9
Aus dieser Liste soll dann per Zufallszahl eine Zelle ermittelt und am liebsten
dann in einer MsgBox ausgegeben werden. (z.B. Ergebnis des Zufalls = "B_3")
Schon mal vielen Dank für eure Mühe
LG
Frank

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Alternativ per UDF:
19.08.2019 17:07:37
{Boris}
Hi,
Function CD(Bereich As Range, Suchwert As Variant, k As Long) As String
Dim D As Range, x As Long
x = 1
For Each D In Bereich
If D.Value = Suchwert Then
If x = k Then
CD = D.Address(0, 0)
Exit Function
End If
x = x + 1
End If
Next D
End Function
=CD(A$1:J$10;0;ZEILE(X1))
und runterkopieren.
VG, Boris
Anzeige
Endergebnis in Zelle per 3 UDFs
19.08.2019 18:20:46
Luc:-?
Man kann auch gleich das Endergebnis in der gewünschten Form ermitteln und in einer Zelle per singularer MatrixFml mit 10 Fktt, darunter 3 UDFs, ermitteln, Frank:
{=INDEX(VSplit(VJoin(WENN(quellBereich=0;ZEICHEN(64+SPALTE(quellBereich)) &"_"&ZEILE(quellBereich);"");;-1));
ZUFALLSBEREICH(1;ANZAHL(NoErrRange(quellBereich;1;quellBereich=0))))}
UDF-Links:
NoErrRange (Vs1.3) https://www.herber.de/forum/archiv/1508to1512/t1508209.htm#1508215
VJoin (Vs1.4) & VSplit (Vs1.1) https://www.herber.de/bbs/user/99024.xlsm (BspDatei)
Gruß, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige
Jetzt schießt Du aber...
19.08.2019 18:34:14
{Boris}
Hi Luc,
...grad gewaltig mit Kanonen auf Spatzen.... ;-)
VG, Boris
Wieso? FertigErgebnis, ...
19.08.2019 19:03:47
Luc:-?
…Boris,
und die UDFs sind nun mal da und können die Xl-Fktt ergänzen, was ich gern mal zeige, auch, wenn es, wie hier, mal etwas gewaltiger wirkt. Das machen die Fml-Cracks ja nur mit Xl-Fktt auch so (vgl Dein Xl-Fmln-Link bzw andere Fmln dort und hier im Archiv). ;-]
Ich hätte natürlich auch Deine UDF als Basis nehmen können, aber die ist ja speziell für diesen Zweck gedacht und hätte dann ja auch gleich die gewünschte DatenForm ausgeben können (oder Deine darauf basierende Fml hätte das getan)…
Jedenfalls halte ich die 3 verwendeten UDFs für ziemlich nützlich. Die letzten beiden sind in ihren höheren Versionen auch nicht so oW immer durch neue Xl-Fktt ersetzbar. Und MengenFktt hat Xl mE bis heute nicht.
Gruß, Luc :-?
Anzeige
AW: Wieso? FertigErgebnis, ...
19.08.2019 19:23:00
Daniel
ja, aber das geht hier mit Excel-Standardfunktionen genauso gut.
aber dass du gerne Werbung für die Verwendung DEINER Udfs machst, ist ja nichts neues.
Gruß Daniel
Was habe ich geschrieben?! Ich zeige ihr ....
19.08.2019 23:37:21
Luc:-?
…Zusammenspiel mit Xl-Standard-Fktt! Wenn du weder willens noch in der Lage bist, Vglbares zu schaffen, halt einfach deinen Mund! Wie du tickst, hast du ja nun schon oft genug bewiesen. Ansonsten hatte ich einen deiner typischen Kommentare hier tatsächlich eher erwartet als eine AW von Boris…
Wenn ich die Obergrenze (OG) der Zufallsauswahl in meiner Fml durch deine OG-Fml ersetze, wird eine UDF eingespart und mit 9 Fktt gearbeitet, die dann ohne weiteren Schritt das EndErgebnis liefern. Und die beiden verbliebenen UDFs könnten in einer aktuellen Xl-Abo-Version wahrscheinlich auch noch durch die (hier einigermaßen) entsprd neuen StandardFktt ersetzt wdn.
Und die unpassende Erwähnung in meiner AW an Boris hast du natürlich nicht bemerkt… :-]
Luc :-?
Anzeige
...Und wo ist der Tiefstrich geblieben?! owT
19.08.2019 23:46:33
Luc:-?
:-?
Dann eben so mit Unterstrich
20.08.2019 07:01:52
Daniel
=Zeichen(X1/100+Code("A")-1)&"_"&Rest(X1;100)
Aber da muss man jetzt kein Excelexperte oder Formelfreak sein, um da selber drauf zu kommen und die Formel entsprechend nach seinen Wünschen zu erweitern.
Gruß Daniel
Sicher, aber viell für 1e 'All-in-one'-Lösung :-]
26.08.2019 01:05:31
Luc:-?
Benannte Formel → Zellwert
=AGGREGAT(15;6;(ZEILE(A1:J10)+SPALTE(A1:J10)*100)/(A1:J10=0);ZUFALLSBEREICH(1;ZÄHLENWENN(A1:J10;0)))
ZellFml: =ZEICHEN(Zellwert/100+CODE("A")-1)&"_"&REST(Zellwert;100)
Nur als ZellFml würde das mit einer „Merk“-UDF ebenfalls fktionieren:
=ZEICHEN(Rmd(AGGREGAT(15;6;(ZEILE(A1:J10)+SPALTE(A1:J10)*100)/(A1:J10=0);ZUFALLSBEREICH(1;
ZÄHLENWENN(A1:J10;0))))/100+CODE("A")-1)&"_"&REST(Rmd();100)
Aber es gibt auch noch andere Wege mit weniger oder auch zT anderen UDFs auf anderer Basis, zB als singulare MatrixFml:
{=INDEX(WECHSELN(Rmd(RItems(NoErrRange(A1:J10;;A1:J10=0);;1;0));"$";"_"); ZUFALLSBEREICH(1;ANZAHL(Rmd()))) }
Weiterer UDF-Link: Rmd (Vs1.1) https://www.herber.de/forum/archiv/1592to1596/t1592543.htm#1592585
UDF RItems (ausbaufähig für diverse ZellEigenschaften als Ersatz für ZELLE & Co):
Rem (Ko-)Vektor über alle Zellen 1es Bereichs für 1ne Eigenschaft
'   (Standard: ZellAdresse); Arg1: reg (dis-)kontinuierl Bereich;
'   Arg2ff: Eigensch als VBA-BezeichnText, zugehör Argg n.Bedarf.
'   Vs1.1 -LSr -cd:20190825 -1pub:20190826h -lupd:20190825n
Function RItems(Bereich As Range, ParamArray Eigensch()) Const defProp$ = "address", symDefProp$ = "~" Dim nit As Long, erg, rit As Range On Error GoTo fx: ReDim erg(Bereich.Cells.Count - 1) If UBound(Eigensch) 1 Then RItems = WorksheetFunction.Transpose(erg) Else: RItems = erg End If End With End If fx: If CBool(Err.Number) Then RItems = CVErr(Err.Number) End Function Übrigens, beim Experimentieren mit ZELLE & Co habe ich etwas entdeckt, was uU aber auch Xl aushebeln kann und somit eine gewisse Gefährlichkeit alter XLM-Fktt offenbart, zumal deren Anforderungen ja auch nicht in der Xl-Hilfe beschrieben wdn. Dazu dann später mehr (neuer Thread ggf mit Link hier u/o dort).
Luc :-?
Anzeige
Eine Ungenauigkeit hat sich doch noch in meine ...
19.08.2019 23:58:17
Luc:-?
…AW eingeschlichen, Boris;
hatte auch mit DataSet experimentiert → das ist eine Mengen-Fkt. NoErrRange ist eine andere nützliche, die Bezüge nur auf die Zellen eines ZellBereichs zurückgibt, die keinen Fehler enthalten und die Bedingung im 3.Argument erfüllen. Außerdem können ausgeblendete Zeilen und Spalten weggelassen wdn. Dadurch entstehen idR diskontinuierliche Bereiche, deren Inhalte dann mit DataSet lückenlos wiedergegeben wdn können. Auch viele alte und wenige neuere XlFktt können diese Bereiche direkt verarbeiten.
Luc :-?
Anzeige
AW: Liste erstellen
19.08.2019 19:08:40
Daniel
Hi
im Prinzip mit VBA so
dim Zelle as Range
dim strErg as string
dim arrErg
for each Zelle in Range("A1:J10")
if Zelle.Value = 0 Then strErg = strErg & "," & zelle.Address(0, 0)
Next
arrErg = Split(mid(strErg, 2), ",")
Range("A20").Resize(ubound(arrErg, 1) + 1, 1).value = Worksheetfunction.Transpose(arrErg)
Msgbox arrErg(Worksheetfunction.RandBetween(0, ubound(arrErg)))

eine reine Formelllösung um den Zufälligen Wert zu ermitteln könnte so aussehen, hier ohne den Zwischenschritt:
=Aggregat(15;6;(Zeile(A1:J10)+Spalte(A1:J10)*100)/(A1:J10=0);Zufallsbereich(1;ZählenWenn(A1:J10;0))) 
wobei hier das Ergebnis in der Form Spaltennummer/Zeilennummer als Zahl ausgegeben wird und man das in einer zweiten Zelle dann noch in Form bringen müsste:
=Zeichen(X1/100+Code("A")-1)&Rest(X1;100)
Gruß Daniel
Anzeige
AW: Liste erstellen
19.08.2019 23:02:38
Frank
Hallo Boris, Luc und Daniel,
das ist genau das Makro, was ich brauche.
Vielen Dank für eure Mühe.
Danke und Gruß
Frank

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige