Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1368to1372
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

Matrix durchsuchen, verketten wenn Beding. erfüllt

Matrix durchsuchen, verketten wenn Beding. erfüllt
01.07.2014 15:16:09
Heike
Hallo zusammen,
ich suche nach einem Makro, welches mir eine Matrix (B2:AI55) nach Werten größer 0 durchsucht und die dazughörige Zeilen- und Spaltenbezeichnung verkettet. Die Zeilenbezeichnung steht in Spalte A2:A55, die Spaltenbezeichnung in Zeile B1:AI1
Z.Bsp.:
spalte1 spalte2 spalte3
x 0 0 7
y 0 0 0
z 5 0 0
Die verketteten Zeilen- und Spaltenbezeichnung sollen unter der Matrix in einer Spalte ohne Leerzelle stehen:
xspalte3
zspalte1
Vielen Dank fürs darüber nachdenken.
Gruß, Heike

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

Betreff
Datum
Anwender
Anzeige
AW: Matrix durchsuchen, verketten wenn Beding. erfüllt
01.07.2014 15:27:18
Rudi
Hallo,
Sub heike()
Dim arr, i As Integer, j As Integer, s As String
arr = Range("A1:AI55")
For i = 2 To 55
For j = 2 To 35
If arr(i, j)  0 Then
s = s & arr(i, 1) & "/" & arr(1, j) & vbLf
End If
Next
Next
s = Left(s, Len(s) - 1)
With Cells(57, 1) 'Ergebnis in A57
.Value = s
.WrapText = True
End With
End Sub

Gruß
Rudi

AW: Matrix durchsuchen, verketten wenn Beding. erfüllt
01.07.2014 16:09:26
Heike
Hallo Rudi,
Danke für die schnelle Antwort.
Jetzt bekomme ich alle Ergebnisse in einer einzigen Zelle (da hab ich mich nicht verständlich ausgedrückt). Wo und wie füge ich eine Variable ein, damit alle Ergebnisse in einer Spalte aber in aufeinanderfolgenden Zeilen geschrieben werden?
Gruß, Heike

Anzeige
AW: Matrix durchsuchen, verketten wenn Beding. erfüllt
01.07.2014 16:50:33
Rudi
Hallo,
das hab ich missverstanden.
Sub heike()
Dim arr, i As Integer, j As Integer, s
arr = Range("A1:AI55")
For i = 2 To 55
For j = 2 To 35
If arr(i, j)  0 Then
s = s & arr(i, 1) & "/" & arr(1, j) & vbLf
End If
Next
Next
s = Split(s, vbLf)
Cells(57, 1).Resize(UBound(s) + 1) = _
Application.Transpose(s) 'Ergebnis ab A57
End Sub

Gruß
Rudi

AW: Matrix durchsuchen, verketten wenn Beding. erfüllt
02.07.2014 09:19:48
Heike
Hallo Rudi,
vielen Dank noch einmal.
Aber VBA meldet nun einen "Fehler beim kompilieren: erwartet: Datenfeld." Markiert wird UBound...
Gruß, Heike

Anzeige
AW: Matrix durchsuchen, verketten wenn Beding. erfüllt
02.07.2014 09:33:41
Rudi
Hallo,
dann hast du keine Werte 0 drin.
Sub heike()
Dim arr, i As Integer, j As Integer, s
arr = Range("A1:AI55")
For i = 2 To 55
For j = 2 To 35
If arr(i, j)  0 Then
s = s & arr(i, 1) & "/" & arr(1, j) & vbLf
End If
Next
Next
If Len(s) Then
s = Split(s, vbLf)
Cells(57, 1).Resize(UBound(s) + 1) = _
Application.Transpose(s) 'Ergebnis ab A57
Else
MsgBox "nix gefunden"
End If
End Sub

Gruß
Rudi

Alles klar, vielen Dank!
02.07.2014 10:02:50
Heike
Doch und derselbe Datensatz mit der alten Version (alle Ergebnisse in einer Zelle funktioniert auch).
...
Alles klar, hab noch einmal deinen Code mit meinem verglichen: Hatte nur den unteren Teil (nach Next) zur gestrigen Version geändert demzufolge war mein s noch als String definiert!!!
Vielen Dank, jetzt funktioniert es wie es soll!
Vielleicht habe ich gleich noch eine andere Frage, die Aufgabe ist noch nicht zu Ende, aber erst einmal selbst probieren...
Gruß, Heike

Anzeige
Teil2: Matrix durchsu, verketten wenn Bed. erfüllt
02.07.2014 12:01:55
Heike
Hallo nocheinmal,
es dauert mir nun doch zu lang, mich da selbst durchzuwurschteln... ich brauche noch einmal Hilfe:
Der erste Teil, das Verketten der Zeilen- und Spaltenbezeichnung aller Zellen größer Null funktioniert nun dank Rudi, aber nun müssen noch die dazugehörigen Werte in eine Spalte daneben kopiert werden. Das kann doch eigentlich nicht soooo schwer sein, aber ich bekomm es nicht hin!
Gruß, Heike

AW: Teil2: Matrix durchsu, verketten wenn Bed. erfüllt
02.07.2014 13:08:17
Rudi
Hallo,
warum fragst du das nicht sofort? Der Aufwand ist der gleiche.
Sub heike()
Dim arr, i As Integer, j As Integer, s, t
arr = Range("A1:AI55")
For i = 2 To 55
For j = 2 To 35
If arr(i, j)  0 Then
s = s & arr(i, 1) & "/" & arr(1, j) & vbLf
t = t & arr(i, j) & vbLf
End If
Next
Next
If Len(s) Then
s = Split(s, vbLf)
t = Split(t, vbLf)
Cells(57, 1).Resize(UBound(s) + 1) = _
Application.Transpose(s) 'Ergebnis ab A57
Cells(57, 2).Resize(UBound(t) + 1) = _
Application.Transpose(t)
Else
MsgBox "nix gefunden"
End If
End Sub

Gruß
Rudi

Anzeige
AW: Teil2: Matrix durchsu, verketten wenn Bed. erfüllt
02.07.2014 13:32:37
Heike
Hallo,
"warum fragst du das nicht sofort?"
Ich wollte nicht zuviele Fragen auf einmal stellen.
Aber vielen Dank für deine Hilfe, das ist es jetzt! SUPER
Schönen Tag, Heike

Interessant, bröckchenweise also, ...
02.07.2014 13:32:54
Luc:-?
…Heike… :-|
Und was ist, wenn du Gleiches oder Ähnliches in anderer Tabelle oder anderem Zusammenhang nochmal benötigst? Musst du dann wieder fragen, weil du es nicht anpassen kannst?!
Allmählich hast du dann eine hübsche Sammlung von „Eintagsfliegen“ zusammen — dein Nachfolger wird sich freuen, vor allem, falls das alles nicht ordentlich dokumentiert sein sollte!
VBA sollte in 1.Linie dafür benutzt wdn, entweder komplette Projekte zu automatisieren oder Hilfsmittel für ständig wiederkehrende Aufgaben zV zu haben. Ein Sonderfall sind dabei universelle UDFs, die nicht angepasst wdn müssen und das Funktionsinventar von Xl sinnvoll ergänzen. Diese kann man dann auch in AddIns zu allgemeiner u/o ständiger Verwendung stationieren.
Übrigens, „danke“ für das Ignorieren meiner AW! :-[
Luc :-?

Anzeige
AW: Interessant, bröckchenweise also, ...
02.07.2014 14:01:57
Heike
Hallo Luc,
"Übrigens, „danke“ für das Ignorieren meiner AW! :-["
- Nicht wirklich Ignorieren, bin nur noch nicht dazu gekommen, darauf zu antworten...
Ich habe deinen Vorschlag 2 probiert, da ich mit der Syntax am ehesten etwas anfangen kann, aber leider nur als Ergebnis #Name? erhalten.
Bezüglich "bröckchenweise": 1. irgendwo hier im Forum steht, man soll nicht zuviele Fragen auf einmal stellen und 2. dachte ich, dass ich den zweiten Schritt eventuell allein lösen kann, leider fehlt mir dann doch (noch) das genaue Verständnis von Makrobefehlen... Aber ich hoffe das wird.
Auf jeden Fall auch dir Danke, dass du dich meines Problems angenommen hast.
Gruß, Heike

Anzeige
Du hättest den Vorschlag in schwarzer Schrift ...
04.07.2014 01:25:10
Luc:-?
…benutzen sollen, Heike,
den dazu findest du die benötigten UDFs auch im Herber-Archiv. Den Link zu MxJoin hatte ich sogar angegeben! Splitt hingg ist ein simpler 3Zeiler, eine 1:1-Umsetzung der vbFkt Split, der allerdings auch unter diesem u.ä. Namen im Archiv zu finden ist.
Die farbigen Fmln sind Alternativen für die 2 Leute (die lesen mitunter bzw oft mit), die bereits über die benötigten UDFs verfügen bzw demnächst verfügen wdn.
Ich dachte, das wäre aus meinem Text herauslesbar gewesen…
Gruß, Luc :-?

Falls du lieber eine Formel verwenden willst, ...
01.07.2014 18:14:18
Luc:-?
…Heike,
kannst du auch dieses Angebot (nur Ergebnis1) nutzen, das allerdings UDFs verwendet:
 ABCD
45 Sp1Sp2Sp3
46x007
47y000
48z500
49Ergebnis1zSp1xSp3 
50Ergebnis2xSp3zSp1 
51Ergebnis3xSp3zSp1 
52B49:C49: {=Splitt(MxJoin(WENN(B46:D48>0;T(INDIREKT(ADRESSE(ZEILE(B46:D48);1)))&
53                         T(INDIREKT(ADRESSE(45;SPALTE(B46:D48))));"");" "))}
54B50:C50: {=INDIREKT(ADRESSE(ZEILE(INDEX(ChooseIf(B46:D48;;0;">");0;0;{1.2}));1;4))&
55                        INDIREKT(ADRESSE(45;SPALTE(INDEX(ChooseIf(B46:D48;;0;">");0;0;{1.2}));4))}
56B51:C51: {=T(JETZT())&Compute("A"&Splitt(MaskOn(RAddress(ChooseIf(B46:D48;;0;">"));"num"))&
57                     "&"&Splitt(MaskOn(RAddress(ChooseIf(B46:D48;;0;">"));"GB"))&45)}

Die beiden in Ergebnis1 verwendeten UDFs Splitt und MxJoin findest du im Archiv (Button RECHERCHE, UDF-Namen als Suchbegriff verwenden).
Da der Thread mit MxJoin bei Recherchen oft nicht vollständig angezeigt wird, hier noch der direkte Link.
Gruß, Luc :-?
Besser informiert mit …
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige