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

If Abfrage erstellen

If Abfrage erstellen
10.10.2018 12:31:12
Andreas
Hallo liebe Forumer,
ich habe ein Problem wo ich nochmal eure Unterstützung gebrauchen könnte.
Ich speichere einen Suchbegriff(aus anderer Mappe)in einer Variablen.
Der Suchbegriff ist immer eine 4-stellige Zahl (z.B. 1747, 1816).
Von der Variablen lese ich die ersten beiden Zahlen aus (Kostenstelle). Diese sind gleichzeitig
die Jahreszahlen 17=2017/18=2018 etc. Die ausgelesenen Zahlen verknüpfe ich mit einem String zu einer neuen Variablen (Kostenstelle1). Diese Variable wird nun in raSpalte gesucht und die Daten der rechtsliegenden Zellen summiert. Das läuft. Was ich nicht hinbekomme ist, die If Abfrage die mir folgendes auswertet:
Wenn in Variablen (Kostenstelle) z.B. Wert 15 gespeichert ist, soll er nicht nur die Zellen von "Summe 2015" summieren, sondern auch die Summen bis einschl. akutellem Jahr
(also Summe 2016, Summe 2017 & Summe 2018). Ich muss mit diesen Summen später weitere Berechnungen anstellen.
Public Sub Daten_holen_Aggregation()
Dim strPfad As String, strDatei As String, raSpalte As Range
Dim wbQuelle As Workbook, loSuchbegriff As Long, Kostenstelle As String, Kostenstelle1 As  _
String, boGefunden As Boolean
Dim loSumBewkum As Long
Dim Summe
'Pfad an deine Bedürfnisse anpassen
strPfad = "C:\Users\Desktop\"
strDatei = "Aggregation Baustellenbewertung und Leistungsplanung_ab 2015.xlsx"
loSuchbegriff = ActiveSheet.Range("J1")
loSumBewkum = ActiveSheet.Range("I43")
Kostenstelle = Mid(loSuchbegriff, 1, 2)
Kostenstelle1 = "Summe 20" & Kostenstelle
'Bildschirmaktualisierung aus
Application.ScreenUpdating = False
'Datei öffnen
Set wbQuelle = Workbooks.Open(strPfad & strDatei)
With wbQuelle.Worksheets("Werte für Bewertung")
'Suche nach loSuchbegriff in Zeile 2
Set raSpalte = .Range("A:A").Find(what:=Kostenstelle1, LookIn:=xlValues, lookat:=xlWhole)
'wenn gefunden dann
If Not raSpalte Is Nothing Then
'bei Fund Variable auf Wahr setzen
boGefunden = True
'Daten berechnen & übertragen
If Kostenstelle = 15 Then
'Spalte B und C in der gefundenen Zeile
Summe = .Cells(raSpalte.Row, 2).Value + .Cells(raSpalte.Row, 3).Value
'MsgBox Summe
ThisWorkbook.ActiveSheet.Range("A65") = Summe
End If
End If
End With
'Quelldatei ohne Speichern schließen
wbQuelle.Close (False)
'kein Fund - Meldung ausgeben
'If Not boGefunden Then MsgBox "Die Kostenstelle " & Kostenstelle & " wurde nicht gefunden."
'Variable aufräumen
Set wbQuelle = Nothing: Set raSpalte = Nothing
'Bildschirmaktualisierung an
Application.ScreenUpdating = True
End Sub

Gibt es hier eine gute Lösung?
Danke vorab
Gruß
Andreas

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: If Abfrage erstellen
10.10.2018 12:40:30
Rudi
Hallo,
Kostenstelle = Mid(loSuchbegriff, 1, 2)

ergibt einen String, "15", und dann kann der Vergleich
If Kostenstelle = 15 Then

nicht funktionieren.
Gruß
Rudi
AW: If Abfrage erstellen
10.10.2018 13:05:38
PeterK
Hallo
Ein etwas aufgeräumter Code mit deinen Wünschen (aber ungetestet)
Option Explicit

Public Sub Daten_holen_Aggregation()
    Dim strPfad As String, strDatei As String
    Dim raSpalte As Range
    Dim wbQuelle As Workbook
    Dim loSuchbegriff As Long
    Dim Kostenstelle As Long
    Dim KostenstelleStr As String
    Dim boGefunden As Boolean
    Dim loSumBewkum As Long
    Dim Summe As Long
    Dim i As Long
    Dim aktJahr As Long

    aktJahr = Year(Now) Mod 100

    'Pfad an deine Bedürfnisse anpassen 
    strPfad = "C:\Users\Desktop\"
    strDatei = "Aggregation Baustellenbewertung und Leistungsplanung_ab 2015.xlsx"
    loSuchbegriff = ActiveSheet.Range("J1")

    loSumBewkum = ActiveSheet.Range("I43")

    Kostenstelle = CLng(Mid(loSuchbegriff, 1, 2))

    'Bildschirmaktualisierung aus 
    Application.ScreenUpdating = False

    'Datei öffnen 
    Set wbQuelle = Workbooks.Open(strPfad & strDatei)

    With wbQuelle.Worksheets("Werte für Bewertung")
        ' Variabel initialisieren 
        Summe = 0
        boGefunden = True
        
        For i = Kostenstelle To aktJahr
        
            KostenstelleStr = "Summe 20" & Kostenstelle

            'Suche nach Kostenstelle in Spalte 1 
            Set raSpalte = .Range("A:A").Find(what:=KostenstelleStr, LookIn:=xlValues, lookat:=xlWhole)

            'wenn gefunden dann 
            If Not raSpalte Is Nothing Then
                'bei Fund Variable auf Wahr setzen 
                boGefunden = boGefunden And True
                'Daten berechnen:Summe Spalte B und C in der gefundenen Zeile 
                Summe = Summe + .Cells(raSpalte.Row, 2).Value + .Cells(raSpalte.Row, 3).Value
            Else
               boGefunden = False
            End If
            Set raSpalte = Nothing
            
        Next i
        'Summe übertragen 
        ThisWorkbook.ActiveSheet.Range("A65") = Summe
    End With

    'Quelldatei ohne Speichern schließen 
    wbQuelle.Close (False)

    'kein Fund - Meldung ausgeben 
    'If Not boGefunden Then MsgBox "Mindest eine der Kostenstellen wurde nicht gefunden." 

    'Variable aufräumen 
    Set wbQuelle = Nothing
    
    'Bildschirmaktualisierung an 
    Application.ScreenUpdating = True
End Sub




VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Anzeige
AW: If Abfrage erstellen
10.10.2018 13:42:42
Andreas
Hallo Peter,
klasse. Das war genau das was ich wollte.
2 KLeinigkeiten gibt es aber noch.
Evtl. kannst du mir hier noch helfen.
1. Die berechnete Summe stimmt nicht überein. Wie kann ich mir anzeigen lassen welche Summen/ € Werte er genau zur Berechnung ranzieht?
2. An welcher Stelle kann ich mit der Summe genau weiter rechnen. Ich muss diese mit mit der Variablen loSumBewkum = ActiveSheet.Range("I43") multiplizieren und dann noch mit einer Zahl dividieren.
Danke vorab.
Andreas
AW: If Abfrage erstellen
10.10.2018 13:58:54
PeterK
Hallo
Am Schluss wird eine MsgBox mit allen gefunden Werten angezeigt. Auch die Stelle zum weiterrechnen findest Du im Code
Option Explicit

Public Sub Daten_holen_Aggregation()
    Dim strPfad As String, strDatei As String
    Dim raSpalte As Range
    Dim wbQuelle As Workbook
    Dim loSuchbegriff As Long
    Dim Kostenstelle As Long
    Dim KostenstelleStr As String
    Dim boGefunden As Boolean
    Dim loSumBewkum As Long
    Dim Summe As Long
    Dim i As Long
    Dim aktJahr As Long
    Dim msgStr As String
    
    aktJahr = Year(Now) Mod 100

    'Pfad an deine Bedürfnisse anpassen 
    strPfad = "C:\Users\Desktop\"
    strDatei = "Aggregation Baustellenbewertung und Leistungsplanung_ab 2015.xlsx"
    loSuchbegriff = ActiveSheet.Range("J1")

    loSumBewkum = ActiveSheet.Range("I43")

    Kostenstelle = CLng(Mid(loSuchbegriff, 1, 2))

    'Bildschirmaktualisierung aus 
    Application.ScreenUpdating = False

    'Datei öffnen 
    Set wbQuelle = Workbooks.Open(strPfad & strDatei)

    With wbQuelle.Worksheets("Werte für Bewertung")
        ' Variabel initialisieren 
        Summe = 0
        boGefunden = True
        msgStr = ""
        
        For i = Kostenstelle To aktJahr
        
            KostenstelleStr = "Summe 20" & Kostenstelle
            msgStr = msgStr & KostenstelleStr & ": "
            
            'Suche nach Kostenstelle in Spalte 1 
            Set raSpalte = .Range("A:A").Find(what:=KostenstelleStr, LookIn:=xlValues, lookat:=xlWhole)

            'wenn gefunden dann 
            If Not raSpalte Is Nothing Then
                'bei Fund Variable auf Wahr setzen 
                boGefunden = boGefunden And True
                'Daten berechnen:Summe Spalte B und C in der gefundenen Zeile 
                msgStr = msgStr & "Wert B: " & .Cells(raSpalte.Row, 2).Value & " Wert C: " & .Cells(raSpalte.Row, 3).Value
                Summe = Summe + .Cells(raSpalte.Row, 2).Value + .Cells(raSpalte.Row, 3).Value
                 msgStr = msgStr & " Gesamtsumme: " & Summe & Chr(10)
            Else
               boGefunden = False
               msgStr = msgStr & "nicht gefunden" + Chr(10)
            End If
            Set raSpalte = Nothing
            
        Next i
        'Summe übertragen oder weiterrechnen 
        ThisWorkbook.ActiveSheet.Range("A65") = Summe
    End With

    'Quelldatei ohne Speichern schließen 
    wbQuelle.Close (False)
    
    MsgBox (msgStr)
    
    'kein Fund - Meldung ausgeben 
    'If Not boGefunden Then MsgBox "Mindest eine der Kostenstellen wurde nicht gefunden." 

    'Variable aufräumen 
    Set wbQuelle = Nothing
    
    'Bildschirmaktualisierung an 
    Application.ScreenUpdating = True
End Sub



VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Anzeige
AW: If Abfrage erstellen
10.10.2018 14:11:05
Andreas
Hallo Peter,
danke. Jetzt weiß ich wo das Problem liegt. Ich weiß nur nicht wie ich es lösen kann.
Kannst du da nochmal eingreifen bitte?
Meine Aggregationsliste hat folgende Werte in Spalte A:
Summe 2015
Summe 2016
Jan 17
Feb 17
Mrz 17
Apr 17
Mai 17
Jun 17
Jul 17
Aug 17
Sep 17
Okt 17
Nov 17
Dez 17
Summe 2017
Jan 18
Feb 18
Mrz 18
Apr 18
Mai 18
Jun 18
Jul 18
Aug 18
Sep 18
Okt 18
Nov 18
Dez 18
Summe 2018

Er rechnet aktuell 4 x die "Summe 2015" aus, da der KostenstellenStr die 15 enthält.
Er sollte aber wenn es 2015 ist, die Summen von 2015/2016/2017 & 2018 & ff. Jahre (2019 etc) holen.
Sollte es 2016 sein (KostenstellenStr = 16) müssen die Summen von 2016/2017 & 2018 & ff. Jahre (2019 etc) holen.
DANKE Nochmals
Gruß
Andreas
Anzeige
AW: If Abfrage erstellen
10.10.2018 14:15:56
PeterK
Hallo
Mein Fehler! Bitte ändere die Zeile

KostenstelleStr = "Summe 20" & Kostenstelle
auf

KostenstelleStr = "Summe 20" & i

AW: If Abfrage erstellen
10.10.2018 14:36:27
Andreas
Hallo Peter,
perfekt. Jetzt läuft es !
Tausend Dank.
Gruß
Andreas
Nachtrag
10.10.2018 14:11:06
PeterK
Hallo
Falls Du mit Kommazahlen rechnen willst mußt Du die Variablen enprechend definieren z.B.
    Dim Summe As Double

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Anzeige
AW: Nachtrag
10.10.2018 14:36:43
Andreas
Hallo Peter,
danke für den Hinweis
Gruß
Andreas
Und im anderen Beitrag....
10.10.2018 18:46:19
Werner
Hallo Andreas,
... vielleicht noch einen Hinweis, daß das Problem gelöst ist
Gruß Werner
AW: Und im anderen Beitrag....
11.10.2018 08:07:10
Andreas
Hallo Werner,
sorry. Mach ich direkt.
Gruß Andreas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige