23.10.2017, 11:08
Hallo zusammen,
habe ein kleines Problem, bei dem mir das Wissen fehlt, wie ich es lösen kann. Folgender Sachverhalt:
Meine Excel Datei wird automatisch von einem System erstellt. Innerhalb dieser Datei, gibt es ein Blatt, dass immer den selben Namen besitzt.
In diesem Blatt gibt es vier Bereiche, deren Überschrift immer die selbe ist. Unter dieser Überschrift, stehen immer die selben Positionen, deren Werte aber Monat für Monat abweichen.
Also habe ich 1) alle Positionen, die in diesem Blatt existieren, als Integer definiert und 2) per Suchfunktion die entsprechende Überschrift gesucht und markiert. Das sah wie folgt aus:
str_Suche = "Abzüge"
For Zähler1 = 1 To ActiveSheet.Cells.SpecialCells(xlLastCell).Column
For Zähler2 = 1 To ActiveSheet.Cells.SpecialCells(xlLastCell).Row
If Cells(Zähler2, Zähler1).Value = str_Suche Then
Cells(Zähler2, Zähler1).Select
End If
Next
Next
ActiveCell.Offset(0, 0).Select
Abzug1= ActiveCell.Offset(1, 1).Value
Abzug2= ActiveCell.Offset(2, 1).Value
Abzug3= ActiveCell.Offset(3, 1).Value
AbzugM= ActiveCell.Offset(4, 1).Value
Summe2 = ActiveCell.Offset(1, 1).Value + ActiveCell.Offset(2, 1).Value + ActiveCell.Offset(3, 1).Value + ActiveCell.Offset(4, 1).Value
ActiveCell.Offset(5, 1).Value = Summe2
Das funktionierte auch hervorragend. Auch die Ergebnisse stimmten. Aber eine Möglichkeit ist dadurch nicht abgedeckt:
Problem: Es kommt in manchnen Monaten vor, dass einer dieser Abzüge nicht auftritt. Das System lässt in diesem Fall den Wert der Position leer (die Position wird aber noch aufgelistet). Wenn das Feld (Wert der Position) aber leer ist, funktioniert das komplette Makro nicht mehr, weil der Integer mit einem leeren Feld nicht arbeiten kann "typen unverträglich"
Meine Idee war nun, dass man eine IF Funktion einbaut:
Beispiel: "if ActiveCell.Offset(1, 1).Value <> "" then ActiveCell.Offset(1, 1).Value = 0
und anschließend erst dem Integer den Wert zuweist ( Abzug = ActiveCell.Offset(1, 1).Value )
Ich habe nur keine Ahnung, ob das eine elegante Lösung wäre und ob das überhaupt funktioniert?
Für bessere Ideen wäre ich sehr dankbar! :)
Ein Beispiel der Datei habe ich angehängt
habe ein kleines Problem, bei dem mir das Wissen fehlt, wie ich es lösen kann. Folgender Sachverhalt:
Meine Excel Datei wird automatisch von einem System erstellt. Innerhalb dieser Datei, gibt es ein Blatt, dass immer den selben Namen besitzt.
In diesem Blatt gibt es vier Bereiche, deren Überschrift immer die selbe ist. Unter dieser Überschrift, stehen immer die selben Positionen, deren Werte aber Monat für Monat abweichen.
Also habe ich 1) alle Positionen, die in diesem Blatt existieren, als Integer definiert und 2) per Suchfunktion die entsprechende Überschrift gesucht und markiert. Das sah wie folgt aus:
str_Suche = "Abzüge"
For Zähler1 = 1 To ActiveSheet.Cells.SpecialCells(xlLastCell).Column
For Zähler2 = 1 To ActiveSheet.Cells.SpecialCells(xlLastCell).Row
If Cells(Zähler2, Zähler1).Value = str_Suche Then
Cells(Zähler2, Zähler1).Select
End If
Next
Next
ActiveCell.Offset(0, 0).Select
Abzug1= ActiveCell.Offset(1, 1).Value
Abzug2= ActiveCell.Offset(2, 1).Value
Abzug3= ActiveCell.Offset(3, 1).Value
AbzugM= ActiveCell.Offset(4, 1).Value
Summe2 = ActiveCell.Offset(1, 1).Value + ActiveCell.Offset(2, 1).Value + ActiveCell.Offset(3, 1).Value + ActiveCell.Offset(4, 1).Value
ActiveCell.Offset(5, 1).Value = Summe2
Das funktionierte auch hervorragend. Auch die Ergebnisse stimmten. Aber eine Möglichkeit ist dadurch nicht abgedeckt:
Problem: Es kommt in manchnen Monaten vor, dass einer dieser Abzüge nicht auftritt. Das System lässt in diesem Fall den Wert der Position leer (die Position wird aber noch aufgelistet). Wenn das Feld (Wert der Position) aber leer ist, funktioniert das komplette Makro nicht mehr, weil der Integer mit einem leeren Feld nicht arbeiten kann "typen unverträglich"
Meine Idee war nun, dass man eine IF Funktion einbaut:
Beispiel: "if ActiveCell.Offset(1, 1).Value <> "" then ActiveCell.Offset(1, 1).Value = 0
und anschließend erst dem Integer den Wert zuweist ( Abzug = ActiveCell.Offset(1, 1).Value )
Ich habe nur keine Ahnung, ob das eine elegante Lösung wäre und ob das überhaupt funktioniert?
Für bessere Ideen wäre ich sehr dankbar! :)
Ein Beispiel der Datei habe ich angehängt