Anzeige
Archiv - Navigation
656to660
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
656to660
656to660
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Großes Makro mit Variablen vereinfachen?!?

Großes Makro mit Variablen vereinfachen?!?
30.08.2005 11:26:37
Belschak
Hallo verehrte Forum-User,
habe da ein Problem mit einem enormen Makro.
Zur Erklärung: Ich möchte aus Spalten der Lasche B mithilfe des Listenfeldes in Spalten der Lasche A Werte übertragen. Wäre für mich kein Problem, wenn die jeweiligen Laschen gleich wären. Nun sind aber die Spalten der Lasche A weniger, sprich nur bestimmte Spalten gleich den Spalten der Lasche B. Da es 8 Spalten und 5 verschiedene Laschen sind, wird das bei mir ein riesiges und unübersichtliches Makro.
Nun zu meiner Bitte: Hätte gerne ein einfaches und kleines Makro, evtl. mit Variablen oder Case oder ...?
Herzlichen Dank
Kristian
Hier mal ein Auszug mit 3 Spalten und 2 Laschen:

Sub Ausführen_Listenfeld_test()
Dim Dateipfad As String, y As Variant
Application.ScreenUpdating = False
y = Cells(1, 1).Value
'Ist
If y = 1 Then
Range("e7").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C43,R3C11,)),"""",VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C43,R3C11,))"
Selection.Copy
Range("E9:E99,E101:E103").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
'Ist
If y = 1 Then
Range("e7").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C43,R3C12,)),"""",VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C43,R3C12,))"
GoTo Copy
Range("f9:f99,f101:f103").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
'Ist
If y = 1 Then
Range("e7").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C43,R3C13,)),"""",VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C43,R3C13,))"
GoTo Copy
Range("g9:g99,g101:g103").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
'Budget
If y = 2 Then
Range("e7").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC1,'Datenüberblick Wertkopien'!R520C1:R616C44,R3C11,)),"""",VLOOKUP(RC1,'Datenüberblick Wertkopien'!R520C1:R616C44,R3C11,))"
GoTo Copy
Range("E9:E99,E101:E103").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
'Budget
If y = 2 Then
Range("e7").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC1,'Datenüberblick Wertkopien'!R520C1:R616C44,R3C12,)),"""",VLOOKUP(RC1,'Datenüberblick Wertkopien'!R520C1:R616C44,R3C12,))"
GoTo Copy
Range("f9:f99,f101:f103").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
'Budget
If y = 2 Then
Range("e7").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC1,'Datenüberblick Wertkopien'!R520C1:R616C44,R3C13,)),"""",VLOOKUP(RC1,'Datenüberblick Wertkopien'!R520C1:R616C44,R3C13,))"
GoTo Copy
Range("g9:g99,g101:g103").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Großes Makro mit Variablen vereinfachen?!?
30.08.2005 18:42:29
Belschak
Habe ein bißchen in einem VBA Buch gestöbert und bin auf das Thema "arrays" und "loops" gestossen. Die Kombination der beiden hat sich irgendwie nach meiner Lösung angehört, ich steig da aber nicht ganz durch. Hätte jemand eine Idee, ob sich damit was verwirklichen läßt, und wie?
Schönen Gruß
Kristian
AW: Großes Makro mit Variablen vereinfachen?!?
30.08.2005 19:43:25
MichaV
Hallo,
1. schreibe nicht Range("e7").Select
ActiveCell.FormulaR1C1 = _
sondern Range("e7").FormulaR1C1 = _
2. bei PasteSpecial ebenso. Auf Select kannst Du (fast) immer verzichten.
3. Was soll

If a=1 Then
Anweisung1
End If
If a=1 Then
Anweisung2
End If ?

Schreibe

If a=1 Then
Anweisung1
Anweisung2
End If

4. Was soll GoTo Copy ? Copy ist eine VBA- Methode und sollte nicht als Variable oder Sprungmarke verwendet werden. Sprungmarken sollten sowieso nicht verwendet werden. Auf Sprungmarken kann man außer zur Fehlerbehandlung immer verzichten!
5. Du schreibst eine Formel in eine Zelle, kopierst diese und fügst sie woanders wieder ein. Das kannst Du auch so machen:
Range("g9:g99,g101:g103").FormulaLocal="=IF(ISERROR(VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C43,R3C12,)),"""",VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C43,R3C12,))"
Wenn Du diese Punkt umsetzt lässt sich Dein Code auf ca. 10 Zeilen reduzieren.
Gruß- Micha
PS: Rückmeldung wäre nett.
Anzeige
AW: Großes Makro mit Variablen vereinfachen?!?
31.08.2005 10:22:25
Belschak
Danke für deine Antwort, doch irgendwie stehe ich neben mir...
Hier der Code:

Sub Ausführen_Listenfeld_test()
Dim Dateipfad As String, y As Variant
Application.ScreenUpdating = False
y = Cells(1, 1).Value
'Ist
If y = 1 Then
Range("e9:e99,e101:e103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C11,)),"""",VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C11))"
Range("f9:f99,f101:f103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C12,)),"""",VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C12))"
Range("g9:g99,g101:g103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C13,)),"""",VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C13))"
Range("h9:h99,h101:h103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C23,)),"""",VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C23))"
Range("i9:i99,i101:i103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C19,)),"""",VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C19))"
Range("j9:j99,j101:j103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C40,)),"""",VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C40))"
Range("k9:k99,k101:k103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C42,)),"""",VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C42))"
Range("l9:l99,l101:l103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C43,)),"""",VLOOKUP(RC1,'Ist aktueller Monat 05'!R5C1:R101C44,R3C43))"
End If
'ant lfd Forecast
If y = 2 Then
Range("e9:e99,e101:e103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C11,)/12*'Ist aktueller Monat 05'!R2C46),"""",VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C11,)/12*'Ist aktueller Monat 05'!R2C46))"
Range("f9:f99,f101:f103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C12,)/12*'Ist aktueller Monat 05'!R2C46),"""",VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C12,)/12*'Ist aktueller Monat 05'!R2C46))"
Range("g9:g99,g101:g103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C13,)/12*'Ist aktueller Monat 05'!R2C46),"""",VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C13,)/12*'Ist aktueller Monat 05'!R2C46))"
Range("h9:h99,h101:h103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C23,)/12*'Ist aktueller Monat 05'!R2C46),"""",VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C23,)/12*'Ist aktueller Monat 05'!R2C46))"
Range("i9:i99,i101:i103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C19,)/12*'Ist aktueller Monat 05'!R2C46),"""",VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C19,)/12*'Ist aktueller Monat 05'!R2C46))"
Range("j9:j99,j101:j103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C40,)/12*'Ist aktueller Monat 05'!R2C46),"""",VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C40,)/12*'Ist aktueller Monat 05'!R2C46))"
Range("k9:k99,k101:k103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C42,)/12*'Ist aktueller Monat 05'!R2C46),"""",VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C42,)/12*'Ist aktueller Monat 05'!R2C46))"
Range("l9:l99,l101:l103").FormulaLocal = "=IF(ISERROR(VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C43,)/12*'Ist aktueller Monat 05'!R2C46),"""",VLOOKUP(RC1,'FC 05 laufend'!R5C1:R101C43,R3C43,)/12*'Ist aktueller Monat 05'!R2C46))"
End If
End Sub

Wenn ich nun im Listefeld die Positionen auswähle, passiert nichts. Da fehlt doch noch irgendwo die Copy und Paste, oder?
Verzeih meine Blindheit :-)
Grüße
Kristian
Anzeige
AW: Großes Makro mit Variablen vereinfachen?!?
31.08.2005 18:38:50
MichaV
Hallo,
welches Listenfeld?
Gruß- Micha
AW: Großes Makro mit Variablen vereinfachen?!?
01.09.2005 09:47:31
Belschak
OK, mal ganz von vorne...
Ich habe in mehreren Laschen große Tabellen mit vielen verschiedenen Werten (vom Aufbau sind alle gleich; dehnt sich bis Spalte AR und Zeile 101 aus). Nun will ich in einer neuen Lasche einen Auszug aus den vielen Tabellen aufzeigen...Sprich, ich habe mir eine neue kleine Tabelle mit nur 9 wichtigsten Spalten, jedoch allen 101 Zeilen gemacht. Um nicht für jede große Tabelle eine neue kleine Tabelle machen zu müssen, möchte ich über ein Listenfeld (--Formular--Listenfeld) auswählen, welche Tabellenwerte gerade in der kleinen Tabelle gezeigt werden sollen. Dies erfolgt über ein Makro, das ich dem Listenfeld (es listet alle meine großen Laschen mit den riesigen Tabellen auf) zuordne.
Mit meinem Kenntnissstand wird dieses Makro allerdings nun viel zu groß und unübersichtlich. Deswegen benötige ich Hilfe für ein kleineres und besseres Makro.
Hoffe ich konnte es erklären.
Gruß
Kristian
Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige