Positive Werte einer Zeile auslesen
Betrifft: Positive Werte einer Zeile auslesen
von: Johann
Geschrieben am: 04.08.2014 11:24:01
Hallo zusammen,
nach langem Suchen finde ich keine Lösung für folgendes Problem.
Ich möchte alle positiven Werte einer Zeile auslesen und nebeneinander schreiben.
Beispiel: Im Sheet Tab1 stehen Werte in der Zeile B2:AZ2 und darunter
0 10 0 0 0 0 0 0 0 0 0 2
20 0 0 0 4600 0 0 0 50 0 0 0
...
Dazwischen Nullen oder #NV. Die Datenreihen haben aber stets die gleiche Länge.
Ziel: In Sheet Tab2 sollen dann beginnend in B2 alle positiven Werte stehen,
also
10 2 nebeneinander, und
20 4600 50 darunter
...
Bisher habe ich nur Lösungen gefunden, wie man der ersten oder den letzten positiven Wert einer Datenreighe findet.
Habt ihr einen Tipp für mich?
Viele Grüße
Johann
PS: Habt ihr dann noch einen Tipp für mich, wie ich jeweils zweimal untereinander die 10 schreibe, dann die Summe aus (10 und 2), also zweimal die 12, dann zweimal die 32 (= Summe aus 12 und 20), dann zweimal 4632 usw.
...Vorarbeit zu einem Treppenchart
 |
Betrifft: AW: Positive Werte einer Zeile auslesen
von: Robert
Geschrieben am: 04.08.2014 11:43:12
Hallo Johann,
Das folgende Makro sollte dir die positiven Werte aus "Tab1" wie gewünscht int "Tab2" für jede Zeile nebeneinander schreiben:
Option Explicit
Sub Test()
Dim intRow, intCol, intLastRow, intLastCol As Integer
Dim Quelle, Ziel As Worksheet
Set Quelle = Worksheets("Tab1")
Set Ziel = Worksheets("Tab2")
For intRow = 2 To Quelle.UsedRange.SpecialCells(xlCellTypeLastCell).Row
intLastCol = 2
intLastRow = Ziel.UsedRange.SpecialCells(xlCellTypeLastCell).Row
For intCol = 2 To Quelle.UsedRange.SpecialCells(xlCellTypeLastCell).Column
If Quelle.Cells(intRow, intCol) > 0 Then
Ziel.Cells(intLastRow + 1, intLastCol) = Quelle.Cells(intRow, intCol)
intLastCol = intLastCol + 1
End If
Next intCol
Next intRow
End Sub
ungetestet, daher bitte ich um Feedback
viele Grüße
Robert
Betrifft: Dein Makro läuft nicht durch
von: Johann
Geschrieben am: 04.08.2014 11:49:06
Hallo Robert,
dein Makro läuft nicht durch.
Es wird nur die 20 in B2 in Tab2 geschrieben.
Beim Debuggen ist die If Schleife markiert. Laufzeitfehler 13, Typen unverträglich.
Könnte man mein Problem nicht auch ohne VBA lösen?
Viele Grüße
Johann
Betrifft: Bitte jemand Anderes für eine non-VBA Lösung!
von: Robert
Geschrieben am: 04.08.2014 12:14:55
Hallo Johann,
Ja, kann man sicher auch ohne vba lösen.
da bin ich allerdings der Falsche :)
Ich markier das Thema mal wieder als Offen.
Mein Makro schau ich mir später nochmal an und korrigiere den fehler :)
viele Grüße
Robert
Betrifft: Bitte erfüllt, bevor ausgesprochen ;-) owT
von: neopa C (paneo)
Geschrieben am: 04.08.2014 12:18:56
Gruß Werner
.. , - ...
Betrifft: (MATRIX-)Formellösung ...
von: neopa C (paneo)
Geschrieben am: 04.08.2014 12:04:29
Hallo Johann,
... Formel nach rechts und unten kopieren:
| A | B | C | D |
1 | 10 | 2 | | |
2 | 20 | 4600 | 50 | |
3 | 10 | 9 | | |
4 | | | | |
Formeln der Tabelle |
Zelle | Formel | A1 | {=WENN(SPALTE(A1)>ANZAHL(WENN(('Tab1'!$A1:$Z1>0); 'Tab1'!$A1:$Z1)); "";INDEX('Tab1'!$A1:$Z1;KKLEINSTE(WENN(('Tab1'!$A1:$Z1>0)*ISTZAHL('Tab1'!$A1:$Z1); SPALTE($A1:$Z1)); SPALTE(A1))))} |
|
Enthält Matrixformel: Umrandende { } nicht miteingeben, sondern Formel mit STRG+SHIFT+RETURN abschließen! |
| A | B | C | D | E | F | G | H | I | J | K | L | M |
1 | 0 | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | |
2 | 20 | 0 | 0 | 0 | 4600 | 0 | 0 | 0 | 50 | 0 | 0 | 0 | |
3 | 10 | #NV | 0 | 0 | 0 | 0 | 0 | 9 | 0 | 0 | 0 | 0 | |
4 | | | | | | | | | | | | | |
Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Werner
.. , - ...
Betrifft: AW: (MATRIX-)Formellösung ...
von: Johann
Geschrieben am: 04.08.2014 14:02:39
Hallo Werner,
vielen Dank für die Formel!!!
Wahrscheinlich einfacher ein Atom zu spalten als darauf zu kommen...:-D
Kurzes Feedback:
Funktioniert super für dein Beispiel, allerdings nur mit Nullen und nicht mit #NV in den Zellen - macht nichts - könnte ich anpassen.
Ich habe aber ein Problem deine Formel auf meine Datenreihen anzuwenden.
Meine Daten stehen in Tab1!B2:AZ2. Ich verwende deine Formel in Tab2!B2, entsprechend abgewandelt:
{= WENN(SPALTE(B2)>ANZAHL(WENN(('Tab1'!$B2:$AZ2>0); 'Tab1'!$B2:$AZ2)); ""; INDEX('Tab1'!$B2:$AZ2;KKLEINSTE(WENN(('Tab1'!$B2:$AZ2>0)*ISTZAHL('Tab1'!$B2:$AZ2); SPALTE($B2:$AZ2)); SPALTE(B2)))) }
Tab2!B2 bleibt leer
Die meisten Zellen daneben und darunter auch.
Was mache ich verkehrt? Liegt es möglicherweise daran, dass sich hinter den Daten in Tab1 Formeln verbergen?
 |
Betrifft: falsche Formel einkopiert
von: neopa C (paneo)
Geschrieben am: 04.08.2014 17:07:52
Hallo Johann,
... ich hatte die eingestellte Formel in A1 und erst in Zeile 3 bemerkt, dass diese bei #NV nicht ausreichend ist. Hatte diese aber dann nur in A3 korrigiert und nicht nach A1 zurückkopiert und somit heute Mittag eine unzureichende eingestellt. Sorry.
Die Formel die beides richtig berücksichtigt ist nachfolgende (Beachte insbesondere auch den untenstehenden Hinweis, wie die Formel abzuschließen ist):
Tab2
| A | B | C | D |
1 | 10 | 2 | | |
2 | 20 | 4600 | 50 | |
3 | 10 | 9 | | |
4 | | | | |
Formeln der Tabelle |
Zelle | Formel | A1 | {=WENN(SPALTE(A1)>ANZAHL(WENN(('Tab1'!$A1:$Z1>0); 'Tab1'!$A1:$Z1)); "";INDEX('Tab1'!$A1:$Z1;KKLEINSTE(WENN(ISTZAHL(1/('Tab1'!$A1:$Z1>0)); SPALTE($A1:$Z1)); SPALTE(A1))))} |
|
Enthält Matrixformel: Umrandende { } nicht miteingeben, sondern Formel mit STRG+SHIFT+RETURN abschließen! |
Tab1 | A | B | C | D | E | F | G | H | I | J | K | L |
1 | 0 | 10 | 0 | #NV | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 |
2 | 20 | 0 | 0 | 0 | 4600 | 0 | 0 | 0 | 50 | 0 | 0 | 0 |
3 | 10 | #NV | 0 | 0 | 0 | 0 | 0 | 9 | 0 | 0 | 0 | 0 |
Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Werner
.. , - ...
Betrifft: Super, Vielen Dank!! nfm
von: Johann
Geschrieben am: 05.08.2014 10:09:28
Viele Grüße
Johann
Beiträge aus den Excel-Beispielen zum Thema "Positive Werte einer Zeile auslesen"