Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1608to1612
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
match funktioniert nicht korrekt
23.02.2018 13:18:40
Burak
Moin,
es geht um folgendes Makro

Sub verlaufsdiagramm()
Dim linie As String, barcode As Integer, bartest As String, szeile, ezeile, szeile2, ezeile2
Dim lastRowInList As Long
Dim rowHelper As Long
'Usereingabe für Linie
linie = barcodewahl.liniebox
'Abbruch
If linie = "" Then Exit Sub
'Usereingabe für Barcode
bartest = barcodewahl.barcodebox
If bartest = "" Or Not IsNumeric(bartest) Then
Unload barcodewahl
Exit Sub
End If
barcode = CInt(bartest)
'Eingabemaske ausblenden
Unload barcodewahl
lastRowInList = Worksheets(linie).Range(Worksheets(linie).Range("A1").End(xlDown), Worksheets( _
linie).Range("A65536").End(xlUp)).Row
szeile = Application.Match(barcode, Worksheets(linie).Range("A1:A" & lastRowInList), 0)
For rowHelper = szeile + 1 To lastRowInList
If Worksheets(linie).Cells(rowHelper, 1) = barcode Then
ezeile = rowHelper
Else
Exit For
End If
Next
lastRowInList = Worksheets(linie).Range(Worksheets(linie).Range("A1").End(xlDown), Worksheets( _
linie).Range("A65536").End(xlUp)).Row
MsgBox ("Erste Zeile erster Auftrag: " & szeile)
MsgBox ("Letzte Zeile erster Auftrag: " & ezeile)
MsgBox ("Letzte Zeile der gesamten Tabelle: " & lastRowInList)
szeile2 = Application.Match(barcode, Worksheets(linie).Range("A" & ezeile + 1 & ":A" &  _
lastRowInList), 0)
MsgBox ("Startzeile des 2. Auftrags: " & szeile2 & " HIER IST DER FEHLER!!!")
ezeile2 = szeile2
For rowHelper = ezeile2 + 1 To lastRowInList
If Worksheets(linie).Cells(rowHelper, 1) = barcode Then
ezeile2 = rowHelper
Else
Exit For
End If
Next
'Alle Diagramme löschen
If ActiveSheet.ChartObjects.Count > 0 Then
ActiveSheet.ChartObjects.Delete
End If
'Zeitverlaufsdiagramm hinzufügen
ActiveSheet.Shapes.AddChart.Select
With ActiveChart
'Zeitwerte in Minuten umwandeln
Worksheets(linie).Range("E" & szeile + 1 & ":E" & ezeile).Copy Range("Z1")
For i = 1 To ezeile - szeile
Range("Z" & i).Value = Range("Z" & i).Value / 60
Next i
'Datenbereich auswählen
.SetSourceData Source:=Range("Z1:Z" & ezeile - szeile)
'X-Achsen-Werte festlegen
.SeriesCollection(1).XValues = "='" & linie & "'!$N$" & szeile + 1 & ":$N$" & ezeile
'Diagrammtyp gestapelte Balken
.ChartType = xlLine
'Diagrammtitel anzeigen und beschriften
.SetElement (msoElementChartTitleAboveChart)
.ChartTitle.Text = "Linie " & linie & " - " & barcode
.HasLegend = False
'Intervalle festlegen
.Axes(xlValue).MajorUnit = 2
.Axes(xlCategory).TickLabelSpacing = ((ezeile - szeile) / 10) - 1
.Axes(xlCategory).TickMarkSpacing = (ezeile - szeile) / 10
End With
'Y-Achsenbereich festlegen
With ActiveChart.Axes(xlValue)
.MinimumScale = 0
.MaximumScale = 20
End With
'Zeitverlaufsdiagramm Auftrag 2 hinzufügen
ActiveSheet.Shapes.AddChart.Select
With ActiveChart
'Zeitwerte in Minuten umwandeln
Worksheets(linie).Range("E" & szeile2 + 1 & ":E" & ezeile2).Copy Range("Y1")
For i = 1 To ezeile2 - szeile2
Range("Y" & i).Value = Range("Y" & i).Value / 60
Next i
'Datenbereich auswählen
.SetSourceData Source:=Range("Y1:Y" & ezeile2 - szeile2)
'X-Achsen-Werte festlegen
.SeriesCollection(1).XValues = "='" & linie & "'!$N$" & szeile2 + 1 & ":$N$" & ezeile2
'Diagrammtyp gestapelte Balken
.ChartType = xlLine
'Diagrammtitel anzeigen und beschriften
.SetElement (msoElementChartTitleAboveChart)
.ChartTitle.Text = "Linie " & linie & " - " & barcode & " Auftrag 2"
.HasLegend = False
'Intervalle festlegen
.Axes(xlValue).MajorUnit = 2
.Axes(xlCategory).TickLabelSpacing = ((ezeile2 - szeile2) / 10) - 1
.Axes(xlCategory).TickMarkSpacing = (ezeile2 - szeile2) / 10
End With
'Y-Achsenbereich festlegen
With ActiveChart.Axes(xlValue)
.MinimumScale = 0
.MaximumScale = 20
End With
'Diagrammgröße und -position einstellen
With ActiveSheet
.ChartObjects(1).Left = 5
.ChartObjects(1).Top = 5
.ChartObjects(1).Height = 300
.ChartObjects(1).Width = 1400
.ChartObjects(2).Left = 5
.ChartObjects(2).Top = 305
.ChartObjects(2).Height = 300
.ChartObjects(2).Width = 1400
End With
End Sub
Also bisher hat das Makro einen Barcode auf einem Tabellenblatt gesucht, ermittelt wann er das erste mal auftaucht und ab der Zeile wo er das erste mal aufgetaucht ist geguckt in welcher Zeile er das erste mal nicht mehr vorkommt.
So habe ich die Zeilen gefunden, die zu einem Auftrag gehören.
Dementsprechend habe ich das dann in eine Grafik umgewandelt.
So weit so gut.
Nächster Schritt war es in der Tabelle weiter zu suchen ob der Barcode iwann NOCH EINMAL auftaucht und da dann denselben Prozess wie zuvor erneut durchzuführen und dafür ne zweite Grafik zu erstellen.
Das Problem ist, dass er die Startzeile (also wo der Barcode das erste mal auftaucht NACH dem ersten Auftrag) völlig sinnfrei wählt. Im Beispiel wählt er eine Zeile mitten im ersten Auftrag. Also der erste Auftrag geht etwa von Zeile 81 bis 609 und die startzeile für den zweiten auftrag legt er auf etwa 300.
Hier ein Beispielausschnitt:
https://www.herber.de/bbs/user/120023.xlsm
PS: steht zwar auch im Tabellenblatt, aber bitte für Linie R3 und für Barcode 1270 eingeben.
Hoffe jmd findet meinen Fehler.
Vielen Dank euch!!!

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: match funktioniert nicht korrekt
23.02.2018 13:34:38
EtoPHG
Hallo Burak,
Zitat...er die Startzeile (...NACH dem ersten Auftrag) völlig sinnfrei wählt.
Das ist überhaupt nicht sinnfrei, sonder Logik. Auch hier: Mach dich im Help über die Match-Funktion schlau. Wenn du ab dem Bereich A610 suchst, kann es durchaus sein, dass der Auftrag ab Zeile 910 wieder auftaucht. Also Zeile 610 + 300 (Resultat des Match) = Zeile 910.
Gruess Hansueli
bzw. 602 + 237 = Zeile 839 (owT)!
23.02.2018 13:44:13
EtoPHG

AW: match funktioniert nicht korrekt
23.02.2018 14:08:31
Burak
ach stimmt, hatte ich beim ersten Mal als ich mit gearbeitet habe gelesen, aber wieder vergessen. Danke für die Auffrischung udn sorry :D
AW: match funktioniert nicht korrekt
23.02.2018 13:38:14
Rudi
Hallo,
ich würde erst mal alle Bereiche sammeln und dann die Diagramme erstellen.
Als Anregung:
Sub aaa()
Dim rng As Range, a As Range, r As Range
Dim arr
Dim i As Integer
Const bc = 123456 'der Barcode
arr = Cells(1, 1).CurrentRegion.Resize(, 1)
For i = 2 To UBound(arr)
If arr(i, 1) = bc Then
If rng Is Nothing Then
Set rng = Cells(i, 1)
Else
Set rng = Union(rng, Cells(i, 1))
End If
End If
Next
If Not rng Is Nothing Then
For Each a In rng.Areas
For Each r In a.Rows
Debug.Print r.Row
Next r
Next a
End If
End Sub

Gruß
Rudi
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige