Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Zeile und Spalte tauschen
30.05.2016 16:27:16
Ahmadi
Hallo Liebe Excel-Profies!
Ich bräuchte eure Hilfe.
Ich habe einen Wochen-Dienstplan erstellt. obere Zeile das Datum für eine Woche. Linke Spalte die Uhrzeiten, Also die Dienste und im dazwischen liegenden Feld sind die Mitarbeiter eingetragen worden. Wie kann eine zweite Tabelle daraus entstehen und zwar so, dass die Mitarbeiter in der Linken Spalte stehen und die Uhrzeiten im Feld.
Ich habe es mit Wenn, Sverweis und Wverweis versucht. Bin aber gescheitert.
Hier ist die Tabelle
https://www.herber.de/bbs/user/105871.xls
Danke im Voraus
LG
Ahmadi

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit INDEX() und VERGLEICH() ...
30.05.2016 16:34:43
...
Hallo Ahmadi,
... in C19 folgende Formel: =WENNFEHLER(INDEX($B:$B;VERGLEICH($B19;C$1:C$15;));"") und diese nach rechts und unten ziehend kopieren.
Gruß Werner
.. , - ...

Frage an Werner (neopa)
30.05.2016 17:00:39
Luschi
Hallo Werner,
ich verwende seit Jahren eine Lösung, die immer noch die Bereich.Verschieben()-Funktion beinhaltet.
Jetzt habe ich eine selbe Problemstellung mit der BV-Fkt. im I-Net gefunden; siehe:
http://www.computerwissen.de/office/excel/artikel/wie-sie-datensaetze-nach-ihren-kriterien-zaehlen.html?rss2snl=1&cHash=44406bae2423ee120c10d32680795efe
Hier mein Beispiel dazu: https://www.herber.de/bbs/user/105876.xlsx
- in Spalte 'B' wird gefiltert
- und in Spalte 'C' werden die entsprechenden Statusinformationen gezählt
Mir hat Deine Lösung zum obigen Fall gut gefallen und da dachte ich, Du hast noch Reserven!?!
Gruß von Luschi
aus klein-Paris

Anzeige
AW: sind völlig "verschiedene Paar Schuhe" ...
30.05.2016 17:16:54
...
Hallo Luschi,
... der Fragestelle hier wollte eine einfache Umgruppierung seiner Daten. In Deiner Datei geht es um die Auswertung von Datensätzen die gefiltert sein können. Um dies ohne Hilfsspalte auszuwerten der Einsatz einer volatilen Funktion wie BEREICH.VERSCHIEBEN() oder alternativ auch INDIREKT() momentan mW alternativlos. Um die volatilen Fkt. zu vermeiden bietet sich dann nur eine Hilfsspalte an, wo eine zeilenweise Überprüfung des jeweiligen "Filterzustandes" vorgenommen wird und dann die Daten und diese Hilfsspaltendaten mit SUMMENPRODUKT() oder ZÄHLENWENNS() ausgewertet wird.
Gruß Werner
.. , - ...

Anzeige
Obwohl die Frage nicht an mich gerichtet ist, ...
31.05.2016 01:27:30
Luc:-?
…Luschi & Werner,
schalte ich mich hier mal ein, weil das ein typisches Bsp dafür ist, wie halsbrecherisch umständlich man uU auch im „AGGREGAT-Zeitalter“ noch vorgehen muss, um relativ einfache Fragestellungen zu lösen. Genau wie MS uns eine einfache Fkt zur DatenBereitstellung über mehrere Blätter verweigert, diesen Mechanismus aber in Fertig­Produkte wie bspw SUMME eingebaut hat, tut es das auch im Falle von unzusammen­hängenden Bereichen, die INDEX zwar verarbeiten, aber nur sehr begrenzt auch darstellen und schon gar nicht erzeugen kann. Eine Fkt, die das kann, fehlt einfach im Standard­Angebot!
Vielleicht kennt ihr ja beide meine UDF AggregateXk, die auch Datenfelder verarbeiten kann und somit den umständlichen Weg über die Arg1-Fktt 14 & 15 vermeidet, wenn es sich um solche handelt. Die nutzt hier aber nichts, weil ja ausgeblendete Zeilen im Ergebnis berücksichtigt wdn sollen, weshalb unbedingt ZellBezüge benötigt wdn. Also würde sich eine Fkt anbieten, die die in den dargestellten Fmln vorangestellte General­Auswahl trifft und das Ergebnis in Form eines unzusammen­hängenden Bereichs wiedergibt, denn AGGREGAT kann so etwas verarbeiten.
Da Xl eine solche Fkt nicht kennt, hatte ich eine UDF geschrieben, die genau das tut, wodurch folgd Fml möglich wird: =AGGREGAT(3;7;ChooseIf(C$4:C$18;;A21))
Diese UDF ist auch nicht volatil, was hierbei auch nicht erforderlich wäre, denn nicht-volatile Fktt reagieren auch auf Filter­Auswahl­Änderungen, da es sich hierbei idR um Änderungen der Quell­Daten handelt. Da die UDF sehr umfangreich und auch noch nicht ganz fertig ist, habe ich sie bisher nicht veröffentlicht.
Man kann mit AGGREGAT aber auch eine andere UDF einsetzen (als MatrixFml!), die ich am Schluss nochmals einstelle, weil ich nicht sicher bin, ob sie in der hier benötigten Version1.3 schon mal veröffentlicht wurde; hier dann ebenfalls nicht-volatil:
{=AGGREGAT(3;7;NoErrRange(C$4:C$18;;C$4:C$18=A21))}
Man kann aber ggf auch auf AGGREGAT verzichten, wenn man zusätzlich zur MatrixFmlForm Volatilität in Kauf nimmt (die hängt hier vom 2.Argument ab, damit die UDF auch auf ausgeblendete Spalten per [F9] bzw Edit-Klick reagieren kann):
{=ANZAHL(NoErrRange(A$4:A$18;1;C$4:C$18=A21))}
Rem Erzeugt ggf 1 unzusammenhängd Bereich (MehrfachAuswahl) aus Bezug lt Arg1
'   ohne darin uU enthaltene FehlerWerte; hilfreich b.Fktt, d.nur Bereiche o.
'   FWerte, aber auch unzusammhängende verarbeiten können, bspw TEILERGEBNIS;
'   Datenfeld-verarbeitde Fktt kommen so idR ohne MxFmlForm aus (außer b.Arg3
'   als DFeld); nur 1 Zelle als Arg1 kn ggf F-Wert liefern, b.VektorForm wird
'   auch b.solitärer FktsVerwendg in (Mx-)Fmln ggf vollständ Ergebnis gelieft
'   (außer uU b.entstandm unzusammhgd Bereich), b.MatrixForm könn d.Werte idR
'   m.INDEX/Var2 aus d.unzusammhgd ErgebnBereich gelesen wdn; m.Arg2=WAHR/0
'   wird d.Ergebn auf sichtbare Zellen beschränkt, wobei dies b.Ausblenden d.
'   Zelle m.der d.Fkt enthaltenden Fml dort Anzeige d.StandardFWerts bewirkt;
'   in Arg3 kn auf 1 Bereich m.WahrhWerten gleicher Größe wie Arg1 vwiesen or
'   1 glchgroß Datenfeld (MxKonst oder Ausdruck) angegeben wdn, wird 0/FALSCH
'   angegeben, macht Arg2=1/WAHR d.Fkt nur volatil!
'   Achtung! Fkt benött b.ggf verlangter AutoAktualisierg d.NichtBerücksichtg
'   ausgeblendeter Zellen d.Auslösg d.Neuberechng ([F9] bzw Edit 1er beliebig
'   Zelle - v.Arg2 abhängig: WAHR/0 ->partielle Volatilität zur Erzielg dss
'   speziellen Verhaltens; Fkt verwendet Enumeration cxTriState (anlegen)!
'   Vs1.3 -LSr.CyWorXxl -cd:20150710 -1pub:20150721herber(1.2) -lupd:20151114t
Function NoErrRange(Bereich As Range, Optional ByVal nurVisZ As Boolean, _
Optional ByVal ZusKrit) As Range
Dim cct As Long, cif As Long, cix As Long, rct As Long, rix As Long, rif As Long, _
tix As Integer, hasCrits As cxTriState, tmpR(2) As Range, xZ As Range, zK As Range
Application.Volatile nurVisZ: On Error GoTo ex
If IsMissing(ZusKrit) Then ZusKrit = True
With Bereich
If .Cells.Count = 1 Then
If IsError(Bereich) Then Exit Function
If nurVisZ Then
If Not (.EntireRow.Hidden Or .EntireColumn.Hidden) Then _
Set tmpR(0) = Bereich
Else: Set tmpR(0) = Bereich
End If
If Not IsArray(ZusKrit) Then
If CBool(ZusKrit) Then Set NoErrRange = tmpR(0)
Else: Set NoErrRange = tmpR(0)
End If
Set tmpR(0) = Nothing: Exit Function
End If
End With
hasCrits = 2 * CInt(nurVisZ) Xor CInt(IsArray(ZusKrit))
If CBool(hasCrits Mod 2) Then
If TypeName(ZusKrit) = "Range" Then
Set zK = ZusKrit: cct = zK.Columns.Count: rct = zK.Rows.Count: cif = 1: rif = 1
Else: On Error Resume Next
If IsError(LBound(ZusKrit, 2)) Then
If Bereich.Columns.Count = 1 Then _
ZusKrit = WorksheetFunction.Transpose(ZusKrit)
ElseIf Bereich.Rows.Count = 1 Then
ZusKrit = WorksheetFunction.Transpose(ZusKrit)
End If
If IsError(LBound(ZusKrit, 2)) Then
On Error GoTo ex: cif = LBound(ZusKrit)
cct = UBound(ZusKrit) + 1 - cif: rct = 1
Else: On Error GoTo ex
rif = LBound(ZusKrit, 1): rct = UBound(ZusKrit, 1) + 1 - rif
cif = LBound(ZusKrit, 2): cct = UBound(ZusKrit, 2) + 1 - cif
End If
End If
On Abs(Bereich.Columns.Count  cct Or Bereich.Rows.Count  rct) GoTo ex
Else: If Not CBool(ZusKrit) Then hasCrits = cxFalse
End If
For Each xZ In Bereich
If Not IsError(xZ) Then
Select Case hasCrits
Case cxCTrue
GoSub rt: GoSub vz
If Not (tmpR(1) Is Nothing Or tmpR(2) Is Nothing) Then Set tmpR(0) = tmpR(1)
Case cxFalse: Set tmpR(0) = xZ
Case cxTrue
rt:             If Not zK Is Nothing Then
If CBool(zK.Cells(rix + rif, cix + cif)) Then Set tmpR(1) = xZ
ElseIf rct = 1 Then
If CBool(ZusKrit(cix + cif)) Then Set tmpR(1) = xZ
ElseIf CBool(ZusKrit(rix + rif, cix + cif)) Then
Set tmpR(1) = xZ
End If
If hasCrits = cxCTrue Then Return Else Set tmpR(0) = tmpR(1)
Case cxAsUsed
vz:             If Not (xZ.EntireRow.Hidden Or _
xZ.EntireColumn.Hidden) Then Set tmpR(2) = xZ
If hasCrits = cxCTrue Then Return Else Set tmpR(0) = tmpR(2)
End Select
If Not tmpR(0) Is Nothing Then
If Not NoErrRange Is Nothing Then
Set NoErrRange = Union(NoErrRange, tmpR(0))
Else: Set NoErrRange = tmpR(0)
End If
End If
End If
If CBool(hasCrits Mod 2) Then _
cix = (cix + 1) Mod cct: rix = rix - CInt(cix = 0)
For tix = LBound(tmpR) To UBound(tmpR): Set tmpR(tix) = Nothing: Next tix
Next xZ
ex: Set zK = Nothing
End Function
Morrn, Luc :-?
Besser informiert mit …

Anzeige
AW: schon interessant ...
31.05.2016 15:15:22
...
Hallo Luc,
... doch habe ich die Erfahrung gesammelt, dass die allermeisten Eintags-Exceluser VBA, Matrixformeln und komplizierte Formeln, wie ich sie auch des öfteren erstelle, ablehnen. Derartige User lehnen demzufolge auch UDFs ab, wenn sie diese nicht sofort wie eine Standard-Funktion einsetzen können.
Meine Hilfsangebote beschränk(t)en sich deshalb im Wesentlichen auf die von Standardexcel (ohne VBA) bereitgestellten Funktionalitäten. Doch versuche ich dabei natürlich nicht meine Freude/Erfüllung an der Entwicklung von Formeln zu unterdrücken genauso wie Du an der von spez./komplexen UDFs.
Mit den Matrixfunktion(alität)sformeln habe ich einen Weg gefunden, der einerseits den teils niedrigen Grenzschwellen bestimmter Excelhilfesucher etwas näher kommt und ich mich anderseits auch "austoben" kann. Mit Deinen UDFs wäre da sicherlich für mich noch viel mehr möglich aber momentan würde ich darauf nur hinweisen können, wenn es mir denn im geeignet Moment auch einfallen sollte.
Jetzt werde ich es erst einmal bunkern.
Dir noch einen schönen Tag.
Gruß Werner
.. , - ...

Anzeige
Ja, dir auch, Werner, und noch ein Nachtrag ...
31.05.2016 16:28:40
Luc:-?
…für den Bunker bzw alle Anderen, denn du hast die Enumeration ja sicher schon:
Public Enum cxTriState: cxAsUsed = -2: cxTrue: cxFalse: cxCTrue: End Enum
Muss am Anfang eines (idR allgemeinen) Moduls stehen, gleich nach Option Explicit bzw anderen Options bei den GlobalVariablen und nur 1× pro ProjektMappe.
Ansonsten kommt eine große Mehrheit sicher mit einigen wenigen Xl-Fktt aus, weshalb das ja auch kein Xl-EntwicklungsSchwerpkt ist…
Gruß, Luc :-?

AW: Obwohl die Frage nicht an mich gerichtet ist, ...
31.05.2016 17:14:07
Luschi
Hallo Luc,
ich bekomme Deine UDF (noch) nicht zum laufen, da es hier hakt:
Case cxCTrue
Habe folgende Enumeration hinzugefügt aus:
https://www.herber.de/forum/archiv/1452to1456/t1454602.htm
Public Enum cxTriState
cxAsUsed = -2
cxRTrue
cxFalse
cxPTrue
End Enum
Doch da fehlt 'cxCTrue' in der Auflistung.
Gruß von Luschi
aus klein-Paris

Anzeige
Habe ich inzwischen nachgereicht, ...
31.05.2016 23:57:49
Luc:-?
…Luschi,
hatte ich vergessen mitzuliefern, zumal ich die verschiedenen TriState-Enums inzwischen alle stärker an den MSO- bzw VB-Standard angepasst habe und da hat +1 iaR die Bezeichnung ~CTrue, was immer das C auch bedeuten mag.
Aber immerhin hattest du die ja gefunden und es steht dir frei, cxCTrue in CxPTrue zu ändern… ;-)
Gruß, Luc :-?

AW: Habe ich inzwischen nachgereicht, ...
01.06.2016 16:49:04
Luschi
Hallo Luc,
habe die Funktionion jetzt mal ausführlicher getestet. Werde sie für mein Beispiel aber so nicht einsetzen, da
- es sie mir innerhalb von 'Aggregat(...)' nicht den den Abschluß mit Userbild
erspart
- in der Firma, wo das Beispiel eingesetzt werden soll, Sprungmarken mit 'GoTO' im Vba-Code
  verpöhnt sind
- die durch den Filter ausgeblendeten Zeilen erst durch die Aggregat-Funktion in der Berechnung
  unterdrückt werden
- habe sie aber erst mal im Wissenspeicher gebunkert
Gruß von Luschi
aus klein-Paris

Anzeige
Dazu (m)ein Kommentar, ...
02.06.2016 04:24:35
Luc:-?
…Luschi;
1. Zur MatrixFmlForm von NoErrRange innerhalb von AGGREGAT:
Die UDF erzeugt einen unzusammenhängenden Bereich, indem sie Zellen mit FehlerWerten innerhalb des als ihr HptArgument angegebenen Bereichs, sowie in Abhängigkeit von Arg2 ggf auch ausgeblendete Zellen und bei angegebenem Arg3 auch Zellen, zu denen Arg3 den korrespondierenden Wert FALSCH liefert, nicht berücksichtigt, d.h., sie fehlen dann vollständig, was die MatrixFmlForm erforderlich macht, damit die Xl-Steuerung auch alle so zusammen­gefassten ZellReferenzen berücksichtigt. Das ist eine normale Verhaltensweise von Xl, die in letzter Zeit zu oft und ohne wirkliche Einsicht in die Zusammenhänge quasi „dämonisiert“ wird. Da diese Form nur in ZellFmln des TabBlattes erforderlich ist, ist deren pauschale Ablehnung sinn- und zwecklos. Man beraubt sich damit nur eines wertvollen Werkzeugs.
Außerdem wird hier gezeigt, dass die MatrixFähigkeit solcher Fktt wie AGGREGAT und SUMMENPRODUKT auch ihre Grenzen hat, was meine früheren Analysen erneut bestätigt.
Der Vorteil der UDF ggüber Konstrukten unter Nutzung der KKLEINSTE- und KGRÖSSTE-Fktionalitäten von AGGREGAT ist, dass die ZellBezüge nicht verloren gehen und somit auch die FktsNrn 1…13 in Arg1 verwendet wdn können. Außerdem lassen sich nur so alle Möglichkeiten von AGGREGAT-Arg2 nutzen.
2. Hier frage ich mich, was denn so in dieser Firma und womit pgmmiert wird. Da es sich hier um Xl-VBA, eine spezielle Teilmenge einer normalen modernen PgmmierSprache handelt, ist nicht einzusehen, warum SprungBefehle verpönt sein sollen. Das scheint mir eher auf ein JungPgmmierer­Trauma bzgl sog Spaghetti-Codes und eine damit einhergehende ModeErscheinung, die auf halbgarem Halbwissen basiert, hinzudeuten. Ich verzichte doch nicht freiwillig auf Sprach­Möglich­keiten, um sie dann durch umständliche Umschreibungen oder - sehr viel schlimmer - Code-Dopplungen, grauenvoll für jede Fehlersuche, zu ersetzen! Außerdem kommen in der UDF nur Sprünge im Zusammenhang mit Fehlern (die ja angeblich nicht geächtet sind) und als UP-Sprünge vor.
Außerdem gehe ich nicht davon aus, dass in dieser Firma irgendwer in KI-Sprachen wie LISP oder PROLOG, in der es keine SprungBefehle gibt, pgmmiert. ;-]
3. Das ist in der Variante mit AGGREGAT so, aber auch nur deshalb möglich, weil die UDF ZellBezüge liefert (vgl 1.). Ein auf Arg1=14/15 basierendes AGGREGAT-Konstrukt könnte damit erst gar nicht dienen! In der volatilen Variante ohne AGGREGAT wdn ebenfalls ausgeblendete Zeilen/Spalten nicht berücksichtigt. Dazu ist aber die Volatilität erforderlich, denn andere Möglichkeiten hat man mit VBA dafür nicht ([F9] bzw Edit-Klick in beliebige - auch leere - Zelle ist dann auch noch erforderlich!).
4. Na, denn iss' ja jut! ;-)
Die UDF behandelt ja auch einen TeilAspekt mancher Xl-StandardFktt separat, wodurch man sie auch mit Fktt kombinieren kann, die diesen TeilAspekt nicht aufweisen, aber wenigstens unzusammen­hängende Bereiche verarbeiten können und ggf auch auf ZellBezüge beschränkt sind wie bspw TEILERGEBNIS.
Morrn, Luc :-?

Anzeige
AW: Dazu (m)ein Kommentar, ...
02.06.2016 11:29:05
Luschi
Hallo Luc,
mit Deinem Kommentar liegen wir beide doch auf der selben Längenwelle, aber es ist eben so:
- wer die Musik bestellt & bezahlt, darf auch bestimmen, welche Musik gespielt wird
- moderne objektorientierte Sprachen mit
  Try-Catch
AddressOf
Delegate
- anonyme Funktionen usw.
sind doch nur eine Umschreibung des uralten Goto-Befehls, gelten aber als 'modernes Konzept'
Ganz t(d)oll ?!? finde ich die Neuerungen in C# 6.0
- hier werden Konstukte angeboten, die der Compiler wieder richten muß, indem
- nur damit der Code-Schreiber ein paar Tasten weniger drücken muß
NaJa egal - mein vorgestelltes Beispiel mit Bereich.Verschieben(..) mit Matrix-Abschluß ist durch
den Code-Controller abgesegnet worden, weil die auch vom Excel-Papst Martin Althaus für gut befunden wurde - leider!!!
Gruß von Luschi
aus klein-Paris

Anzeige
Ich fühle mit dir, ...
03.06.2016 03:05:18
Luc:-?
…Luschi;
Leute, die sich auch hierbei in 1.Linie nach Moden richten, sind meist nicht wirklich kreative Pgmmierer, was sie dadurch zu tarnen versuchen.
Schon mein Vater hat die Dummschwätzer, die er Blender nannte, „gehasst“. Die konnten nur allen Vorgesetzten nach der letzten Mode zu Munde reden, hatten aber nicht wirklich Ahnung von der jeweiligen Materie.
Glücklicherweise muss ich mich mit solchen Leuten nicht mehr auseinandersetzen. Vor 40 Jahren war ich fachlicher Projekt­Ent­wick­ler und so kompetenter PgmmiererPartner und -Kontrolleur, der von Pgmmierung Ahnung hatte und auch die GroßRechner-Pseudo­Code-Projekt-Entwürfe verstehen konnte, was den einen oder anderen Pgmmierer schon mal verzweifeln ließ, wenn er etwas nicht nach meiner Vorgabe umgesetzt hatte… ;-)
Tja-ja, GoTo, GoSub & Co, mit das Erste, was man früher gelernt hat. Tutorials und universelle Bedienungs­Anleitungen (auch in gedruckter Form) fktionieren (oft) noch genauso: Bei den-und-den Voraussetzungen (zB richtige AW) setze da-und-da fort (sonst wiederhole ab dort-und-dort).
Aber es gab ja auch wirklich schon ganz andere Lösungen wie bspw PROLOG. Das lasse ich mir dann eher gefallen. Da wird sich dann wohl auch bei Kompilierung nicht wieder ein unmodischer Sprung einschleichen, was bei den anderen Konstrukten ja wahr­scheinlich nicht garantiert ist… ;-]
Übrigens auch ein Grund, warum ich mich mit mehr oder weniger raffinierten UDFs begnüge, denn hier geht's wirklich nur um Kreativität (wie in der Pionierzeit), nicht um Moden.
In diesem Sinne, bleib bei dir und trotzdem viel Erfolg! ;-)
Morrn, Luc :-?

Anzeige
AW: mit INDEX() und VERGLEICH() ...
30.05.2016 18:28:48
Ahmadi
Danke für die schnelle Antwort.
Blöderweise habe ich die beiden Muster-Tabellen auf einem Blatt und über einander geschrieben gehabt. Eigentlich sind die Tabellen auf zwei verschiedenen Blättern und an verschiedenen Stellen. Nun versuche ich die Formel umzustellen, es klappt nicht.

AW: ist auch kein Problem ...
30.05.2016 19:22:28
...
Hallo Ahmadi,
... angenommen, Deine Auswertung beginnt in B2 des anderen Tabellenblattes, dann einfach in B2:
=WENNFEHLER(INDEX(Tabelle1!$B:$B;VERGLEICH($A2;Tabelle1!C:C;));"")
Gruß Werner
.. , - ...

AW: ist auch kein Problem ...
30.05.2016 21:44:28
Ahmadi
Danke Viel Mals.
Hab's raus bekommen.
Alles funktioniert wunderbar.
Ich hätte jetzt eine andere Frage.
Im Blatt "Jahreskalender" können die Mitarbeiter Ihre Urlaube eintragen.(Mit der Abkürzung "U")
könnte man zwei Formeln gleichzeitig in einer Zelle verwenden? Zum Beispiel, es soll geguckt werden, Falls Mitarbeiter1 an einem Bestimmten Tag Urlaub hat, dann sollte erst im Wochenplan an diesem Tag "Urlaub" erscheinen, wenn nicht, dann soll das Feld wie gehabt ausgefüllt werden. Ich kann per Wverweis die Urlaubstage auf ein Extrablatt transportieren. Kann aber die Formel mit deiner Formel nicht kombinieren.
Hättest du vielleicht einen Tip!
LG
Ahmadi

AW: in Deiner Datei gibt es kein "Kalender"!? owT
31.05.2016 15:18:25
...
Gruß Werner
.. , - ...

per VBA
30.05.2016 17:47:37
UweD
Hallo
so?

Sub Arbeiter()
On Error GoTo Fehler
Dim TB1, TB2, j%
Dim LR1%, LR2%, LC%
Application.ScreenUpdating = False
Set TB1 = Sheets("Tabelle1")
Set TB2 = Sheets("Tabelle2")
TB2.Cells.Clear
With TB1
.Rows(2).Copy TB2.Rows(2)
TB2.Cells(2, 2) = "Mitarbeiter"
LR1 = .Cells(Rows.Count, "B").End(xlUp).Row 'letzte Zeile der Spalte
LC = .Cells(2, Columns.Count).End(xlToLeft).Column 'letzte Spalte der Zeile 2
For j = 3 To LR1
LR2 = TB2.Cells(Rows.Count, "B").End(xlUp).Row + 1
.Range(.Cells(j, 3), .Cells(j, LC)).Copy
TB2.Cells(LR2, 2).PasteSpecial Transpose:=True
Next j
End With
TB2.Columns(2).RemoveDuplicates Columns:=1, Header:=xlNo
LR2 = TB2.Cells(Rows.Count, "B").End(xlUp).Row + 1
With TB2.Range(TB2.Cells(3, 3), TB2.Cells(LR2, LC))
.FormulaR1C1 = "=IFERROR(INDEX(Tabelle1!C2,MATCH(RC2,Tabelle1!C,0)),"""")"
.Value = .Value
End With
Err.Clear
Fehler:
If Err.Number  0 Then MsgBox "Fehler: " & _
Err.Number & vbLf & Err.Description: Err.Clear
End Sub

Gruß UweD

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige