AW: Spalten suche
18.03.2022 15:38:50
UweD
Hallo
es war doch einiges aufwändiger als gedacht.
Den Rest musst du alleine machen
LG UweD
In den Codebereich von "Diese Arbeitsmappe"
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error GoTo Fehler
Const APPNAME = "Workbook_SheetChange"
Dim rngU As String, TbU As Worksheet, rngS As Range, Z, WF
Dim SP As Integer, NName As String, Akt As String, Zeile As Integer, Spalte As Integer
Dim Arr, i As Integer, rTmp As Range, Altwert As String
Set TbU = Sheets("Übersicht")
Set rngS = TbU.Range("D2:O2")
rngU = "D4:J70"
SP = 3 'Spalte mit Name
Set WF = WorksheetFunction
Select Case Sh.Name
Case 1 To 53 'Nur innerhalb dieser Blätter
If Not Intersect(Target, Sh.Range(rngU)) Is Nothing Then 'nur im festgelegten Bereich
For Each Z In Target.Cells
NName = Sh.Cells(Z.Row, SP) ' Name des Mitarbeiters
Akt = Z.Value 'Aktion
If Akt = "" Then
'wenn Aktion entfernt wird
With Application
.EnableEvents = False
.Undo
Altwert = Z.Value
If Altwert "" Then
Akt = Altwert
Else
Exit Sub
End If
.Undo
.EnableEvents = True
End With
End If
Spalte = WF.CountIf(rngS, Akt) 'ist Aktion vorhanden
If Spalte > 0 Then
Spalte = WF.Match(Akt, rngS, 0)
Zeile = WF.CountIf(TbU.Columns(SP), NName) 'ist Name vorhanden
If Zeile > 0 Then
Zeile = WF.Match(NName, TbU.Columns(SP), 0) 'in welcher Zeile
ReDim Arr(1 To rngS.Columns.Count)
For i = 1 To 53 'alle KWs durchlaufen
If Not IsError(Evaluate(CStr(i) & "!A1")) Then 'Blatt vorhanden?
'alle Tage der Woche durchzählen und in Array merken
Set rTmp = Intersect(Sheets(CStr(i)).Range("D:J"), Sheets(CStr(i)).Rows(Zeile))
Arr(Spalte) = Arr(Spalte) + WF.CountIf(rTmp, Akt)
End If
Next
'zurückschreiben in Zieltabelle
Application.EnableEvents = False
Arr(Spalte) = IIf(Arr(Spalte) = 0, "", Arr(Spalte)) 'Null duch leer ersetzen
rngS.Offset(Zeile - 2, Spalte - 1).Resize(1, 1) = Arr(Spalte)
Application.EnableEvents = True
Else
MsgBox "Fehler: '" & NName & "' nicht gefunden"
End If
Else
MsgBox Akt & ": nicht gefunden in " & TbU.Name
End If
Next
End If
End Select
'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True
If Err.Number 0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
& "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub
https://www.herber.de/bbs/user/151849.xlsm