Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel VBA Schlaufe ähnlich zu SVerweis
#1
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.


Angehängte Dateien Thumbnail(s)
       
Antworten Top
#2
Hallo,

ich werde die Datei nicht anhand der Bilder und dem Quelltext nachbauen. Lade sie doch einfach mal hoch, dann wird dir auch geholfen.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Sorry, dachte evtl reicht es ja mit dem Code. In der Datei betrifft es den Code in der UserForm4


Angehängte Dateien
.xlsm   20180827_Ausbildungsverzeichnis.xlsm (Größe: 104,78 KB / Downloads: 5)
Antworten Top
#4
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.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#5
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.
Antworten Top
#6
(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...
Antworten Top
#7
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.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#8
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?
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#9
(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...
Antworten Top
#10
Hi,


Code:
da leg ich das im UserForm4 fest


und ich brauche nur ein X eintragen, der Rest geht genauso automatisch!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste