515 Aufrufe
Gefragt in Tabellenkalkulation von jonesm Mitglied (191 Punkte)
Hallo zusammen,

ich möchte in einer Tabelle in mehreren Spalten in Abhängigkeit von
Eintragungen in einem anderen Arbeitsblatt die dort hinterlegten Werte
in die Tabelle übernehmen.

Beispiel:

In Spalte E wird die Maschinennummer eingetragen, in der Spalte F
soll dann aus dem Arbeitsblatt "Listenfelder" der Name der Maschine
stehen und in Spalte G der Betreuer.

Im Blatt Listenfelder stehen die Angaben in den Spalten C, D und E
(Maschinennummer, Name Maschine und Betreuer).

Bisher mache ich das über SVERWEIS.
=SVERWEIS(E4333;Listenfelder!C:E;2;0)


Da die Tabelle täglich um ca. 50 - 100 Eintragungen wächst, wird die
Datei so langsam zu groß (in weiteren Spalten stehen weitere
SVERWEISE). Das arbeiten mit der Tabelle gestaltet sich zunehmend
als schwieriger, weil es zu lange dauert diese zu öffnen und zu
speichern.

Wie kann ich den SVERWEIS durch das direkte Eintragen der
entsprechenden Werte ersetzen.

Der folgende Beispielcode mit SVERWEIS funktioniert zwar, dauert
aber zu lange und ich habe noch die Formel in der Zelle stehen. Ich
möchte aber nur den Wert eintragen.

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 5 Then
Cells(Target.Row, 6) =
"=VLOOKUP(RC[-1],Listenfelder!C[-3]:C[-1],2,0)"
End If
Application.EnableEvents = True
End Sub


Hat jemand eine Idee?
Schon mal herzlichen Dank!

VG Thomas

9 Antworten

0 Punkte
0 Punkte
Beantwortet von
Hallo Thomas ^^

Bei großen Tabellen auch Automatismus zudem das Changeereignis auch gehört verbannen und Makros dann zur Berechnung händich starten oder z.b. Open bzw Close Ereignis nutzen zur Berechnung

Gruß Nighty
0 Punkte
Beantwortet von
Hallo Thomas ^^

Oder
Erfordert Einarbeitung mit allen Formeln

Volatile und Matrixformeln verbannen
Mit anderen Formeln Alternativen aufbauen

Gruß Nighty
0 Punkte
Beantwortet von
Hallo Thomas ^^

Mein Rat!

Setze nur Makros ein
Einzelne Zellzufriffe sind verboten
Setze permanent Arrays ein
Beschäftige dich mal mit Dic Objecten

Gruß Nighty
0 Punkte
Beantwortet von jonesm Mitglied (191 Punkte)
Hallo Nighty,

erst einmal vielen Dank!

Du setzt aber leider zu viel voraus bei mir! ;-) So ein *Z* bin ich
leider nicht. Ich habe versucht den Code anzupassen. Es ist mir aber
leider nicht gelungen.

Was bewirkt die folgende Schleife? Kann man nicht die Bereiche
einfach fest definieren?

For i = 3 To Ziel.Range("A1048576").End(xlUp).Row
Branchen_Art = Ziel.Range("A" & i).Value
Firma = Ziel.Range("B" & i).Value



Könntest du mir den Code so weit anpassen/ vereinfachen, dass ich
diesen dann weiter anpassen kann?

Datenbasis ist das Tabellenblatt "Listenfelder" und die
Erfassungstabelle ist die "Erfassung".
Die Maschinennummer steht in Spalte E, in F und G.
Im Blatt "Listenfelder" steht in Spalte C die Maschinennummer und in
D und E die zu übernehmenden Name.



Option Explicit

Sub Flexibler_Als_Sverweis()
Debug.Print Now

Dim i As Long, Zeile As Long, letzteZeile As Long
Dim Shopname As String, Anschrift As String, PLZ As String, Ort As
String, FirmaArt As String
Dim Firma As String, Branchen_Art As String, FirmaSOID As String
Dim Arbeitsmappe As Workbook
Dim Datenbasis As Worksheet
Dim Ziel As Worksheet
Dim ZelleFirma As Range
Dim Bereich As Range

Set Arbeitsmappe = ThisWorkbook
Set Datenbasis = Arbeitsmappe.Worksheets("Quelle")
Set Ziel = Arbeitsmappe.Worksheets("Ziel (Makro Variante2)")

letzteZeile = Datenbasis.Range("A1048576").End(xlUp).Row

Set Bereich = Datenbasis.Range("A1:A" & letzteZeile)

For i = 3 To Ziel.Range("A1048576").End(xlUp).Row
Branchen_Art = Ziel.Range("A" & i).Value
Firma = Ziel.Range("B" & i).Value

With Datenbasis
Set ZelleFirma = Bereich.Find(Branchen_Art & Firma)
If ZelleFirma Is Nothing Then
Shopname = ""
Anschrift = ""
PLZ = ""
Ort = ""
FirmaArt = ""

Ziel.Range("C" & i).Value = Shopname
Ziel.Range("D" & i).Value = Anschrift
Ziel.Range("E" & i).Value = PLZ
Ziel.Range("F" & i).Value = Ort
Ziel.Range("G" & i).Value = FirmaArt
Else
Zeile = ZelleFirma.Row
Shopname = .Range("D" & Zeile).Value
Anschrift = .Range("E" & Zeile).Value
PLZ = .Range("F" & Zeile).Value
Ort = .Range("G" & Zeile).Value
FirmaArt = .Range("H" & Zeile).Value

Ziel.Range("C" & i).Value = Shopname
Ziel.Range("D" & i).Value = Anschrift
Ziel.Range("E" & i).Value = PLZ
Ziel.Range("F" & i).Value = Ort
Ziel.Range("G" & i).Value = FirmaArt
Set ZelleFirma = Nothing
End If
End With
Next i

Debug.Print Now
End Sub



Vielen Dank und Grüße Thomas
0 Punkte
Beantwortet von jonesm Mitglied (191 Punkte)
???

*Z* = *Z*

Wurde zensiert... ;-)
0 Punkte
Beantwortet von jonesm Mitglied (191 Punkte)
Na gut,

*Z* = Spezialist... :-)
0 Punkte
Beantwortet von
Hallo Thomas .-)

Da ich fast Blind geworden bin,kann ich mich mit größeren Problemen nicht mehr beschäftigen und kann nur noch Tips geben!

Vielleicht sind noch andere user interessiert ,die spass daran haben und dir helfen !

Gruss Nighty
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Thomas,

wie hast du dir das Makro denn vorgestellt? Aufgrund der Größe der Tabelle wäre es am Besten, das Makro per Hand zu starten und dann die benötigten Daten anhand der Maschinennummer in die Zeilen einzutragen, in der die Spalten F bis G leer sind.

In der Tabelle "Listenfelder" stehen die benötigten Angaben ja in den Spalten C bis E. Fangen die Daten dort ab Zeile 2 an?

Stehen im Blatt "Erfassung" alle Daten ohne Leerzeilen untereinander?

Vielleicht kannst du ja auch eine kleine Beispieldatei mit ein paar Dummydaten auf einen Hoster deiner Wahl hochladen. Die Datei sollte aber im Aufbau deiner Originaldatei entsprechen.

Gruß

M.O.
...