Leere Zeile in Ziel überspr.,Gültigkeitsprüfung?

Hallo Reinhard,
wenn ich in meiner Quartalsansicht, wie von meinem Kunden gewünscht, noch Zeilen einfüge (eine Leerzeile, dann eine Zeile Überschrift für den Bereich), dann funktioniert Dein Code nicht mehr. Er steigt aus bei:

 SpaQ = Application.WorksheetFunction.Match(Year(wksM.Cells(ZeiM, SpaM)), .Rows(1), 0)

Was muss ich tun, damit er eine Gültigkeitsprüfung macht, ob in der 1.Spalte der Quartalsübersicht auch das richtige Projekt stehen hat? Oder dass er beim Befüllen der Quartalsübersicht immer diese 2 Zeilen ignoriert??

Vielen vielen Dank
Tina

Hallo Tina,

wenn schon neuer Beitrag, dann verweise doch bitte auf den alten:

/t/neu-innerhalb-einer-zeile-filtern-array/4705388

sonst weiß doch keiner um was es geht.

Was muss ich tun, damit er eine Gültigkeitsprüfung macht, ob
in der 1.Spalte der Quartalsübersicht auch das richtige
Projekt stehen hat? Oder dass er beim Befüllen der
Quartalsübersicht immer diese 2 Zeilen ignoriert??

Die Datei: http://www.hostarea.de/server-07/Juli-700f145732.xls hat nachfolgenden Code. Beacht daß es sich auf Quartalsübersicht3 bezieht, das eine andere Struktur hat.

Wieviele Zeilen oberhalb der Jahreszeile sind ist egal. Der Code sucht in A nach „Projekt1“, von dieser zeile zieht er 2 ab und sucht das Jahr in der so ermittelten Zeile.

Mit der prozedur "breite kannst du bequem die Breiten der beiden Spalten pro Quartal festlegen/abändern. Kommawerte mit Punkt eingeben.

Auch das mit dem Sonderzeichen ist eingebaut. Für ein anderes Zeichen bei ChrW(9836) eine andere Zahl eingeben oder ChrW(9836) durch „#“ erstzen.

Gruß
Reinhard

Option Explicit
Option Base 1
'
Sub Quart()
Dim wksM As Worksheet, ZeiM As Long, SpaM As Long, SpaQ As Long, ZeiQ As Long
Dim ZeiP As Long, Awf As WorksheetFunction
Set wksM = Worksheets("Master")
Set Awf = Application.WorksheetFunction
With Worksheets("Quartalsübersicht3")
 ZeiP = Awf.Match("Projekt1", .Columns(1))
 .Range("B" & ZeiP & ":BK30").ClearContents
 For SpaM = 6 To 18 Step 3
 For ZeiM = 3 To wksM.Cells(Rows.Count, SpaM).End(xlUp).Row
 ZeiQ = Awf.Match(CStr(Replace(wksM.Cells(ZeiM, 3), "c", "k")), .Columns(1), 0)
 SpaQ = Awf.Match(Year(wksM.Cells(ZeiM, SpaM)), .Rows(ZeiP - 2), 0)
 SpaQ = SpaQ + (Quartal(wksM.Cells(ZeiM, SpaM)) - 1) \* 2
 If .Cells(ZeiQ, SpaQ + 1) "" Then .Cells(ZeiQ, SpaQ + 1) = .Cells(ZeiQ, SpaQ + 1) & ","
 .Cells(ZeiQ, SpaQ) = ChrW(9836)
 .Cells(ZeiQ, SpaQ + 1) = .Cells(ZeiQ, SpaQ + 1) & wksM.Cells(ZeiM, SpaM + 2)
 Next ZeiM
 Next SpaM
End With
End Sub
'
Function Quartal(ByVal Datum As Date) As Byte
Quartal = Int((Month(Datum) - 1) / 3) + 1
End Function
'
Function SName(ByVal sp As Integer) As String
SName = Split(Cells(1, sp).Address, "$")(1)
End Function
'
Sub Breite()
Dim Spa As Long
For Spa = 2 To 40 Step 2
 Worksheets("Quartalsübersicht3").Cells(1, Spa).ColumnWidth = 2
 Worksheets("Quartalsübersicht3").Cells(1, Spa + 1).ColumnWidth = 4.9
Next Spa
End Sub

Hallo Tina,

wenn schon neuer Beitrag, dann verweise doch bitte auf den
alten:

Das wusste ich wieder mal nicht, lerne dazu. Die Zeile war so klein :wink:

/t/neu-innerhalb-einer-zeile-filtern-array/4705388

sonst weiß doch keiner um was es geht.

Was muss ich tun, damit er eine Gültigkeitsprüfung macht, ob
in der 1.Spalte der Quartalsübersicht auch das richtige
Projekt stehen hat? Oder dass er beim Befüllen der
Quartalsübersicht immer diese 2 Zeilen ignoriert??

Die Datei:
http://www.hostarea.de/server-07/Juli-700f145732.xls hat nachfolgenden Code. Beacht daß es sich auf
Quartalsübersicht3 bezieht, das eine andere Struktur hat.

Wieviele Zeilen oberhalb der Jahreszeile sind ist egal. Der
Code sucht in A nach „Projekt1“, von dieser zeile zieht er 2
ab und sucht das Jahr in der so ermittelten Zeile.

Cool!

Mit der prozedur "breite kannst du bequem die Breiten der
beiden Spalten pro Quartal festlegen/abändern. Kommawerte mit
Punkt eingeben.

Super!

Auch das mit dem Sonderzeichen ist eingebaut. Für ein anderes
Zeichen bei ChrW(9836) eine andere Zahl eingeben oder
ChrW(9836) durch „#“ erstzen.

? Verstehe ich nicht

Gruß
Reinhard

Option Explicit
Option Base 1

Sub Quart()
Dim wksM As Worksheet, ZeiM As Long, SpaM As Long, SpaQ As
Long, ZeiQ As Long
Dim ZeiP As Long, Awf As WorksheetFunction
Set wksM = Worksheets(„Master“)
Set Awf = Application.WorksheetFunction
With Worksheets(„Quartalsübersicht3“)
ZeiP = Awf.Match(„Projekt1“, .Columns(1))
.Range(„B“ & ZeiP & „:BK30“).ClearContents
For SpaM = 6 To 18 Step 3
For ZeiM = 3 To wksM.Cells(Rows.Count,
SpaM).End(xlUp).Row
ZeiQ = Awf.Match(CStr(Replace(wksM.Cells(ZeiM, 3),
„c“, „k“)), .Columns(1), 0)
SpaQ = Awf.Match(Year(wksM.Cells(ZeiM, SpaM)),
.Rows(ZeiP - 2), 0)
SpaQ = SpaQ + (Quartal(wksM.Cells(ZeiM, SpaM)) - 1) *
2
If .Cells(ZeiQ, SpaQ + 1) „“ Then
.Cells(ZeiQ, SpaQ + 1) = .Cells(ZeiQ, SpaQ + 1) & „,“
.Cells(ZeiQ, SpaQ) = ChrW(9836)
.Cells(ZeiQ, SpaQ + 1) = .Cells(ZeiQ, SpaQ + 1) &
wksM.Cells(ZeiM, SpaM + 2)
Next ZeiM
Next SpaM
End With
End Sub

Function Quartal(ByVal Datum As Date) As Byte
Quartal = Int((Month(Datum) - 1) / 3) + 1
End Function

Function SName(ByVal sp As Integer) As String
SName = Split(Cells(1, sp).Address, „$“)(1)
End Function

Sub Breite()
Dim Spa As Long
For Spa = 2 To 40 Step 2
Worksheets(„Quartalsübersicht3“).Cells(1, Spa).ColumnWidth
= 2
Worksheets(„Quartalsübersicht3“).Cells(1, Spa +
1).ColumnWidth = 4.9
Next Spa
End Sub

Leider verstehe ich nicht ganz, wo Du das Sheet Master abfragst und wo die Quartalsübersicht.

ZeiQ = Awf.Match(CStr(Replace(wksM.Cells(ZeiM, 3), "c", "k")), .Columns(1), 0)
 SpaQ = Awf.Match(Year(wksM.Cells(ZeiM, SpaM)), .Rows(ZeiP - 2), 0)
 SpaQ = SpaQ + (Quartal(wksM.Cells(ZeiM, SpaM)) - 1) \* 2 

In der Realität sind die beiden Dateien nicht in einer Datei, sondern in zwei verschiedenen. Quelldatei.Worksheets(Master) und Zieldatei.Worksheets(Quartalsübersicht)
Deshalb muss ich das verstehen…

Seh’ den Wald vor lauter VBA nicht mehr!

Danke!!!
Tina

Hallo Tina,

Auch das mit dem Sonderzeichen ist eingebaut. Für ein anderes
Zeichen bei ChrW(9836) eine andere Zahl eingeben oder
ChrW(9836) durch „#“ erstzen.

? Verstehe ich nicht

du hattest doch geschrieben du wolltest pro Quartal zwei Spalten, links so ein komisches Zeichen und rechts dann ggfs R,S,H

Leider verstehe ich nicht ganz, wo Du das Sheet Master
abfragst und wo die Quartalsübersicht.

Du schaust auf die falsche Codezeilen, hier wird das festgelegt:

Set wksM = Workbooks(„Datei1“).Worksheets(„Master“)
Set Awf = Application.WorksheetFunction
With Workbooks(„Datei2“).Worksheets(„Quartalsübersicht3“)

Gruß
Reinhard

Hallo Tina,

Auch das mit dem Sonderzeichen ist eingebaut. Für ein anderes
Zeichen bei ChrW(9836) eine andere Zahl eingeben oder
ChrW(9836) durch „#“ erstzen.

? Verstehe ich nicht

du hattest doch geschrieben du wolltest pro Quartal zwei
Spalten, links so ein komisches Zeichen und rechts dann ggfs
R,S,H

Ja, bin manchmal ein bisschen schwer von Begriff!

Leider verstehe ich nicht ganz, wo Du das Sheet Master
abfragst und wo die Quartalsübersicht.

Du schaust auf die falsche Codezeilen, hier wird das
festgelegt:

Set wksM = Workbooks(„Datei1“).Worksheets(„Master“)
Set Awf = Application.WorksheetFunction
With Workbooks(„Datei2“).Worksheets(„Quartalsübersicht3“)

Ja, logisch!

Gruß
Reinhard

Schon kommt wieder die nächste Frage: Leider berechnet er mir bei:
ZeiP = Awf.Match(„Project1“, .Columns(1))
die letzte Zeile meiner Quartalsansicht und nicht die erste Projektzeile. Und das einzige, was ich geändert habe, war Project1 umzubenennen in Outsourcing, weil so mein erstes Projekt heißt. Ist das ein Problem, wenn die Projekte nicht durchnummeriert sind?

Grüße zurück
Tina

Hallo Tina,

Schon kommt wieder die nächste Frage: Leider berechnet er mir
bei:
ZeiP = Awf.Match(„Project1“, .Columns(1))

das stand nicht in meinem Code, da stand:

ZeiP = Awf.Match(„Proje k t1“, .Columns(1))

In der einen Tabelle projekt zu benutzen in der anderen project zu benutzen führt nur zu Problemen.

die letzte Zeile meiner Quartalsansicht

Echt? Normal müßte da ein Fehler kommen weil Proje c t1 nicht gefunden wird.

und nicht die erste
Projektzeile. Und das einzige, was ich geändert habe, war
Project1 umzubenennen in Outsourcing, weil so mein erstes
Projekt heißt. Ist das ein Problem, wenn die Projekte nicht
durchnummeriert sind?

Das Makro braucht einigermaßen klare Vorgaben was es denn suchen soll.
Es ist da egal ob es nach Project, Projekt suchen muß, das mit c und k kann man miteinbauen beim Suchen.

Auf einmal heißt project1 Outsourcing, davon weiß das Makro aber nix.
Ergo klappt es nicht.

Wenn project1 nun Outsourcing heißt, wie heißt denn nun Project2, Poject3 usw?

Vorschlag, entscheide dich mal für Projekt oder Project oder Outsourcing oder sonstwas. Hauptsache in allen Blättern gleich und lade das mal hoch.

Gruß
Reinhard

Hallo Tina,

Schon kommt wieder die nächste Frage: Leider berechnet er mir
bei:
ZeiP = Awf.Match(„Project1“, .Columns(1))

das stand nicht in meinem Code, da stand:

ZeiP = Awf.Match(„Proje k t1“, .Columns(1))

oh - mein Fehler.

In der einen Tabelle projekt zu benutzen in der anderen
project zu benutzen führt nur zu Problemen.

die letzte Zeile meiner Quartalsansicht

Echt? Normal müßte da ein Fehler kommen weil
Proje c t1 nicht gefunden wird.

komisch…

Vorschlag, entscheide dich mal für Projekt oder Project oder
Outsourcing oder sonstwas. Hauptsache in allen Blättern gleich
und lade das mal hoch.

Ist immer ein bisschen problematisch bei uns mit dem Verwenden von Echtdaten. Ich dachte, es geht auch so.

Gruß
Reinhard

siehe Datei unter http://www.hostarea.de/server-07/Juli-59a76c75c6.xls

schon wieder Danke!
Tina

Hallo Tina,

Ist immer ein bisschen problematisch bei uns mit dem Verwenden
von Echtdaten. Ich dachte, es geht auch so.

Anonymisieren kannst du doch. Geht doch ruckzuck.
Die wahren Projektnamen interessieren doch nicht, irgendwo projekt1 reingeschrieben und runtergezogen, schon hast du eine Liste projekt1,Projekt2 usw.
Desgleichen für Vorname1, Namchname1, Stadt1 usw.

bei Telefonnumern andere Ziffern nehmen, hauptsache die Form xxx/xxxx oder xxx-xxxxx oder was auch immer bleibt gleich

und bei Zahlen es gibt die Funktion Zufallszahl…

Wichtig ist daß die tabellenstruktur erhalten bleibt.

wegen des Codes, Option Explicit und Option Base1 darf es proModul nur einmal geben und zwar muß es ganz zuoberst stehen.

Diesmal überprüft der Code wo „Q1“ in Spalte B ist und berechnet daraus die Zeile der Jahre.

Option Explicit
Option Base 1
'
Sub Quart()
Dim wksM As Worksheet, ZeiM As Long, SpaM As Long, SpaQ As Long, ZeiQ As Long
Dim ZeiP As Long, Awf As WorksheetFunction
Set wksM = Worksheets("Master")
Set Awf = Application.WorksheetFunction
With Worksheets("Quartalsübersicht3")
 ZeiP = Awf.Match("Q1", .Columns(2)) + 1
 .Range("B" & ZeiP & ":BK30").ClearContents
 For SpaM = 6 To 18 Step 3
 For ZeiM = 3 To wksM.Cells(Rows.Count, SpaM).End(xlUp).Row
 If Awf.CountIf(.Columns(1), wksM.Cells(ZeiM, 3)) \> 0 Then
 If IsDate(wksM.Cells(ZeiM, SpaM)) Then
 ZeiQ = Awf.Match(wksM.Cells(ZeiM, 3), .Columns(1), 0)
 SpaQ = Awf.Match(Year(wksM.Cells(ZeiM, SpaM)), .Rows(ZeiP - 2), 0)
 SpaQ = SpaQ + (Quartal(wksM.Cells(ZeiM, SpaM)) - 1) \* 2
 If .Cells(ZeiQ, SpaQ + 1) "" Then .Cells(ZeiQ, SpaQ + 1) = .Cells(ZeiQ, SpaQ + 1) & ","
 .Cells(ZeiQ, SpaQ) = ChrW(9836)
 .Cells(ZeiQ, SpaQ + 1) = .Cells(ZeiQ, SpaQ + 1) & wksM.Cells(ZeiM, SpaM + 2)
 End If
 End If
 Next ZeiM
 Next SpaM
End With
End Sub

Gruß
Reinhard

Hallo Tina,

Ist immer ein bisschen problematisch bei uns mit dem Verwenden
von Echtdaten. Ich dachte, es geht auch so.

Anonymisieren kannst du doch. Geht doch ruckzuck.
Die wahren Projektnamen interessieren doch nicht, irgendwo
projekt1 reingeschrieben und runtergezogen, schon hast du eine
Liste projekt1,Projekt2 usw.
Desgleichen für Vorname1, Namchname1, Stadt1 usw.

Aber so habe ich es doch zuerst gemacht, da hast Du mich geschimpft. Bis auf das ich k und c verwechselt habe.

bei Telefonnumern andere Ziffern nehmen, hauptsache die Form
xxx/xxxx oder xxx-xxxxx oder was auch immer bleibt gleich

und bei Zahlen es gibt die Funktion Zufallszahl…

Danke! Auch das wusste ich nicht.

Wichtig ist daß die tabellenstruktur erhalten bleibt.

wegen des Codes, Option Explicit und Option Base1 darf es
proModul nur einmal geben und zwar muß es ganz zuoberst
stehen.

Oh ja, das hätte ich wiederum wissen müssen!

Diesmal überprüft der Code wo „Q1“ in Spalte B ist und
berechnet daraus die Zeile der Jahre.

Auch clever! Wäre ich wieder mal nie drauf gekommen!!

Gruß
Reinhard

Teste und melde mich wieder. Vielen, vielen Dank.
Tina

Dein Code funktioniert! Noch eine Frage
Hallo Reinhard,

Dein Code war echt genial. Kurz, knapp und funktioniert prima und sogar ein Anfänger wie ich versteht ihn, wenn er ihn schrittweise nachvollzieht! - Hut ab!

Habe leider schon wieder eine Frage und bin mir nicht sicher, ob ich sie als neues Thema schreiben soll:
in meiner Quelldatei stehen auch noch Startdaten (das Dargestellte war das Enddatum). Jetzt möchte ich in einer neuen Ansicht gerne die Zellen zwischen Start- und Enddatum einfärben. Geht das?

Viele liebe Grüße
Tina