Hundebetreuungstabelle
#51
Hallo Egon12.......

auch dir herzlichen Dank für deine Rückmeldung. Ist schon interessant, wie viele Rückmeldungen aman bekommt und jeder hat noch einen weiteren Tipp, wie mal die Vorlage verbessern kann. Herzlichen Dank.

Ich habe gerade mal geschaut, deine Änderung herunter zu laden. Bekomme hier aber "about:blank" angezeigt.....ich werde hier auf eine leere Seite verwiesen.



Gruß Claudia
....lieben Gruß

Claudia
Antworten Top
#52
Hallo Claudia,

ich konnte die Datei ganz normal runterladen. Diese lässt sich auch ganz normal öffnen und funktioniert.
Es kann schon mal passieren das beim Hochladen was schiefläuft. Aber in diesem Fall ist alles ok.

Gruß Uwe
Antworten Top
#53
Hallo Uwe,

vielen Dank für deine Anregungen. Werde mir das am Wochenende mal zu Gemüte führen.
Zitat:Die farbliche Kennzeichnung würde ich mit bedingter Formatierung erschlagen.

was die bedingten Formatierungen betrifft, davon hatte ich Abstand genommen, da die ja in gewisser Weise auch zu den volatilen Funktionen gehören. Das Kalendarium ist in diesem Fall aber eher als statisch anzusehen. Auch bei den Feiertagen wird es nicht so oft zu Änderungen kommen, das es einen Benefit bringt.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#54
Hallo Klaus-Dieter,

ich hab's mal mit 100 Einträgen getestet. Das Einfärben per VBA ist da flotter.
Dann wäre es so:
Code:
Private Sub Worksheet_Activate()
    Dim lngZeile As Long
    Dim lngZiZeile As Long
    Dim lngStSp As Variant
    Dim lngZiSp As Variant
    Dim lngFarbZeile As Variant
    Dim lngSpalte As Long
    Dim varHund$, varKatze$, arrH(), arrK()
    Rows("4:" & Tabelle1.Range("A4").End(xlDown).Row).Delete
    Cells(2, 2) = "Anzahl"
    Cells(3, 2) = "Anzahl"
    Cells(2, 3) = "Hunde"
    Cells(3, 3) = "Katzen"
    For lngZeile = 5 To Tabelle1.Range("A4").End(xlDown).Row
        lngFarbZeile = Application.Match(Tabelle1.Cells(lngZeile, 3), Tabelle2.Columns(1), 0)
        lngZiZeile = Range("B" & Rows.Count).End(xlUp).Row + 1
        Cells(lngZiZeile, 1) = Tabelle1.Cells(lngZeile, 1) & "-" & Tabelle1.Cells(lngZeile, 3)
        Cells(lngZiZeile, 2) = Tabelle1.Cells(lngZeile, 4)
        Cells(lngZiZeile, 3) = Tabelle1.Cells(lngZeile, 5)
        lngStSp = Application.Match(Tabelle1.Cells(lngZeile, 14), Rows(1), 0)
        lngZiSp = Application.Match(Tabelle1.Cells(lngZeile, 15), Rows(1), 0)
        If Tabelle1.Cells(lngZeile, 13) = "Hund" Then
            If Len(varHund) < 220 Then  ' Es sind max 255 Zeichen möglich
                varHund = varHund & Replace(Cells(lngZiZeile, lngStSp).Address, "$", "") & ":" & Replace(Cells(lngZiZeile, lngZiSp).Address, "$", "") & ","
            Else
                Range(Left(varHund, Len(varHund) - 1)) = "H"
                Range(Left(varHund, Len(varHund) - 1)).HorizontalAlignment = xlCenter
               
                varHund = ""
            End If
            Range(Cells(lngZiZeile, lngStSp), Cells(lngZiZeile, lngZiSp)).Interior.Color = Tabelle2.Cells(lngFarbZeile, 9).Interior.Color
        ElseIf Tabelle1.Cells(lngZeile, 13) = "Katze" Then
            If Len(varKatze) < 220 Then
                varKatze = varKatze & Replace(Cells(lngZiZeile, lngStSp).Address, "$", "") & ":" & Replace(Cells(lngZiZeile, lngZiSp).Address, "$", "") & ","
            Else
                Range(Left(varKatze, Len(varKatze) - 1)) = "K"
                Range(Left(varKatze, Len(varKatze) - 1)).HorizontalAlignment = xlCenter
                varKatze = ""
            End If
            Range(Cells(lngZiZeile, lngStSp), Cells(lngZiZeile, lngZiSp)).Interior.Color = Tabelle2.Cells(lngFarbZeile, 9).Interior.Color
        End If
    Next lngZeile
    If varHund <> "" Then
        Range(Left(varHund, Len(varHund) - 1)) = "H"
        Range(Left(varHund, Len(varHund) - 1)).HorizontalAlignment = xlCenter
    End If
    If varKatze <> "" Then
        Range(Left(varKatze, Len(varKatze) - 1)) = "K"
        Range(Left(varKatze, Len(varKatze) - 1)).HorizontalAlignment = xlCenter
    End If
    ReDim arrH(1 To 1, 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 3)
    arrK = arrH
    For lngSpalte = 4 To Cells(1, Columns.Count).End(xlToLeft).Column
        arrH(1, lngSpalte - 3) = Application.WorksheetFunction.CountIf(Range(Cells(4, lngSpalte), Cells(lngZiZeile, lngSpalte)), "H")
        arrK(1, lngSpalte - 3) = Application.WorksheetFunction.CountIf(Range(Cells(4, lngSpalte), Cells(lngZiZeile, lngSpalte)), "K")
    Next lngSpalte
    Cells(2, 4).Resize(1, UBound(arrH, 2)) = arrH
    Cells(3, 4).Resize(1, UBound(arrK, 2)) = arrK
