Clever-Excel-Forum

Normale Version: Excel VBA Schlaufe ähnlich zu SVerweis
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen

Ich habe folgenden beigefügten Code. Da sich in beiden Tabellen jeweils die Spalte ändert, funktioniert der SVerweis nicht so gut (bei mir). Daher hab ich nen Code mit zwei Schlaufen welche mir die sich ändernde Spalte wiederfindet und dann wie bei einem SVerweis den Inhalt abgleicht/einfügt.

Was passiert: Über eine Suchfunktion wird die entsprechende Stelle zum einfügen einer neuen Spalte gefunden. Sowohl in Tabelle 1 wie auch in Tabelle 2 wird die neue Spalte in entsprechender Stelle eingefügt. In Tabelle2 werden in der neuen Spalte auch noch die nach Funktion entsprechenden Werte eingefügt.

Was ich nun will:
Nun will ich, folgendes (ähnlich zu SVerweis):
  • Start in Tablle1, der neu eingefügten Spalte, 2. Zeile
  • Feststellung der Funktion in Tabelle1, der gleichen Zeile, Spalte D
  • Schleife in der Tabelle 2, Spalte A, Abgleich/Suche der Funktion
  • If Funktion aus Tabelle1=Funktion aus Tabelle2. Einfügen des Wertes aus Tabelle2, der neu eingefügten Spalte = In die Tabelle1, der neu eingefügten Spalte, 2. Zeile
  •  Schleife,  in Tablle1, der neu eingefügten Spalte, 3. Zeile 'Sprich: Fehlender Wert der nächsten Zeile einfügen.
Code:
'Eine andere Möglichkeit wäre auch folgende Funktion umzuschreiben: Application.WorksheetFunction.VLOOKUP(lookup_value, table_array, column_index, range_lookup)

Sub verweis()
Set zelle_kostenstelle1 = Worksheets("Tabelle1").Range("1:1").Find(kostenstelle) 'Neu eingefügte Spalte wird in der Tabelle 1 gesucht.
Set zelle_kostenstelle2 = Worksheets("Tabelle2").Range("1:1").Find(kostenstelle) 'Neu eingefügte Spalte wird in der Tabelle 2 gesucht.

Dim D, i As Integer
For i = 1 To 999 'Tabelle1, Zeile 1 bis 999 durchsuchen/schlaufe
       Dim A, j As Integer
       For j = 1 To 999
       If Worksheets("Tabelle1").Cells(zelle_kostenstelle1.Column + 1, i) = Worksheets("Tabelle1").Cells(zelle_kostenstelle2.Column, j)
       Else: j = j + 1
 End If
End Sub

Wie Ihr vielleicht sieht, habe ich mühe, die Schlaufe in der Schlaufe mit den sich ändernden Spaltenpositionen richtig zu formulieren... Huh
Schon mal jetzt besten Dank fürs Weiterhelfen.
Hallo,

ich werde die Datei nicht anhand der Bilder und dem Quelltext nachbauen. Lade sie doch einfach mal hoch, dann wird dir auch geholfen.
Sorry, dachte evtl reicht es ja mit dem Code. In der Datei betrifft es den Code in der UserForm4
Hi,

Was soll denn da passieren:


Code:
If Worksheets("Tabelle1").Cells(zelle_kostenstelle1.Column + 1, i) = Worksheets("Tabelle1").Cells(zelle_kostenstelle2.Column, j)

abgesehen davon, dass die Syntax falsch ist, gibt es ja überhaupt keine Anweisung, was zu machen ist!
Im Übrigen fehlt bei Dir Option Explicit, dann könntest Du sehen, wo die Fehler sind, weil Excel dann meckert.
Die zwei Dim außerhalb der Makros sind ja auch unnütz, denn keine der Routinen erkennt sie!
Wenn man die Fehler korrigiert, wird wenigstens eine Spalte eingefügt, aber nicht beschriftet, weil die Userform keinen Text hat.
Zudem würde ich hier nicht mit Find sondern mit Match arbeiten, damit kannst Du auch in einem SVERWEIS die Spalte suchen.
Mir ist aber noch ein Rätsel, was das soll. Erstelle doch eine Tabelle mit allen möglichen Kostenstellen und den Möglichkeiten, besser wäre für meine Begriffe aber eine Spalte E mit den Kostenstellen und nur die Auswahl der Schulungsangebote dahinter. Dann brauchst Du keine Spalten für neue Mitarbeiter oder Schulungen einfügen und auch keine Makros, dann kann man das per Hand einfügen und mit Formeln /Pivot o. PQ auswerten.
Mit dem Code hast du recht. Der stimmt nicht, da komm ich nicht weiter und das ist auch das Problem. Der Rest funktioniert soweit.

Es passiert folgendes ich habe erfasste Schulungen und Mitarbeiter. Nun soll eine neue Schulung erfasst werden. Name wird eingegeben, die Kostenstelle (wo das Dokument dann eingeordnet wird) angeklickt und die betroffenen Funktionen (0 braucht keine Schulung, 1 braucht Schulung).

Neues Dokument wird in beiden Tabellen eingefügt und Titel beschriftet. In Tabelle 2 werden die Funktionen definiert abgelegt. Funktioniert soweit. Ok.

Nun sollen alle Mitarbeiter in der Tabelle 1 überprüft werden, ob sie die neue Schulung brauchen oder nicht.
Dabei habe ich zwei Schwierigkeiten:
  • Es dürfen nur die Werte der neu eingefügten Spalte verändert werden.
    Nicht dass die Funktion dann das ganze Blatt erfasst und alle Daten überschreibt.
  • Die neu eingefügte Spalte ist sowohl in der Tabelle 1 wie auch 2 an anderer Stelle. 
    Sie ist zudem immer abhängig von der Zuordnung der Kostenstelle.
(27.08.2018, 12:33)BoskoBiati schrieb: [ -> ]Zudem würde ich hier nicht mit Find sondern mit Match arbeiten, damit kannst Du auch in einem SVERWEIS die Spalte suchen.

Ah an Match hatte ich gar nicht gedacht :28: . Das heißt ich ersetzte erst mal alle Worksheetfunktionen mit Application und versuche es dann mal mit Match...
Hi,

und tausche Spalten/Zeilenbezeichnungen in der Zeile!

Ich sehe immer noch nicht den Sinn des Ganzen.

1 Tabelle
Alle Mitarbeiter in Zeilen gelistet mit PersNr, Name, Vorname, Funktion u. Kostenstelle
In den Spalten alle Schulungen
ein X einfügen bei erfolgter Schulung, Zelle sperren. Du sparst Dir jede Menge Arbeit!

Auswertung ist dann kinderleicht.
Hallo,

Zitat:Nun soll eine neue Schulung erfasst werden. Name wird eingegeben, die Kostenstelle (wo das Dokument dann eingeordnet wird) angeklickt und die betroffenen Funktionen

... Du arbeitest doch schon mit Makros.
Warum willst Du dann noch etliche Mausklicks machen wenn es auch automatisiert werden kann?
(27.08.2018, 13:36)BoskoBiati schrieb: [ -> ]Hi,

und tausche Spalten/Zeilenbezeichnungen in der Zeile!

Ich sehe immer noch nicht den Sinn des Ganzen.

1 Tabelle
Alle Mitarbeiter in Zeilen gelistet mit PersNr, Name, Vorname, Funktion u. Kostenstelle
In den Spalten alle Schulungen
ein X einfügen bei erfolgter Schulung, Zelle sperren. Du sparst Dir jede Menge Arbeit!

Auswertung ist dann kinderleicht.

Ne, wenn ich 50 oder 100 oder so Mitarbeiter habe, eine neue Schulung hinzufüge gehe ich doch nicht bei jedem einzelnen vorbei und schau ob er die aufgrund ihrer Funktion brauchen oder nicht...da leg ich das im UserForm4 fest und der Rest geht automatisch...
Hi,


Code:
da leg ich das im UserForm4 fest


und ich brauche nur ein X eintragen, der Rest geht genauso automatisch!
Seiten: 1 2