[Excel] Erste Zahl in definiertem Bereich & letzte Zahl in definiertem Bereich finden

milk&sugar

Grünschnabel
Hallo zusammen,

ich bräuchte bei einem Excel Problem Hilfe.
Ich würde gerne in einem definiertem Bereich (ein Teil einer Zeile) die erste und dann auch die letzte Zahl > 0 finden.
Wenn die gefunden wurde, soll der Spaltentitel in der diese Zahl steht in eine neue Zelle geschrieben werden, die dann in eine Datumsdifferenz involviert wird.

Kann mir hier wer helfen?
Kann gerne auch mit einer Visual Funktion sein.

LG

milk&sugar
 
Hallo milk&sugar,

deine Problembeschreibung ist mir zu "dünn" und zu ungenau.
Ich würde gerne in einem definiertem Bereich die erste und dann auch die letzte Zahl > 0 finden
Meinst du, dass dort Text und Zahlen im Bereich stehen und du die erste und letzte Zahl >0 suchst oder die niedrigste und höchste Zahl >0?
Wenn die gefunden wurde
Das ist die Einzahl, du hast aber die Mehrzahl (2 Zahlenwerte) gesucht. Was ist denn nun korrekt?
soll der Spaltentitel in der diese Zahl steht in eine neue Zelle geschrieben werden, die dann in eine Datumsdifferenz involviert wird.
****? Ich versteh' nur "Bahnhof". Stelle bitte eine Mustertabelle mit Wunschergebnissen ein, dann werden wir die gewiss helfen können.
 
Huhu,

erstmal danke für die super schnelle Reaktion!
Ich suche im ersten Schritt die erste Zahl in diesem Bereich, die >0 ist (lila Zelle)
Von dieser ausgehend soll deren Spaltentitel in eine neue Zelle kopiert werden, mit der dann weiter in einer Datumsdifferenz gerechnet wird.
Gleiches Schritte sollen dann für die letzte Zahl >0 in diesem Bereich stattfinden, mit einer anderen Zelle in deren diese Spaltenüberschrift steht (grüne Zelle soll automatisch gefunden werden)


Hier vielleicht mit einem Beispiel:
177e2aa7b5cf4d4783997d4.png

In Zeile 5 stehen dann die beiden Zellen mit den zugehörigen Spaltenüberschriften.

Grüße
 
An ein bisschen VBA kommst du da wahrscheinlich nicht vorbei. Ev. ginge auch was mit Lookup oder so ähnlich. Ich arbeite aber selten damit und weiss es darum auch grad nicht.

Visual Basic:
Public Sub setTitle()
    Dim startValue  As String
    Dim endValue    As String
    
    'Jedes Feld in der Wertezeile durchgehen
    For Each cell In ActiveSheet.Rows("2:2").Cells
        'Wenn kein Wert vorhanden ist, ist die Zeile zu ende
        If IsEmpty(cell) Then Exit For
        'Wenn die Zelle nicht 0 ist und startValue noch nicht gesetzt ist, setze den startValue
        If cell > 0 And startValue = "" Then startValue = ws.Cells(1, cell.Column)
        'Jedesmal wenn die Zelle nicht 0 ist, den endValue überschreiben.
        If cell > 0 Then endValue = ws.Cells(1, cell.Column)
    Next cell

    'Titel generieren
    ws.Cells(4, 1) = startValue & " - " & endValue
    
End Sub
 
;-)Moin,

ich finde, dass eine Makro-Lösung sinnvoll ist ...
Den Code entsprechend anpassen.

Edit: OK Yaslaw war schneller. Dafür ist mein Code auch länger ;-)
 

Anhänge

  • Zahlensuche.zip
    16,1 KB · Aufrufe: 32
Zuletzt bearbeitet:
@Drogist
Ich bin mal so frei deinen Code hier ins Forum zu kopieren. Ist übersichtlicher
Visual Basic:
'Codevariante von Drogist:
Function ErsteLetzteZahl(rngAuswahl As Range, LR As String)
   'rngAuswahl ist die Markierung
   'LR ist ein Argument, um festzustellen, ob das erste oder letzte Vorkommen ausgewertet werden soll
   '"L" bedeutet von L_inks nach rechts, "R" bedeutet von R_echts nach links
   'Aufruf: =ErsteLetzteZahl(_Markierung_;"L"  oder =ErsteLetzteZahl(_Markierung_;"R"
   'Groß- Kleinschreibung ist nicht relevant.
   
   Dim lngHeadline As Long
   Dim lngSelSp0 As Long, lngSelSp1 As Long, lngSelZe As Long
   Dim Rc As Variant
   Dim i As Integer
   
   Rc = ""
   LR = UCase(Left(LR, 1))
   lngHeadline = 1   'Überschriften stehen in Zeile 1
   If LR <> "L" And LR <> "R" Then
      MsgBox "Bitte nur L, R, Links, Rechts als Argument eingeben!"
      GoTo UserFehler
   End If
   With rngAuswahl
      If .Areas.Count > 1 Then
         MsgBox "Bitte nur 1 zusammenhängenden Bereich auswählen."
         GoTo UserFehler
      End If
      If .Rows.Count > 1 Then
         MsgBox "Bitte nur 1 Zeile auswählen."
         GoTo UserFehler
      End If
      If .Row = lngHeadline Then
         MsgBox "Sie dürfen nicht die Titelzeile auswählen!"
         GoTo UserFehler
      End If
      lngSelSp0 = .Columns(1).Column
      lngSelSp1 = .Columns.Count + lngSelSp0 - 1
   End With
   
   If LR = "L" Then
      '1. Zahl >0 von links nach rechts
      For i = lngSelSp0 To lngSelSp1
         If Cells(rngAuswahl.Row, i) > 0 Then
            Rc = Cells(lngHeadline, i)
            Exit For
         End If
      Next i
   Else
      '1. Zahl >0 von rechts nach links
      For i = lngSelSp1 To lngSelSp0 Step -1
         If Cells(rngAuswahl.Row, i) > 0 Then
            Rc = Cells(lngHeadline, i)
            Exit For
         End If
      Next i
   End If
   
UserFehler:
   
   If IsDate(Rc) Then Rc = Format(Rc, "DD.MM.YYYY")
   ErsteLetzteZahl = Rc
End Function

Aufruf aus dem Excel
Code:
#Erster Wert:
=ersteletztezahl(B2:J2;"l")

#Letzter Wert:
=ersteletztezahl(A2:J2;"r")
 
Grüezi zusammen

Hmmm, das klappt aber durchaus auch ganz ohne VBA-Programmierung, denke ich.

Für das gezeigte Beispiel wären das z.B. die folgenden zwei Formeln:

B5: =INDEX($A$1:$H$1;;SUMMENPRODUKT(1/MAX(($A$2:$H$2>0)*(1/SPALTE($A$2:$H$2)))))

D5: =INDEX($A$1:$H$1;;SUMMENPRODUKT(MAX(($A$2:$H$2>0)*(SPALTE($A$2:$H$2)))))
 
ok, danke an alle schonmal für die super schnellen Antworten.
Wenn ich nun die Funktion mit Ecxel angelegt habe und meine erste Zelle auswähle um dort den Excel Aufruf einzugeben, wähle ich meinen definierten Bereich aus. Jedoch wirft es dann den Fehler #Name?
Das macht er auch wenn ich das nur mit der Testtabelle versuche.
Muss ich da noch mehr an meine spezielle Tabelle anpassen ausser den Bereich in dem er suchen soll?
Sprich im Code selbst (der von Drogist) etwas abändern/Bereiche anpassen?

Bedenkt hier fragt ne Frau *g* Also vielleicht steh ich gerade auch total auf dem Schlauch^^

LG
milk&sugar
 
Bedenkt hier fragt ne Frau *g* Also vielleicht steh ich gerade auch total auf dem Schlauch^^
Das sagt noch gar nix aus, kenne genug weibliche Excel-Kracks *g*

Aber um dir zu sagen wo du das Problem hast, währe es gut zu wissen welche der 3 Varianten du nun verwendet hast.

@Thomas Ramel
Oh, und wie geht das für englische Excel-Version?
Und kannst du das noch ein wenig beschreiben, was diese Formel bewirkt?
Ich bin Programmiererprofi - und Excelanfänger. In VBA kann ich im Excel fast alles automatisieren, jedoch Formeln und Pivot und Graph, die sind der Hass. Aber mich interessiert was da abgeht. Nur sehe ich grad nicht durch.
 
Grüezi Yaslaw

Die Formeln in Englisch kann ich dir hier gleich 'liefern' - die Erklärungen müssen bis Mittag/Abend warten:

B5: =INDEX($A$1:$H$1,,SUMPRODUCT(1/MAX(($A$2:$H$2>0)*(1/COLUMN($A$2:$H$2)))))
D5: =INDEX($A$1:$H$1,,SUMPRODUCT(MAX(($A$2:$H$2>0)*(COLUMN($A$2:$H$2)))))
 
Zurück