End Sub
der schnellste Weg wäre ohne die Einfärberei. Zumal bei einem größerem Kundenstamm irgendwann die Farben unübersichtlich werden.

Gruß Uwe
Antworten Top
#55
Hallo Claudia und Klaus-Dieter,

anbei ein Vorschlag, wie das Ganze auch bei größeren Datenmengen in der Timline flott läuft.
Ich bin etwas anders vorgegangen.
Das Blockweise Schreiben erfolgt nach Kunden. Dies ermöglicht auch die Farbe im Block mit zu übergeben.
Die einzige Bremse ist nur noch .CountIf

Ins Modul des Tabellenblattes "Übersicht":
Code:
Option Explicit
    Private Const Startzeile As Long = 3

Private Sub Worksheet_Activate()
    Dim i&, j&, arrKD(), arrHotel(), tmp(), datSart As Variant, datEnde As Variant, iZeile&, varHund$, varKatze$, arrH(), arrK()
    With Tabelle2.ListObjects(1).DataBodyRange
        arrKD = Application.Index(.Value, Evaluate("row(1:" & .Rows.Count & ")"), Array(1, 2, 3, 9))
        For i = 1 To UBound(arrKD)
            arrKD(i, 4) = .Cells(i, 9).Interior.Color
        Next i
    End With
    With Tabelle1.ListObjects(1).DataBodyRange
        arrHotel = Application.Index(.Value, Evaluate("row(1:" & .Rows.Count & ")"), Array(1, 3, 4, 5, 11, 13, 14, 15))
    End With
    Rows("4:" & Tabelle4.Range("A4").End(xlDown).Row).Delete
    Cells(2, 2) = "Anzahl"
    Cells(3, 2) = "Anzahl"
    Cells(2, 3) = "Hunde"
    Cells(3, 3) = "Katzen"
    With Tabelle1.ListObjects(1).DataBodyRange
        tmp = Application.Index(.Value, Evaluate("row(1:" & .Rows.Count & ")"), Array(1, 4, 5))
    End With
    Cells(Startzeile + 1, 1).Resize(UBound(tmp, 1), UBound(tmp, 2)) = tmp
    For i = 1 To UBound(arrKD)
        For j = 1 To UBound(arrHotel)
            If arrKD(i, 1) = arrHotel(j, 2) Then
                datSart = Application.Match(CLng(CDate(arrHotel(j, 7))), Rows(1), 0)
                datEnde = Application.Match(CLng(CDate(arrHotel(j, 8))), Rows(1), 0)
                If arrHotel(j, 6) = "Hund" Then
                    If Len(varHund) < 220 Then
                        varHund = varHund & Replace(Cells(j + Startzeile, datSart).Address, "$", "") & ":" & Replace(Cells(j + Startzeile, datEnde).Address, "$", "") & ","
                    Else
                        Range(Left(varHund, Len(varHund) - 1)) = "H"
                        Range(Left(varHund, Len(varHund) - 1)).HorizontalAlignment = xlCenter
                        Range(Left(varHund, Len(varHund) - 1)).Interior.Color = arrKD(i, 4)
                        varHund = ""
                    End If
                ElseIf arrHotel(j, 6) = "Katze" Then
                    If Len(varKatze) < 220 Then
                        varKatze = varKatze & Replace(Cells(j + Startzeile, datSart).Address, "$", "") & ":" & Replace(Cells(j + Startzeile, datEnde).Address, "$", "") & ","
                    Else
                        Range(Left(varKatze, Len(varKatze) - 1)) = "H"
                        Range(Left(varKatze, Len(varKatze) - 1)).HorizontalAlignment = xlCenter
                        Range(Left(varKatze, Len(varKatze) - 1)).Interior.Color = arrKD(i, 4)
                        varKatze = ""
                    End If
                End If
            End If
        Next j
        If varHund <> "" Then
            Range(Left(varHund, Len(varHund) - 1)) = "H"
            Range(Left(varHund, Len(varHund) - 1)).HorizontalAlignment = xlCenter
            Range(Left(varHund, Len(varHund) - 1)).Interior.Color = arrKD(i, 4)
            varHund = ""
        ElseIf varKatze <> "" Then
            Range(Left(varKatze, Len(varKatze) - 1)) = "K"
            Range(Left(varKatze, Len(varKatze) - 1)).HorizontalAlignment = xlCenter
            Range(Left(varKatze, Len(varKatze) - 1)).Interior.Color = arrKD(i, 4)
            varKatze = ""
        End If
    Next i
    ReDim arrH(1 To 1, 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 3)
    arrK = arrH
    iZeile = Startzeile + UBound(arrHotel)
    For i = 4 To Cells(1, Columns.Count).End(xlToLeft).Column
        arrH(1, i - 3) = Application.WorksheetFunction.CountIf(Range(Cells(4, i), Cells(iZeile, i)), "H")
        arrK(1, i - 3) = Application.WorksheetFunction.CountIf(Range(Cells(4, i), Cells(iZeile, i)), "K")
    Next i
    Cells(2, 4).Resize(1, UBound(arrH, 2)) = arrH
    Cells(3, 4).Resize(1, UBound(arrK, 2)) = arrK
End Sub
Das ist der zügigste Lösungsansatz, die mir eingefallen ist.
 
Gruß Uwe
Antworten Top
#56
Hallo Miteinander,
 
anbei mal noch mit Fehlerbehandlung und CountIf in die Schranken gewiesen. 
Schneller ist es zumindest mit meinem Kenntnisstand nicht hinzubekommen
Code:
Option Explicit
    Private Const Startzeile As Long = 3

Private Sub Worksheet_Activate()
    Dim i&, j&, arrKD(), arrHotel(), tmp(), datSart As Variant, datEnde As Variant, iZeile&, iSpalte&, varHund$, varKatze$, arrH(), arrK()
    If Tabelle1.ListObjects(1).DataBodyRange Is Nothing Or Tabelle2.ListObjects(1).DataBodyRange Is Nothing Then
        Rows("2:" & Tabelle4.Range("A4").End(xlDown).Row).Delete
        Cells(2, 2) = "Anzahl"
        Cells(3, 2) = "Anzahl"
        Cells(2, 3) = "Hunde"
        Cells(3, 3) = "Katzen"
        Exit Sub
    End If
    Application.ScreenUpdating = False
    With Tabelle2.ListObjects(1).DataBodyRange
        arrKD = Application.Index(.Value, Evaluate("row(1:" & .Rows.Count & ")"), Array(1, 2, 3, 9))
        For i = 1 To UBound(arrKD)
            arrKD(i, 4) = .Cells(i, 9).Interior.Color
        Next i
    End With
    With Tabelle1.ListObjects(1).DataBodyRange
        arrHotel = Application.Index(.Value, Evaluate("row(1:" & .Rows.Count & ")"), Array(1, 3, 4, 5, 11, 13, 14, 15))
    End With
    Rows("4:" & Tabelle4.Range("A4").End(xlDown).Row).Delete
    Cells(2, 2) = "Anzahl"
    Cells(3, 2) = "Anzahl"
    Cells(2, 3) = "Hunde"
    Cells(3, 3) = "Katzen"
    With Tabelle1.ListObjects(1).DataBodyRange
        tmp = Application.Index(.Value, Evaluate("row(1:" & .Rows.Count & ")"), Array(1, 4, 5))
    End With
    Cells(Startzeile + 1, 1).Resize(UBound(tmp, 1), UBound(tmp, 2)) = tmp
    For i = 1 To UBound(arrKD)
        For j = 1 To UBound(arrHotel)
            If arrKD(i, 1) = arrHotel(j, 2) Then
                datSart = Application.Match(CLng(CDate(arrHotel(j, 7))), Rows(1), 0)
                datEnde = Application.Match(CLng(CDate(arrHotel(j, 8))), Rows(1), 0)
                If arrHotel(j, 6) = "Hund" Then
                    If Len(varHund) < 220 Then
                        varHund = varHund & Replace(Cells(j + Startzeile, datSart).Address, "$", "") & ":" & Replace(Cells(j + Startzeile, datEnde).Address, "$", "") & ","
                    Else
                        Range(Left(varHund, Len(varHund) - 1)) = "H"
                        Range(Left(varHund, Len(varHund) - 1)).HorizontalAlignment = xlCenter
                        Range(Left(varHund, Len(varHund) - 1)).Interior.Color = arrKD(i, 4)
                        varHund = ""
                    End If
                ElseIf arrHotel(j, 6) = "Katze" Then
                    If Len(varKatze) < 220 Then
                        varKatze = varKatze & Replace(Cells(j + Startzeile, datSart).Address, "$", "") & ":" & Replace(Cells(j + Startzeile, datEnde).Address, "$", "") & ","
                    Else
                        Range(Left(varKatze, Len(varKatze) - 1)) = "H"
                        Range(Left(varKatze, Len(varKatze) - 1)).HorizontalAlignment = xlCenter
                        Range(Left(varKatze, Len(varKatze) - 1)).Interior.Color = arrKD(i, 4)
                        varKatze = ""
                    End If
                End If
            End If
        Next j
        If varHund <> "" Then
            Range(Left(varHund, Len(varHund) - 1)) = "H"
            Range(Left(varHund, Len(varHund) - 1)).HorizontalAlignment = xlCenter
            Range(Left(varHund, Len(varHund) - 1)).Interior.Color = arrKD(i, 4)
            varHund = ""
        ElseIf varKatze <> "" Then
            Range(Left(varKatze, Len(varKatze) - 1)) = "K"
            Range(Left(varKatze, Len(varKatze) - 1)).HorizontalAlignment = xlCenter
            Range(Left(varKatze, Len(varKatze) - 1)).Interior.Color = arrKD(i, 4)
            varKatze = ""
        End If
    Next i
    ReDim arrH(1 To 1, 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 3)
    arrK = arrH
    iZeile = Startzeile + UBound(arrHotel)
    For i = Startzeile + 1 To iZeile
        If Cells(i, Columns.Count).End(xlToLeft).Column > iSpalte Then iSpalte = Cells(i, Columns.Count).End(xlToLeft).Column
    Next i
    For i = 4 To iSpalte
        arrH(1, i - 3) = Application.WorksheetFunction.CountIf(Range(Cells(4, i), Cells(iZeile, i)), "H")
        arrK(1, i - 3) = Application.WorksheetFunction.CountIf(Range(Cells(4, i), Cells(iZeile, i)), "K")
    Next i
    Cells(2, 4).Resize(1, UBound(arrH, 2)) = arrH
    Cells(3, 4).Resize(1, UBound(arrK, 2)) = arrK
    Application.ScreenUpdating = True
End Sub

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Egon12 für diesen Beitrag:
  • Christo
Antworten Top
#57
Hallo Egon12,
hallo Klaus-Dieter.....,

was die Geschichte VBA anbetrifft, da bin ich völlig raus, da ich ja.....wie eingangs schon mal da und da erwähnt habe.....völliger Anfänger bin. Aber auch hier wieder erst einmal herzlichen Dank, dass
ihr euch hier soviel Mühe gibt. Ich hatte letztens mal noch mein kleines Problem mit dem Rechnungsprogramm angesprochen. Und ich hatte hier auch mal angeführt, dass ich im Netz etwas gefunden habe.
Ich stelle die Datei hier noch einmal hinein und frage ganz lieb, ob man dieses Rechnungsprogramm vielleiht mit in unsere Datei mit einbinden kann.


Lieben Gruß 
Claudia Blush Blush Blush


Angehängte Dateien
.xlsx   Erstellung Angebot u. Rechnung.xlsx (Größe: 83,67 KB / Downloads: 2)
....lieben Gruß

Claudia
Antworten Top
#58
Mal eine Bemerkung zu deinem Vorhaben. Da du die Hundebetreuung und Rechnungserstellung ja auf 2 PCs Bedienen willst, ist dir wohl klar, dass du dir dazu eine Serverumgebung aufbauen musst, da die Daten nur auf einem von beiden PCs gemeinsam nutzbaren Laufwerk liegen dürfen. 

Da dürfte es wohl durchaus relativ unkomplizierte Lösungen geben, muss aber beachtet werden.
[-] Folgende(r) 1 Nutzer sagt Danke an ws-53 für diesen Beitrag:
  • Christo
Antworten Top
#59
Hallo Claudia,
 
was Rechnungen in Excel schreiben betrifft kann man dir nur raten deinem Steuerberater zu konsultieren, ob dein Finanzamt dies zulässt und wenn ja unter welchen Bedingungen.
Vorher macht es wenig Sinn sich im Zusammenhang mit Excel damit auseinanderzusetzen.
 
Gruß Uwe
Antworten Top
#60
Hallo....

Lieben Dank für deinen Hinweis.
....lieben Gruß

Claudia
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste