Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1580to1584
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
Ergänzung VBA Script um zwei IF Abfragen
20.09.2017 09:21:26
Christian
Hallo Forumsgemeinde
Ich habe ein VBA Sctript, welches mir aufgrund einer Abfrage (Monat) alle Datensätze aus Tabelle 1(Cube_Rohdaten) in Tabelle 2 (Cube_Filter) schreibt.
Nun brauche ich aber noch zwei weitere Abfragen in diesem VBA. Und zwar wenn das Datum (aus Spalte 3) stimmt, und wenn in der betreffenden Zeile in Spalte 8 der Wert "10" steht, und zugleich in Spalte 9 der Wert "Sendungen"
Nur wenn diese drei Bedingungen erfüllt sind, sollte die Zeile kopiert werden.
ich kriegs nicht hin auch nach 2 Tagen Recherche. "If und Else sind definitiv nicht meine Freunde"
-----------------------------------------------------------------------------

Sub Abrechnung_je_Monat()
Dim c As Range, ErgBereich As Range, _
Mon As String, _
einheit As String, _
RP As String, _
laR As Long, _
check As Boolean
Workbooks("Kalkulation_Copyshop - Kopie.xlsm").Worksheets("Cube_Filter").Range("A2:A2000").  _
_
_
EntireRow.Delete
Worksheets("Cube_Rohdaten").Activate
Mon = InputBox(vbCr & vbCr & vbCr & "Bitte den Monat eingeben, für den die Abrechnung  _
erzeugt werden soll (1 - 12)" & vbNewLine & vbNewLine & " Der Lauf kann bis zu 5 Sekunden  _
dauern")
If Mon = "" Then check = True
If IsNumeric(Mon) Then
If Mon  12 Then check = True
Else
check = True
End If
If check = True Then
MsgBox "Keine oder falsche Eingabe !" & vbCr & vbCr & _
"Bitte wiederholen mit den richtigen Eingaben", vbOKOnly + vbCritical, _
"Dezenter Hinweis für " & Application.UserName & ":"
Exit Sub
End If
Application.ScreenUpdating = False
laR = Cells(Rows.Count, 3).End(xlUp).Row
For Each c In Range("A3:K" & laR)
If IsDate(c.Text) Then
If Month(CDate(c.Text)) = Mon Then
Set ErgBereich = Rows(c.Row)
Exit For
End If
End If
Next c
If ErgBereich Is Nothing Then
MsgBox "Es wurden keine Daten für den Monat " & Mon & " gefunden!", vbOKOnly +  _
vbInformation, _
"Dezenter Hinweis für " & Application.UserName & ":"
Else
For Each c In Range("A3:K" & laR)
If IsDate(c.Text) Then
If Month(CDate(c.Text)) = Mon Then
Set ErgBereich = Application.Union(ErgBereich, Rows(c.Row))
End If
End If
Next c
ErgBereich.copy
ActiveSheet.Paste Destination:=Worksheets("Cube_Filter").Range("A3:K200")
MsgBox ("Die Abrechnungsdaten wurden erzeugt. Die Daten wurden in die Tabelle:" &  _
vbNewLine & "[Datenlieferung_ITGBA01_Kopier]" & vbNewLine & "geschrieben")
End If
Application.ScreenUpdating = True
Application.CutCopyMode = False
Set ErgBereich = Nothing
Worksheets("Datenlieferung_ITGBA01_Kopier").Activate
End Sub
------------------------------------------------------------------

Danke!!!
Christian

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachfrage
20.09.2017 10:03:46
Rudi
Hallo,
wenn das Datum (aus Spalte 3) stimmt
du durchsuchst doch A (Spalte 1)
For Each c In Range("A3:K" & laR)

Gruß
Rudi
Nachfrage
20.09.2017 10:05:54
Rudi
Hallo,
wenn das Datum (aus Spalte 3) stimmt
warum durchsuchst du dann Spalte 1-11 (A:K) nach dem Datum?
For Each c In Range("A3:K" & laR)
Gruß
Rudi
Vorschlag
20.09.2017 10:15:42
Rudi
teste mal:
Sub Abrechnung_je_Monat()
Dim c As Range, ErgBereich As Range, _
Mon As String, _
einheit As String, _
RP As String, _
laR As Long, _
check As Boolean
Workbooks("Kalkulation_Copyshop - Kopie.xlsm").Worksheets("Cube_Filter").Range("A2:A2000"). _
EntireRow.Delete
Worksheets("Cube_Rohdaten").Activate
Mon = InputBox(vbCr & vbCr & vbCr & "Bitte den Monat eingeben, für den die Abrechnung erzeugt  _
werden soll (1 - 12)" _
& vbNewLine & vbNewLine _
& " Der Lauf kann bis zu 5 Sekunden dauern ")
If Mon = "" Then check = True
If IsNumeric(Mon) Then
If Mon  12 Then check = True
Else
check = True
End If
If check = True Then
MsgBox "Keine oder falsche Eingabe !" & vbCr & vbCr & _
"Bitte wiederholen mit den richtigen Eingaben", vbOKOnly + vbCritical, _
"Dezenter Hinweis für " & Application.UserName & ":"
Exit Sub
End If
Application.ScreenUpdating = False
laR = Cells(Rows.Count, 3).End(xlUp).Row
For Each c In Range("C3:C" & laR)
If IsDate(c.Text) Then
If Month(CDate(c.Text)) = Mon And c.Offset(, 5) = 10 And c.Offset(, 6) = "Sendungen" Then
If ErgBereich Is Nothing Then
Set ErgBereich = c.EntireRow
Else
Set ErgBereich = Union(ErgBereich, c.EntireRow)
End If
End If
End If
Next c
If ErgBereich Is Nothing Then
MsgBox "Es wurden keine Daten für den Monat " & Mon & " gefunden!", vbOKOnly +  _
vbInformation, _
"Dezenter Hinweis für " & Application.UserName & ":"
Else
ErgBereich.Copy Workbooks("Kalkulation_Copyshop - Kopie.xlsm").Worksheets("Cube_Filter"). _
Range("A2")
MsgBox ("Die Abrechnungsdaten wurden erzeugt. Die Daten wurden in die Tabelle:" _
& vbNewLine & "[Datenlieferung_ITGBA01_Kopier]" _
& vbNewLine & "geschrieben")
End If
Application.ScreenUpdating = True
Application.CutCopyMode = False
Set ErgBereich = Nothing
Worksheets("Datenlieferung_ITGBA01_Kopier").Activate
End Sub

Gruß
Rudi
Anzeige
AW: Vorschlag
20.09.2017 11:33:49
Christian
Hallo Rudi,
So geil!!!
Klappt einfach.....
Sag mal, hab ich eine Möglichkeit die Werte in der neuen Tabelle dann auf die Kostenstelle zu aggregieren, sprich Summe an Sendungen, je Kostenstelle?
J)
Also Immer wenn die Spalte K einen gleichen Wert hat, die Summe der Spalte Menge (Spalte J) zusammenzählen. Das am Ende nur noch eine Zeile je Kostenstelle erscheint?
Rest ist Super so!!!!
Danke
Christian
AW: Vorschlag
20.09.2017 12:45:37
Rudi
Abwandlung des ersten Codes:
Sub Sendungen_je_Kst()
Dim c As Range, ErgBereich As Range, _
Mon As String, _
einheit As String, _
RP As String, _
laR As Long, _
check As Boolean
Dim objKst As Object
Set objKst = CreateObject("scripting.dictionary")
objKst("Kst") = "Sendungen"
Workbooks("Kalkulation_Copyshop - Kopie.xlsm").Worksheets("Cube_Filter").Range("A2:A2000"). _
EntireRow.Delete
Worksheets("Cube_Rohdaten").Activate
Mon = InputBox(vbCr & vbCr & vbCr & "Bitte den Monat eingeben, für den die Abrechnung erzeugt  _
werden soll (1 - 12)" _
& vbNewLine & vbNewLine _
& " Der Lauf kann bis zu 5 Sekunden dauern ")
If Mon = "" Then check = True
If IsNumeric(Mon) Then
If Mon  12 Then check = True
Else
check = True
End If
If check = True Then
MsgBox "Keine oder falsche Eingabe !" & vbCr & vbCr & _
"Bitte wiederholen mit den richtigen Eingaben", vbOKOnly + vbCritical, _
"Dezenter Hinweis für " & Application.UserName & ":"
Exit Sub
End If
Application.ScreenUpdating = False
laR = Cells(Rows.Count, 3).End(xlUp).Row
For Each c In Range("C3:C" & laR)
If IsDate(c.Text) Then
If Month(CDate(c.Text)) = Mon And c.Offset(, 5) = 10 And c.Offset(, 6) = "Sendungen" Then
objKst(c.Offset(, 8)) = objKst(c.Offset(, 8)) + c.Offset(, 9) * 1
End If
End If
Next c
If objKst.Count = 1 Then
MsgBox "Es wurden keine Daten für den Monat " & Mon & " gefunden!", vbOKOnly +  _
vbInformation, _
"Dezenter Hinweis für " & Application.UserName & ":"
Else
With Worksheets.Add   'neues Blatt
.Cells(2, 1).Resize(objKst.Count) = WorksheetFunction.Transpose(objKst.keys)
.Cells(2, 2).Resize(objKst.Count) = WorksheetFunction.Transpose(objKst.items)
End With
End If
Application.ScreenUpdating = True
Application.CutCopyMode = False
Set objKst = Nothing
End Sub
Gruß
Rudi
Anzeige
AW: Vorschlag
20.09.2017 13:33:41
Christian
Hallo Rudi,
klappt leider nicht.
Da kommt eine Fehlermeldung "Typen unverträglich"
Die werte wären am besten wenn Sie direkt in das Sheet "Cube_Filter" geschrieben würden. Ab da kann ich dann weiterarbeiten...
Hast du nochmal 5 min. dir das beigefügte Script anzusehen?
Danke dir
Christian
https://www.herber.de/bbs/user/116393.xlsm
AW: Vorschlag
20.09.2017 14:22:50
Rudi
hier ist der Fehler:
        objKst(c.Offset(, 8)) = objKst(c.Offset(, 8)) + c.Offset(, 9) * 1

richtig ist
        objKst(c.Offset(, 8).Value) = objKst(c.Offset(, 8).Value) + c.Offset(, 7) * 1
Gruß
Rudi
Anzeige
AW: Vorschlag
21.09.2017 07:04:33
Christian
Danke!
Funktioniert so weit :-)
Gruß
Christian

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige