Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1572to1576
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Teil-Range-Objekt aus Range-Objekt bilden

Teil-Range-Objekt aus Range-Objekt bilden
09.08.2017 13:52:39
Erik
Liebe Gemeinde,
ich wende mich heute mit einem Problem an euch, dass mich gerade seit 3 Stunden ratlos zurücklässt und bei dem ich nicht weiß, wie ich es ergooglen soll.
Folgende Aufgabenstellung habe ich: Ich möchte eine Funktion in VBA erstellen, die ich auch in einem Tabellenblatt anwenden kann. Dieser Funktion übergebe ich zwei Range-Objekte, im Anwendungsfall ist das der Zellbezug zu einem Datum und eine Spalte von Arbeitsstunden.
Die abstrakte Aufgabenstellung besteht darin, aus einer übergebenen Spalte einen Teil (anhand zweier Zeilenangaben von bis) in einem Range-Objekt zu referenzieren.

Public Function Wochensaldo_berechnen(Datum As Range, Arbeitsstunden As Range) as Double
Dim Woche as Range
With Arbeitsstunden
Set Woche = .Range(.Cells(1, 1), .Cells(Datum.Row, 1))
End With
Debug.print Arbeitsstunden.Address
Debug.Print Woche.Address
End Function
Ich möchte aus dieser Spalte "Arbeitsstunden" einen bestimmten Teil (eine Woche) "ausschneiden" und damit weiterrechnen.
Leider funktioniert es nicht wie oben beschrieben. Der Fehler ist, dass die Adresse im Range-Objekt "Woche" sich komischerweise sowohl in Bezug auf Spalte als auch Zeile verschiebt. Die Zeilenanzahl stimmt allerdings, also scheint es diesbezüglich zu klappen.
Wer kann mir da weiterhelfen? Habe ich etwas Theoretisches übersehen? Ich freue mich über jeden Tipp und bedanke mich für die Aufmerksamkeit.
Grüße aus Dresden
Erik

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Teil-Range-Objekt aus Range-Objekt bilden
09.08.2017 14:06:42
Matthias
Moin! Kannst du das bitte mal an einem Beispiel erklären? Also welche Range hat Datum, welche Spalte ist betroffen und was soll bei Woche als Range rauskommen. Habe mal getestet und bei mir nimmt er in der Spalte von Zelle 1 bis zur Zeile vom Datum den BEreich. VG
AW: Teil-Range-Objekt aus Range-Objekt bilden
10.08.2017 13:17:29
Erik
Hallo Matthias,
der liebe Luc hat es in seiner Antwort sehr umfangreich beschrieben, weshalb ich auf eine nähere Erläuterung verzichte und Daniel hat mir die eigentliche Lösung gegeben. Boah, ein Punkt! Darauf wäre ich nicht gekommen.
Ich bedanke mich trotzdem für dein Interesse!
LG Erik
Das wäre kein Problem, egal, ob du das neu ...
09.08.2017 18:34:19
Luc:-?
…erfinden willst oder nicht, Erik;
das könnte dann so aussehen:
 ABCDEFGH
1
DatumArbeitsstddEinzel-KWalle KWnArbeitsstdd KW32Arbeitsstdd KW3231.07.201783131777701.08.201773131999902.08.2017103131888803.08.201783131888804.08.201753131666607.08.2017732323838383808.08.201793232(m.Hilfsspalte)(o.Hilfsspalte)(m.Hilfsspalte)(o.Hilfsspalte)09.08.201783232NoErrRangeINDEX10.08.201783232https://www.herber.de/forum/archiv/1508to1512/t1508209.htm#150821511.08.201763232https://www.herber.de/forum/archiv/1476to1480/1476498_Projektplan.html#147740014.08.201783333Formeln:  ^ TxEval15.08.201783333C2[:C16]:=KALENDERWOCHE(A2;21)16.08.2017113333D2:D16: {=MTRANS(TxEval(WECHSELN("weeknum(A#,21)";"#";ZEILE(2:16))))}17.08.201783333E2:E16: {=NoErrRange(B2:B16;;C2:C16=32)}18.08.201753333E7: {=SUMME(NoErrRange(B2:B16;;C2:C16=32))}F2:F16: {=NoErrRange(B2:B16;;TxEval(WECHSELN("weeknum(A#,21)";"#";ZEILE(2:16)))=32)}F7: {=SUMME(NoErrRange(B2:B16;;TxEval(WECHSELN("weeknum(A#,21)";"#";ZEILE(2:16)))=32))}G2:G16: {=INDEX(B2:B16;VERGLEICH(32;C2:C16;0)):INDEX(B2:B16;VERGLEICH(32;C2:C16))}G7:=SUMME(INDEX(B2:B16;VERGLEICH(32;C2:C16;0)):INDEX(B2:B16;VERGLEICH(32;C2:C16)))H2:H16: {=INDEX(B2:B16;VERGLEICH(32;TxEval(WECHSELN("weeknum(A#,21)";"#";ZEILE(2:16)));0)):INDEX(B2:B16;VERGLEICH(32;TxEval(WECHSELN("weeknum(A#,21)";"#";ZEILE(2:16)))))}H7: {=SUMME(INDEX(B2:B16;VERGLEICH(32;TxEval(WECHSELN("weeknum(A#,21)";"#";ZEILE(2:16)));0)):INDEX(B2:B16;VERGLEICH(32;TxEval(WECHSELN("weeknum(A#,21)";"#";ZEILE(2:16))))))}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Im hier Gezeigten wurde von 2 Möglichkeiten ausgegangen, mit und ohne Hilfsspalte, die hier normalerweise erforderlich wäre, weil die Xl-Fkt KALENDERWOCHE leider nicht matrix(fml)fähig ist. Mit der in Spalte D gezeigten pluralen MatrixFml könnte das umgangen wdn (falls erforderlich). In Spalten E:F wdn beide Varianten auf Basis der UDF NoErrRange berechnet, wobei die Summe hier absichtlich mit der vollen Fml gebildet wurde, um zu zeigen, dass das per singularer MatrixFml auch ohne die DatenAuflistung möglich ist. Analog wurde in Spalten G:H verfahren, nur wurde hier stattdessen INDEX verwendet. Damit wäre in der Hilfs­spal­ten­Variante auch eine normale SummenFml möglich.
Mir ist bewusst, dass es dir primär um die Auswahl aus einem Bereich geht. Das macht hier auch die UDF NoErrRange, deren Pgm­Code im Ggsatz zu dem von INDEX einsehbar ist und so als Bsp dienen kann, falls du das selber pgmmieren willst. Anderer­seits könnte auch INDEX in einem Pgm adäquat benutzt wdn, was idR sinnvoll ist, falls es um Datenfelder ohne ZellBereichsBezug ginge.
Hinweis: Die angegebenen Links sind hier nur Text, müssen also erst kopiert und in die AdressZeile des Browsers eingetragen wdn (das liegt am HTML-Tool und daran, dass ich die nicht nachträglich aktivieren wollte). Alternativ kann das Bsp aber auch in ein leeres Blatt (an entsprd Stelle, auch ohne RahmenZeilen!) kopiert wdn. Durch Klick in LinkTexte enthaltende Zellen wandelt Xl diese in echte Links um.
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Das wäre kein Problem, egal, ob du das neu ...
10.08.2017 13:19:37
Erik
Hallo Luc,
vielen lieben Dank für deine Antwort. Du hast mir eine Lösung mit Formeln angeboten, ich habe aber tatsächlich nach der VBA-Lösung gesucht, da ich die Aufgabe in VBA schneller lösen kann (mal davon abgesehen, dass ich eben noch ein Problem hatte).
Daniel hat mir die Lösung genannt - ich hatte schlicht einen Punkt zuviel!
Ich bedanke mich für deine Antwort und wünsch dir alles Gute!
LG Erik
AW: Teil-Range-Objekt aus Range-Objekt bilden
09.08.2017 20:28:42
Daniel
Hi
lass den Punkt vor dem Range mal weg, und verwende nur den vor den Cells:
Set Woche = Range(.Cells(1, 1), .Cells(Datum.Row, 1))
Gruß Daniel
Anzeige
AW: Teil-Range-Objekt aus Range-Objekt bilden
10.08.2017 13:21:07
Erik
Lieber Daniel,
das ist Magic! Ich danke dir für den Hinweis. Ich habe daran nicht einmal gedacht. Kannst du mir vielleicht noch etwas zum Hintergrund erklären? Insbesondere warum VBA mit Punkt einen verschobenen Bereich ausliefert?
Ich danke dir ganz gang sehr. Lass es dir gut gehen.
LG Erik
...Weil ZellAdressen sich aufs ganze Blatt ...
10.08.2017 16:23:58
Luc:-?
…beziehen, Erik,
dein .Range aber nur auf den so definierten Bereich! Das führt dann ggf zu Verschiebungen.
Luc :-?
Aha! Besten Dank owT!
13.08.2017 10:07:03
Erik
...

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige