95 Aufrufe
Gefragt in Tabellenkalkulation von robbi58 Mitglied (807 Punkte)

Einen wunderschönen guten Morgen ans Forum!

Ich muss mein Gedächtnis wieder in Schwung bringen und habe mich für einen Vokabeltrainer entschieden.
Meine Mappe besteht aus ca. 20 Arbeitsblättern mit Namen wie Verben, Nomen, Obst, Gemüse, Restaurant,...

Mit dem folgenden Code (er stammt vom Forumsmitglied M.O.) generiere ich jeweils 5 Zufallswörter aus der 1. Gruppe in Spalte A:

Private Sub CommandButton1_Click()
Sheets("sheet1").Range("A:A").ClearContents

For i = 1 To 5
generate:
RowNum = Application.RoundUp(Rnd() * 15, 0)
If Application.CountIf(Sheets("Vokabel").[A:A], Sheets("Verben").Cells(RowNum, "A")) = 0 Then
Sheets("Vokabel").Range("A" & Rows.Count).End(xlUp).Offset(1).Value = Sheets("Verben").Cells(RowNum, "A").Value
Else
GoTo generate
End If
Next i
Dim obj As Object
End Sub

Die Daten aus Spalte B stammen aus der 2. Gruppe usw.

Mithilfe eines SVerweises möchte ich nun die entsprechenden Bedeutungen rechts daneben einfügen. Mein Denkfehler bei der Planung war, dass ich mit dem SVerweis ja nicht arbeiten kann, da die Daten ja aus unterschiedlichen Arbeitsblättern stammen.

So war der Aufwand bis jetzt für die "Katz".

Ich habe versucht, in die 4 violetten Felder die Suchbegriffe einzugeben und irgendwie eine Verbindung zum S-Verweis und auch zum Code herzustellen. Aber leider ohne Erfolg.

Daher richte ich die Frage ans Forum, wie man mein Problem lösen könnte. Vielleicht denke ich zu kompliziert oder habe schon im Vorhinein einen falschen Weg eingeschlagen.

Ich bedanke mich schon im Voraus für eure Beiträge.

LG Robert

5 Antworten

+1 Punkt
Beantwortet von xlking Mitglied (465 Punkte)

Dann zieh doch die benachbarte Zelle gleich mit rein:

Sheets("Vokabel").Range("A" & Rows.Count).End(xlUp).Offset(1).Value = _
Sheets("Verben").Cells(RowNum, "A").Value

Sheets("Vokabel").Range("A" & Rows.Count).End(xlUp).Offset(0, 1).Value = _
Sheets("Verben").Cells(RowNum, "B").Value

Gruß Mr. K.

0 Punkte
Beantwortet von
Guten Abend, Mr. K.!

Zunächst recht herzlichen Dank für deine Antwort und deine Hilfe für mein Problem.

Wie ich vermutet habe, ist die Lösung meines Problems eine "sehr einfache". Aber mit meinen bescheidenen Kenntnissen in vba war ich überfordert. Ich habe es bereits ausprobiert und es funktioniert genau so, wie ich es mir vorgestellt habe.

Eine Frage hätte ich noch:

RowNum = Application.RoundUp(Rnd() * 123, 0)

Die Blätter enthalten eine sehr unterschiedliche Anzahl von Vokabeln. Bei den Verben sind es z. B. 123, bei anderen Kapiteln wiederum nur 32.

Ich bessere dies für jeden Button aus. Nur sobald ich neue Vokabel hinzufüge oder wieder andere lösche, so muss ich das jeweils manuell vornehmen (bei zu großer Zahl erhalte ich mitunter Leerzellen, bei zu geringer Zahl bleiben manche Vokabel unberücksichtigt). Gibt es eine Möglichkeit, den Code so zu gestalten, dass er bei der ersten leeren Zelle mit "dem Suchen aufhört"? Meine Formulierung klingt jetzt nicht professionell, trotzdem hoffe ich, dass ich des Pudels Kern getroffen habe.

Danke nochmals an Mr. K.

LG Robert
0 Punkte
Beantwortet von robbi58 Mitglied (807 Punkte)

Lieber Mr. K.!

Recht herzlichen Dank für deinen Lösungsvorschlag. Diesen habe ich bereits umgesetzt und es erfüllt voll und ganz meine Wünsche. Leider sind meine vba-Kenntnisse nicht so ausgeprägt, weshalb ich zu keinem Lösungsansatz gekommen bin.

Nun sieht meine Lösung folgendermaßen aus:

Eine Frage, bzw. Anliegen hätte ich noch:

RowNum = Application.RoundUp(Rnd() * 123, 0)

Die Zahl 123 steht ja für alle Zellen, die generiert werden sollen. Aber je nach Thema ist deren Zahl unterschiedlich. Bisher habe ich diese manuell angepasst. Sollte ich aber Vokabel streichen oder hinzufügen, so müsste ich stets auch den Code ändern (das ergibt zum Teile leere Zellen beim Kürzen oder nicht berücksichtigte Vokabel beim Erweitern). Kann man den Code so ändern, dass die Suche bzw. das Generieren nur bis zur letzten ausgefüllten Zeile geschieht. Ich hoffe, ich habe das jetzt halbwegs "professionell" ausgedrückt.

Nochmals recht herzlichen Dank!

LG Robert

0 Punkte
Beantwortet von xlking Mitglied (465 Punkte)

Hi Robbi,

dafür kannst du auf die Excel-Formel Anzahl2 zurückgreifen. Ersetze die fixe Zahl durch:

Application.CountA(Sheets("Verben").Columns("A"))

Gruß Mr. K.

0 Punkte
Beantwortet von robbi58 Mitglied (807 Punkte)

Guten Abend, Mr. K!

Nun ist auch noch die letzte „Baustelle“ beseitigt und ich mit meinem Gedächtnis- und Vokabeltraining beginnen.

Danke für deine Hilfe.

LG Robbi (so nennen mich nur meine Freund/innen, die mich von Jugend an kennen). laugh

...