AW: Kommentare zählen
15.01.2021 20:32:41
Yal
Moin zusammen,
ganz einfach in der Idee, ganz kompliziert in der Ausführung: aus Anfang- und Endzelle einen Bereich bestehend aus mehrere Bereiche erzeugen und darin die Kommentar zaehlen.
War lustig. Ich hatte noch nie mit "Areas" gearbeitet (*).
Sub Kommentare_zaehlen()
Dim Bereich As Range
Set Bereich = RangeGesamt([Tabelle1].Cells(15, 7), [Tabelle1].Cells(22, 4))
MsgBox ("Der Bereich " & BereichAdresse_auflisten(Bereich) & " enthält " & Komm_count( _
Bereich) & " Kommentare")
End Sub
Function RangeGesamt(R1 As Range, R2 As Range) As Range
Dim R As Range
Dim Rx As Range
If R1.Row = R2.Row Then ' gleiche Zeile
Set RangeGesamt = Range(R1, R2)
Else
If R1.Row > R2.Row Then 'Umgekehrt: bei nächster Gelegenheit, bitte wenden.
Set R = R1
Set R1 = R2
Set R2 = R
End If
Set R = RangeRestVomZeile(R1)
Set Rx = RangeDazwischen(R1, R2)
If Not Rx Is Nothing Then Set R = Union(R, Rx)
Set Rx = RangeAnfangVonZeile(R2)
If Not Rx Is Nothing Then Set R = Union(R, Rx)
Set RangeGesamt = R
End If
End Function
Function RangeRestVomZeile(R As Range) As Range
Set RangeRestVomZeile = Intersect(R.Resize(1, 200), R.CurrentRegion)
End Function
Function RangeAnfangVonZeile(R As Range) As Range
Set RangeAnfangVonZeile = Intersect(Range(Cells(R.Row, 1), R), R.CurrentRegion)
End Function
Function RangeDazwischen(R1 As Range, R2 As Range) As Range
If (R2.Row - R1.Row) > 1 Then
Set RangeDazwischen = Intersect(Range(R1.Offset(1, 0).EntireRow, R2.Offset(-1, 0). _
EntireRow), Range(R1.CurrentRegion, R2.CurrentRegion))
ElseIf (R2.Row - R1.Row)
Zum Testzweck ist vielleicht folgendes hilfreich
Sub Test()
Dim C1, C2, R1, R2, i
Dim Rn1 As Range
Dim Rn2 As Range
Dim R As Range
Randomize
For i = 1 To 10
C1 = CInt(4 + Rnd() * 21)
C2 = CInt(4 + Rnd() * 21)
R1 = CInt(13 + Rnd() * 11)
R2 = CInt(13 + Rnd() * 11)
Set Rn1 = [Tabelle1].Cells(R1, C1)
Set Rn2 = [Tabelle1].Cells(R2, C2)
Set R = RangeGesamt(Rn1, Rn2)
Debug.Print String(23, "-")
Debug.Print Rn1.Address(False, False) & ":" & Rn2.Address(False, False), R.Cells.Count & _
" Cells"
Debug.Print BereichAdresse_auflisten(R)
Debug.Print Komm_count(R)
Next
End Sub
(*): liegt vielleicht auch daran, dass bei einem korrekten Trennung der Datenhaltung und der Daten-Präsentation solche Spagat nicht braucht.
Viel Spass damit
Yal