Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1352to1356
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

VBA - Hilfe

VBA - Hilfe
20.03.2014 09:45:39
Frank
Hallo Zusammen!
Ich bin dabei mir einen Kalender zu bauen, welcher später als Dienstplan funktionieren soll. Ich habe ein Tabellenblatt "Daten", dort steht in Spalte A untereinander ab Zeile 5 das Datum vom 01.01.2014 - 31.12.2031. In Spalte C der Feiertag. Wie bekomme ich den Feiertag in Spalte C des Tabellenblattes 1, wenn dort in Spalte A von Zeile 5 - Zeile 35 das Datum steht. Ich möchte bitte eine VBA Lösung, da ich den SVERWEIS nicht nutzen möchte. Kann mir bitte jemand halfen?
Danke im Voraus!
Gruß Frank H.

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Hilfe
20.03.2014 11:31:30
Klaus
Hallo Frank H.,
es wird darauf hinaus laufen, dass du den SVERWEIS per VBA setzt. Gegenfrage: Warum möchtest du den SVERWEIS nicht nutzen? Eine kleine Mustertabelle währ sinnvoll.
Grüße,
Klaus M.vdT.

AW: VBA - Hilfe
20.03.2014 17:39:01
Frank
Hallo Klaus!
Danke dir für deinen Beitrag. Ich wollte einfach per VBA Befehl das lösen und so auf eine Formel gänzlich verzichten. Aber wenn es nicht geht bleibt mir wohl nichts anderes übrig.
Gruß Frank H.

AW: VBA - Hilfe
20.03.2014 18:54:31
Raphael
Hallo Frank,
grundsätzlich kann man das auch per VBA lösen ohne das du den SVERWEIS verwendest.
Die wichtige ist, warum willst du den SVERWEIS nicht nutzen?
Gruess
Raphael

Anzeige
AW: VBA - Hilfe
20.03.2014 19:06:33
Frank
Hallo Raphael!
Erst einmal Danke, dass du dich auf meinen Beitrag meldest. Mein Gedanke dabei war: Ich bin davon ausgegangen, dass jede Formel mehr Speicherbedarf als ein VBA Befehl benötigt und somit eine Datei langsamer arbeiten lässt. Deshalb wollte ich 'ne VBA - Lösung.
Einen schönen Abend noch!
Gruß Frank H.

AW: VBA - Hilfe
20.03.2014 21:59:37
Raphael
Moin Frank,
hab dir mal ein BSP mit VBA gemacht... Weiss aber nicht ob du dir so was vorgestellt hast.
https://www.herber.de/bbs/user/89768.xlsm
Gruess
Raphael

AW: VBA - Hilfe
21.03.2014 07:33:29
Frank
Hallo Raphael!
Dir und deinem Willen mir zu helfen herzlichst Dank! Wenn ich dich recht verstehe, bzw. den Code richtig deute, dann dürfen bei den Feiertagen keine Leerzellen sein, denn er bricht die Suche ja bei der ersten freien Zelle ab, oder? Kann der Code auch so umgebaut werden, dass er die Spalte bis zu einem festen Punkt durchsucht?
Danke für eine hoffentlich erneute Rückmeldung!
Gruß Frank H.

Anzeige
AW: VBA - Hilfe
21.03.2014 08:14:12
Raphael
Morgen Frank,
ersetze einfach die Do Loop Schleife mit einer For next
Und das Zeile = Zeile + 1 kannst du ebenfalls löschen
For Zeile = 2 to Deine gewünschte letzte Zeile
next Zeile
Hoffe das reicht dir für den Eigenbau.
Gruess
Raphael

AW: VBA - Hilfe
21.03.2014 09:25:34
Frank
Hallo Raphael!
Danke dir wie verrückt! Funzt nach Anpassung perfekt!
Gruß Frank H.

AW: VBA - Hilfe
21.03.2014 08:10:36
Klaus
Hallo Frank,
zu Speicherbedarf und langsamen Formeln: Du bist auf dem Holzweg.
Mein Tip:
Rekorder an, erste Formel eintragen, mit "autoausfüllen" (das kleine schwarze Viereck) über den Bereich expandieren, Inhalte kopieren, Werte einfügen, Rekorder aus.
Jetzt hast du ein Makro, das einmalig Rechenzeit braucht und danach alle Werte fix einträgt - und das fixe Werte gar keine Rechenzeit brauchen ist klar :-)
Alternativ könntest du auch die automatischen Berechnungen ausschalten.
Ein VBA-Script, das ständig die Rolle des SVERWEISES übernimmt, ist mit Sicherheit langsamer. Alleine schon, weil es von irgendwas angestoßen werden muss (Change? Calculate?), während die Formel von alleine weiss ob sie sich aktualisieren muss oder nicht. Desweiteren: Im VBA müsste man ja ein Konstrukt ala "for each Zeile in Bereich / Prüfe / Next" bauen, das von sich aus langsamer wäre als im VBA den SVERWEIS als Worksheetfunction zu nutzen - aber dann kannst du ihn auch gleich in der Tabelle lassen. Tatsächlich sehe ich es so: wann immer du durch eine einfache Formel auf VBA verzichten kannst, tue es!
Du kannst ja auch mal Peter Haserodts Abhandlung über langsames Excel lesen:
http://www.online-excel.de/excel/singsel.php?f=171
Hoffe, dich ein wenig vom Holzweg abgebracht zu haben. Viele Erfolg mit dem Excel-Beschleunigen!
Grüße,
Klaus M.vdT.

Anzeige
AW: VBA - Hilfe
21.03.2014 09:24:20
Frank
Hallo Klaus!
Danke dir für deinen Beitrag! Ich habe auch den Link geöffnet und gelesen, bin wieder ein Stück schlauer und werde es mit bedenken. Aber Raphaels Code ist nicht schlecht und da ich immer mittels Change Ereignis einer ComboBox arbeite, werde ich den Code in meiner aktuellen Mappe nutzen!
Gruß Frank H.

AW: VBA - Hilfe
21.03.2014 09:27:37
Klaus
Hallo Frank,
da ich immer mittels Change Ereignis einer ComboBox arbeite
Damit ist mein größter Kritikpunkt, das VBA müsse angestoßen werden, ja beseitigt :-)
Danke für die Rückmeldung!
Grüße,
Klaus M.vdT.

Geschwindigkeits-Test
21.03.2014 09:37:15
Klaus
Hallo Frank und Raphael,
ich habe mal einen Geschwindigkeitstest gemacht :-)
Raphaels Makro ist bei kleinen Bereichen etwas schneller, bei sehr großen Bereichen gewinnt die Schleifen-Lose Lösung die direkt "SVERWEIS" benutzt etwas an Geschwindigkeit.
Nicht beachtet sind natürlich die sonstigen Operationen, die in der Mappe ablaufen.
Option Explicit
Sub x()
Dim t
Dim objFT As Object
Dim Zeile As Integer
t = Timer
Set objFT = CreateObject("Scripting.dictionary")
With Sheets("Tabelle1")
'Feiertage einlesen aus der Tabelle einlesen
Zeile = 2
Do
objFT(.Cells(Zeile, 8).Value) = .Cells(Zeile, 9).Value
Zeile = Zeile + 1
Loop Until .Cells(Zeile, 8).Value = "" 'Schleife läuft bis zur ersten leeren Zelle bei den  _
Feiertagen
'Daten durchlaufen und Feiertage finden
Zeile = 2
Do
If objFT.exists(.Cells(Zeile, 1).Value) Then
.Cells(Zeile, 3).Value = objFT.Item(.Cells(Zeile, 1).Value)
End If
Zeile = Zeile + 1
Loop Until .Cells(Zeile, 1).Value = ""
End With
MsgBox Timer - t
'0,054 Sek bei 1.000 Zeilen
'0,349 Sek bei 10.000 Zeilen
End Sub
Sub x2()
Dim t
Dim lRow As Long
t = Timer
With Sheets("Tabelle1")
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range(.Cells(1, 3), .Cells(lRow, 3)).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-2],C[5]:C[6],2,)," _
""")"
.Range(.Cells(1, 3), .Cells(lRow, 3)).Value = .Range(.Cells(1, 3), .Cells(lRow, 3)).Value
End With
MsgBox Timer - t
'0,070 Sek bei 1.000 Zeilen
'0,253 Sek bei 10.000 Zeilen
End Sub
Grüße,
Klaus M.vdT.

Anzeige
Danke Klaus, was gelernt
21.03.2014 21:31:47
Raphael
Hallo Klaus,
danke für deine Lösung, da hab ich wieder was gelernt.
Habe nicht gewusst das ich Formeln auf diese Art ohne Schleife in einem Range einfügen kann.
Kann ich sicher an andrer Stelle wieder verwenden.
Gruess
Raphael

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige