Microsoft Excel

Herbers Excel/VBA-Archiv

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:

 ABCD
1102  
220460050 
3109  
4    

Formeln der Tabelle
ZelleFormel
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!


 ABCDEFGHIJKLM
10100000000002 
220000460000050000 
310#NV0000090000 
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

 ABCD
1102  
220460050 
3109  
4    

Formeln der Tabelle
ZelleFormel
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

 ABCDEFGHIJKL
10100#NV00000002
220000460000050000
310#NV0000090000


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"