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

numerischen Wert in Spalte finden

numerischen Wert in Spalte finden
06.04.2022 10:03:57
EasyD
Hallo liebes Forum,
Wie kann ich in einer Spalte mit variabler Länge von unten nach oben den ersten numerischen Wert finden und kopieren, wenn in der Spalte verschiedene Inhalte sind (Leer, 5-stellige Zahlen oder Texte)?
Ich möchte bestimmte Zeilen (!) vom Blatt Import auf das Blatt Export kopieren (und anschließend als csv speichern).
Meine Lösung war:
Schritt 1 - nimm den numerischen Wert aus dem Blatt Import
Schritt 2 - wenn auf Import nicht numerisch, dann nimm den in der Zeile vorher auf das Blatt Export kopierten Zahlenwert
Problem - zwischen den einzelnen Zeilen auf Import sind auch Zeilen enthalten, die ich NICHT mit kopiere - ich kann also nicht in Schritt 2 nicht einfach den Wert aus der darüber liegenden Zeile entnehmen
If IsNumeric(Sheets("Import").Cells(intZeile, 1).Value) = True Then
Sheets("Export").Cells(x, 1).Value = Sheets("Import").Cells(intZeile, 1) 'das hier ist ok
Else
Sheets("Export").Cells(x, 1).Value = Sheets("Export").Cells(x - 1, 1).Value 'das hier nicht
End If
Danke vorab!

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Erste Zahl von unten finden
06.04.2022 10:18:49
unten
Hi,

Wie kann ich in einer Spalte mit variabler Länge von unten nach oben den ersten numerischen Wert finden
Z.B. so (bezogen auf A1:A1000):

Sub erste_Zahl_von_unten()
Dim x As Long
x = Evaluate("=LOOKUP(2,1/ISNUMBER(A1:A1000),ROW(1:1000))")
MsgBox "Treffer in Zeile " & x, vbOKOnly, "Melde Vollzug..."
End Sub
VG, Boris
AW: numerischen Wert in Spalte finden
06.04.2022 10:22:14
Oberschlumpf
Hi,
wenn von oben nach unten erst suchen nach numerisch, dann übertragen, dann Makroende
dann versuchs mal so:

Dim lloRow As Long
With Sheets("Import")
For lloRow = Startzeile To .Cells(Rows.Count, 1).End(xlUp).Row 'hier beginnt von oben nach unten die Suche
If IsNumeric(.Cells(lloRow, 1).Value) Then 'wenn das erste mal numerischer Wert gefunden, dann...
.Cells(lloRow, 1).Copy Sheets("Export").Cells(x, 1) 'numerischen Wert in Import kopieren und in Export einfügen
Exit For 'weitere Suche abbrechen, weil ja 1. num. Wert gefunden
End If
Next
End With
Beachte:
Startzeile = die Zeile in Import, in der die Suche beginnen soll (hast du nicht genannt)
x = Zielzeile in Export, wo der gefundene, numerische Wert eingefügt werden soll
Hilfts?
Ciao
Thorsten
Anzeige
AW: numerischen Wert in Spalte finden
06.04.2022 10:44:25
Daniel
Hi

Dim R as Range
Set R = Columns(1).SpecialCells(xlcelltypeconstants, 1)
Set R = R.Areas(R.Areas.Count)
Set R = R(R.Cells.Count)
R.Copy
Oder

Dim R as Range, C as Range
For each C in Columns(1).SpecialCells(xlcelltypeconstants, 1).cells
Set R = C
Next
R.Copy
Gruß Daniel
AW: numerischen Wert in Spalte finden
06.04.2022 10:56:19
GerdL
Moin

Sub Unit()
Dim rngZiel As Range, x As Long
Set rngZiel = Sheets("Export").Cells(Sheets("Export").Rows.Count, 1).End(xlUp).Offset(1, 0)
With Sheets("Import")
For x = .Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
If IsNumeric(.Cells(x, 1).Text) Then
rngZiel = .Cells(x, 1)
Exit For
End If
Next
End With
If x = 1 Then rngZiel = rngZiel.Offset(-1, 0)
Set Ziel = Nothing
End Sub
Gruß Gerd
Anzeige
=VERWEIS(2;1/ISTZAHL(A1:A999);A:A)
06.04.2022 12:12:12
WF
.
Wenn Du irgendwann mal...
06.04.2022 14:00:19
{Boris}
Hi Walter,
...einen VBA-Code nicht innerhalb 0,1 Sekunden wegdrückst ;-), dann hättest Du gesehen, dass das auch mein Vorschlag war:
x = Evaluate("=LOOKUP(2,1/ISNUMBER(A1:A1000),ROW(1:1000))")
VG, Boris
Ich hab 5 Zeilen weggedrückt, die ich nicht lese.
06.04.2022 16:48:48
WF
.
AW: numerischen Wert in Spalte finden
07.04.2022 07:52:17
EasyD
Hallo zusammen
da muss ich mich wohl entschuldigen, denn ich habe (mal wieder) nur das halbe Problem geschildert:
@Oberschlumpf
ich muss von unten nach oben suchen
@Boris
das hab ich versucht und bekomme einen Laufzeitfehler 13
@Daniel und Gerd
wird m.E. jeweils nicht funktionieren, und da kommen wir zum Problem:
Das Ganze findet in einer Schleife statt:
(sorry für das Entfernen der Kommentierungen dazu, das waren allesamt fachbezogene/vertrauliche Inhalte)

Sub Export()
Dim intZeile As Integer
Dim x As Integer
Dim lRow As Integer
Dim lCol As Integer
Dim WsF As WorksheetFunction
Dim Bereich As Range
Set Bereich = Sheets("Bearbeitungshinweise").Range("A4:C45")
Set WsF = Application.WorksheetFunction
lRow = Sheets("Import").UsedRange.SpecialCells(xlCellTypeLastCell).Row
lCol = Sheets("Import").UsedRange.SpecialCells(xlCellTypeLastCell).Column
Sheets("Export").Activate
x = 1 'Zielzeile auf Export zum Start auf 1 setzen, damit bei 2 begonnen wird (x = x + 1)
For intZeile = 2 To lRow 'Bereich auf Import, der abgearbeitet werden muss
'Zeilen auf dem Blatt Export befüllen, ausgehend vom Blatt Import - das ganze 2-geteilt bei Aufteilungen:
' 1.Teilbereich: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
If Len(Sheets("Import").Cells(intZeile, 2))  0 And Len(Sheets("Import").Cells(intZeile, 3))  0 Then 'Zeilen zwischen den einzelnen Journalen eliminieren
If Left(Sheets("Import").Cells(intZeile + 1, 7), Sheets("Bearbeitungshinweise").Range("G52").Value) = Sheets("Bearbeitungshinweise").Range("G51").Value Then
x = x + 1 'Ermittlung der Zeile, in welche auf Export geschrieben werden muss
Sheets("Export").Cells(x, 3).Value = Right(Left(Sheets("Import").Cells(intZeile + 1, 7), Sheets("Bearbeitungshinweise").Range("G52").Value + 5), 3)
Sheets("Export").Cells(x, 6).Value = Mid(Sheets("Import").Cells(intZeile + 1, 7), Sheets("Bearbeitungshinweise").Range("G52").Value + 13)
Sheets("Export").Cells(x, 2).Value = Sheets("Import").Cells(intZeile, 4)
Sheets("Export").Cells(x, 4).Value = Sheets("Import").Cells(intZeile, 3)
Sheets("Export").Cells(x, 7).Value = Sheets("Import").Cells(intZeile, 7)
Sheets("Export").Cells(x, 5).Value = -Sheets("Import").Cells(intZeile + 1, 9)
Sheets("Export").Cells(x, 8).Value = WsF.VLookup(Sheets("Export").Cells(x, 6).Value, Bereich, 3, True)
Sheets("Export").Cells(x, 9).Value = Sheets("Import").Cells(intZeile, 6)
Sheets("Export").Cells(x, 12).Value = Sheets("Import").Cells(intZeile, 5)
If Len(Sheets("Import").Cells(intZeile, 10)) = 7 Then
Sheets("Export").Cells(x, 10).Value = Sheets("Import").Cells(intZeile, 10)
Else
If Len(Sheets("Import").Cells(intZeile, 13)) = 7 Then
Sheets("Export").Cells(x, 10).Value = Sheets("Import").Cells(intZeile, 13)
Else
'nichts machen
End If
End If
If IsNumeric(Sheets("Import").Cells(intZeile, 1).Value) = True Then
Sheets("Export").Cells(x, 1).Value = Sheets("Import").Cells(intZeile, 1)
Else
Sheets("Export").Cells(x, 1).Value = Sheets("Export").Cells(x - 1, 1).Value 'hier hängt das Problem
y = Evaluate("=LOOKUP(2,1/ISNUMBER(A2:A2000),ROW(2:2000))")
Sheets("Export").Cells(y, 1).Value = Sheets("Import").Cells(intZeile, 1)
End If
' 2.Teilbereich: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
If Len(Sheets("Import").Cells(intZeile + 1, 9))  0 And Len(Sheets("Import").Cells(intZeile + 2, 9))  0 Then 'Bei Aufteilungen:
x = x + 1 'nochmal eine Zeile drauf um auf Export eine weitere hinzuzufügen für die Aufteilung
Sheets("Export").Cells(x, 3).Value = Right(Left(Sheets("Import").Cells(intZeile + 2, 7), Sheets("Bearbeitungshinweise").Range("G52").Value + 5), 3)
Sheets("Export").Cells(x, 6).Value = Mid(Sheets("Import").Cells(intZeile + 1, 7), Sheets("Bearbeitungshinweise").Range("G52").Value + 13)
Sheets("Export").Cells(x, 2).Value = Sheets("Import").Cells(intZeile, 4)
Sheets("Export").Cells(x, 4).Value = Sheets("Import").Cells(intZeile, 3)
Sheets("Export").Cells(x, 7).Value = Sheets("Import").Cells(intZeile, 7)
Sheets("Export").Cells(x, 5).Value = -Sheets("Import").Cells(intZeile + 2, 9)
Sheets("Export").Cells(x, 8).Value = WsF.VLookup(Sheets("Export").Cells(x, 6).Value, Bereich, 3, True)
Sheets("Export").Cells(x, 9).Value = Sheets("Import").Cells(intZeile, 6)
Sheets("Export").Cells(x, 12).Value = Sheets("Import").Cells(intZeile, 5)
If Len(Sheets("Import").Cells(intZeile, 10)) = 7 Then
Sheets("Export").Cells(x, 10).Value = Sheets("Import").Cells(intZeile, 10)
Else
If Len(Sheets("Import").Cells(intZeile, 13)) = 7 Then
Sheets("Export").Cells(x, 10).Value = Sheets("Import").Cells(intZeile, 13)
Else
'nichts machen
End If
End If
If IsNumeric(Sheets("Import").Cells(intZeile, 1).Value) = True Then
Sheets("Export").Cells(x, 1).Value = Sheets("Import").Cells(intZeile, 1)
Else
Sheets("Export").Cells(x, 1).Value = Sheets("Export").Cells(x - 1, 1).Value 'hier hängt das Problem
y = Evaluate("=LOOKUP(2,1/ISNUMBER(A2:A2000),ROW(2:2000))")
Sheets("Export").Cells(y, 1).Value = Sheets("Import").Cells(intZeile, 1)
End If
End If
End If
End If
Next
'Call SaveAsCSV
Sheets("Bearbeitungshinweise").Activate
End Sub

Anzeige
AW: numerischen Wert in Spalte finden
07.04.2022 08:33:51
Oberschlumpf
huch! recht haste!
Hi,
sorry, du hattest ja sogar im Erstbeitrag geschrieben "von unten nach oben" - DAS hatte ich überlesen.
Nun denn, nur mit deinem gezeigten Code haben wir...Code - hilft uns aber nix!
Zeig doch bitte per Upload ne Bsp-Datei mit deinem Code, damit wir anhand der Bsp-Daten auch deinen/unseren Code testen können.
Ciao
Thorsten
AW: numerischen Wert in Spalte finden
07.04.2022 09:56:02
EasyD
Hi Thorsten,
danke für die Rückmeldung - aber wie es immer so ist - da ist ein Haufen vertrauliches Zeug drin.
Ich würde mal abwarten, ob ich noch andere Meldungen bekomme mit Lösungsvorschlägen.
Wenn es sich wirklich nicht vermeiden lässt, dann setze ich mich her und "entfremde" die Datei um sie hoch zu laden.
Grüße
Easy
Anzeige
AW: numerischen Wert in Spalte finden
07.04.2022 10:01:07
Oberschlumpf
nur nich zu viel Einsatz zeigen^^, aber ok, jetzt hätt ich noch Zeit gehabt....bin aber bald für n paar Std weg...hab wohl heut Abend erst wieder Zeit....aber!....is ja nich schlimm - einfach mal abwarten, ob noch andere Meldungen kommen...und wenn nich, is auch nich schlimm...also für mich nich :-)
AW: numerischen Wert in Spalte finden
08.04.2022 08:09:54
EasyD
Hey Thorsten
ich packe das Problem mal anders rum an.
wie gehabt - natürlich kann ich nachvollziehen wenn Du die Mappe sehen willst - geht aber echt nicht ohne dass ich mich 2 Tage da dran setze und das Ding entfremde.
Deshalb wie folgt:
Das eigentliche (!) Problem ist, dass in den importierten Daten schon die gesuchte Nummer NICHT in Spalte A steht.
Ich habe das so gelöst, dass in den Daten aus den importierten Mappen (ich lese ein ganzes Verzeichnis aus und füge die jeweiligen Daten aus jeder einzelnen Datei untereinander auf das Blatt Import ein) jeweils für jede neue ausgelesene Datei diese Nummer in Spalte A rein geschrieben wird. Diese Info erhalte ich aus dem Blattnamen des importierten Sheets (steht an 8.Stelle von links, 5-stellige Ziffer).
Ich weiß nicht mehr, warum das so ist - aber diese Nummer wird nur 1 einziges Mal je Datei auf das Blatt Import geschrieben, und zwar in der allerersten Zeile.
Wenn ich dies nun für JEDE Zeile hinbekomme, dann hätte ich mein Problem gelöst..
Falls nicht, dann leg mein Problem beiseite und ich muss mir was anderes ausdenken
Danke Dir trotzdem schonmal!

Sub CopyData(FullName As String, MitKopfzeile As Boolean, z As Integer)
Dim wbkImp As Workbook, wbkDst As Workbook
Dim wksImp As Worksheet, wksDst As Worksheet
Dim fRow As Integer
Dim lRow As Long, lCol As Integer
Dim wbk As Workbook
Dim aData()
Dim i As Variant
On Error GoTo ErrorHandler
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
If MitKopfzeile Then    '1. Durchlauf mit Kopfzeilen, dann ohne
fRow = IIf(z = 0, 1, 2)
Else     'Keine Kopfzeile vorhanden, also immer ab 1. Zeile
fRow = 1
End If
'Quelldatei öffnen und Daten in Array kopieren
Set wbkDst = ActiveWorkbook
Set wksDst = ActiveSheet
Workbooks.Open FileName:=FullName
Set wbkImp = ActiveWorkbook
Set wksImp = wbkImp.Sheets(1)
lRow = LastRowAll(wksImp)
lCol = LastColAll(wksImp)
aData = wksImp.Range(Cells(fRow, 1), Cells(lRow, lCol))
'In die Zieldatei schreiben
lRow = LastRowAll(wksDst) + Abs(CInt(z > 0))
wksDst.Range("A" & lRow).Resize(UBound(aData), lCol) = aData()
'Die Ziffer ergänzen (in Quelldaten selbst nicht enthalten, nur im Blattnamen an 8.Stelle)
'1xlige Eintragung in der ersten Zeile der jeweiligen Einrichtung ---- ich weiß nicht mehr warum ich das damals so gemacht habe --- die Eintragung für JEDE Zeile machen wäre besser!!!
For Each i In wksDst.Range("A" & lRow)
wksDst.Range("A" & lRow).Value = Right(Left(wksImp.Name, 13), 5)
Next i
wbkImp.Close
Set wbkImp = Nothing
ErrorHandler:
If Not wbk Is Nothing Then
Workbooks(wbkImp).Close
End If
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Kannst Du hiermit was anfangen?
Anzeige
AW: numerischen Wert in Spalte finden
08.04.2022 09:32:20
peterk
Hallo
Sollte So funktionieren
Statt:

wksDst.Range("A" & lRow).Resize(UBound(aData), lCol) = aData()
'Die Ziffer ergänzen (in Quelldaten selbst nicht enthalten, nur im Blattnamen an 8.Stelle)
'1xlige Eintragung in der ersten Zeile der jeweiligen Einrichtung ---- ich weiß nicht mehr warum ...
For Each i In wksDst.Range("A" & lRow)
wksDst.Range("A" & lRow).Value = Right(Left(wksImp.Name, 13), 5)
Next i
Einfach so:

wksDst.Range("A" & lRow).Resize(UBound(aData), lCol) = aData()
wksDst.Range("A" & lRow).Resize(UBound(aData)).Value  = Right(Left(wksImp.Name, 13), 5)
Peter
Anzeige
AW: numerischen Wert in Spalte finden
08.04.2022 12:54:33
EasyD
ein Träumchen!
vielen herzlichen Dank!
läuft!
AW: numerischen Wert in Spalte finden
07.04.2022 09:59:47
EasyD
Vielleicht noch zur Erläuterung:
Blatt Import Zeile 1 = Überschrift
Zeile 2 / Spalte 1 = numerischer Wert - übernehmen
Zeile 3 / Spalte 1 = leer oder Text - hier brauche ich wieder den Wert aus Zeile 2 *)
Zeile 4 / Spalte 1 = leer oder Text - hier brauche ich wieder den Wert aus Zeile 2 den für Zeile 3 übernommenen Wert
Zeile 5 / Spalte 1 = numerischer Wert - übernehmen
Zeile 6 / Spalte 1 = leer oder Text - hier brauche ich wieder den Wert aus Zeile 5 *)
*) Da ich hier den Wert von oben drüber brauche (1 oder mehrere Zeilen oben drüber), muss ich von unten nach oben suchen
Anzeige

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige