Programmierung in Excel

Hallo zusammen,

ich benötige für das Visual Basic von Excel nen Programmcode.
Leider bin ich mit dieser Programmiersprache nicht sonderlich vertraut, deswegen benötige ich eure Hilfe.

Eine Excel Datei hat ungefähr 90-100 Tabellen.
In der Tabelle X soll er mir aus den Tabellen 1-88 eine gewissen Zeile einfügen, aber nur dann wenn in der Zelle XY der Text „Wiese“ vorkommt.

Ich denke, dies ist nur mit dem Visual Basic von Excel möglich.

Könnt Ihr mir da vielleicht weiterhelfen? Welchen Programmcode benötige ich dafür?

mfg
Matthias

Hallo,

zeichne in Excel ein Makro auf, womit du in etwa das machst, was dein VB-Progamm auch machsen soll. Schau dir dann das Makro an. Mit ein wenig Köpfchen und den Beispielen in der Hilfe zu den Funktionen solltest Du’s schaffen.

LG
Jochen

Hallo Jochen,

wie zeichne ich ein Makro auf, dass etwas nur kopiert, wenn ein bestimmter Wert in einer bestimmten Zelle steht?

mfg
Matthias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

wie zeichne ich ein Makro auf, dass etwas nur kopiert, wenn
ein bestimmter Wert in einer bestimmten Zelle steht?

zugegeben, das ist so direkt nicht möglich. Was du dir auf jeden Fall ansehen kannst, ist der Kopier-Vorgang. Wenn es darum geht, den Inhalt con Zelle X nach Zelle y zu kopieren, ist das eine einfache Zuweisung.

Beim Rumspielen hast du doch aber sicher schonmal Beispiele entdeckt, die mit for each cell in range zB. alle Zellen in einem Bereich durchgehen, und auch, dass mit if condition then command eine Bedingung geprüft wird und eine entsprechende Aktion ausgewührt wird, wenn die Bedingung „wahr“ ist.

Sicher ist die beim Stöbern dann auch aufgefallen, dass eine Zelle ein Objekt ist, mit verschiedenen Eigenschaften. Eine davon ist .Value , die gibt bzw. setzt den Wert, der in einer Zelle steht. Wenn es Text ist, läßt dieser sich auch über die Eigenschaft .Text lesen/schreiben. Zum Kopieren kannst du die Inhalte einer Zelle direkt an eine andere zuweisen ( = ).

Klarer?

Jaja, es hätte ruhig auch eine „ready-to-use“-Lösung sein dürfen, ich weiß, aber denk an das Sprichwort: Gib einem Mann ein Fisch und er hat für einen Tag keinen Hunger. Lehre ihn die Jagd und er wird nie mehr hungern.(oder so ähnlich)

Also, viel Glück bei der Jagd,

LG
Jochen

Hallo moreman.

So, wie das Problem beschrieben ist, müsstest Du eigentlich auch mit der Funktion „SUMMEWENN“ klarkommen.

MfG
Carsten

Eine Excel Datei hat ungefähr 90-100 Tabellen.
In der Tabelle X soll er mir aus den Tabellen 1-88 eine
gewissen Zeile einfügen, aber nur dann wenn in der Zelle XY
der Text „Wiese“ vorkommt.

Hallo Matthias,
hier hast du den Fisch den du haben wolltest. Folgendes Makro kopiert aus den Tabellen 1 bis 88 alle Zeilen, bei denen in Spalte 1 der Begriff „Wiese“ vorkommt und faßt diese in einer neuen Tabelle zusammen. Ich weiß nicht in welcher Spalte bei dir „Wiese“ steht, deswegen müte das unten im Code angepaßt werden und zwar die Zeile: If Sheets(y).Cells(i, 1).Value = „Wiese“ Then. Statt der 1 bei Cells(i, 1) muß dann die Nr. der Spalte hin in der Wiese vorkommt. Außerdem können mit diesem Makro nur 5 Spalten jeder Tabelle übertragen werden. Wenn deine Tabellen mehr Spalten haben, so mußt du unten an gekennzeichneter Stelle weitere Codezeilen einfügen. Ist aber einfach, weil du nur die darüberliegende Zeile kopieren mußt und die Spaltenzahl entsprechend ändern mußt. Und statt TabelleX muß natürlich noch die Nr. der Tabelle angegeben werden in die alles kopiert werden soll. Wenn du diese Änderungen vornimmst und das Makro startest, dann geht die Post richtig ab.

Sub ZeilenKopierenBedingung()
Dim y As Integer
Dim i As Long
Dim ziel As Worksheet
Set ziel = Sheets(„TabelleX“)
For y = 1 To 88
On Error Resume Next
For i = 1 To Sheets(y).UsedRange.Rows.Count
If Sheets(y).Cells(i, 1).Value = „Wiese“ Then
x = 4
Do Until ziel.Cells(x, 1) = „“
x = x + 1
Loop
ziel.Cells(x, 1).Value = Sheets(y).Cells(i, 1).Value
ziel.Cells(x, 2).Value = Sheets(y).Cells(i, 2).Value
ziel.Cells(x, 3).Value = Sheets(y).Cells(i, 3).Value
ziel.Cells(x, 4).Value = Sheets(y).Cells(i, 4).Value
ziel.Cells(x, 5).Value = Sheets(y).Cells(i, 5).Value
'hier weitere Zeilen einfügen, wenn mehr als 5 Spalten übertragen
'werden müssen
End If
Next i
Next y
End Sub

Gruß
Denis

Hallo Denis,

der Code hat mir schon etliches gebracht.
Allerdings möchte ich jetzt noch, dass er mir nur den Inhalt der Zellen A3 bis K3 in die Zieltabelle kopiert und nicht den ganzen Inhalt der jeweiligen Tabellen.
Wie kann ich dies realisieren?

mfg
Matthias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Denis,
der Code hat mir schon etliches gebracht.
Allerdings möchte ich jetzt noch, dass er mir nur den Inhalt
der Zellen A3 bis K3 in die Zieltabelle kopiert und nicht den
ganzen Inhalt der jeweiligen Tabellen.
Wie kann ich dies realisieren?

Hallo Moreman,
A bis K sind 11 Spalten. Da der Code bisher nur 5 Spalten überführt, mußt du wie ich es bereits beschrieben habe, noch 6 Zeilen in den Code schreiben und die Spalten-Nr. bei Cells(i, entsprechende Spalten-Nr.) eintragen. Da das Makro erst ab der 3.Zeile laufen soll, schreibst du im Code statt

„For i = 1 To Sheets(y).UsedRange.Rows.Count“
„For i = 3 To Sheets(y).UsedRange.Rows.Count“

Und schon läuft alles perfekt.
Gruß
Denis

Hallo,

danke für die super Hilfe.
Habe das ganze durch die ein und andere Anpassung so hinbekommen, wie ich das haben will/muss.

mfg
Matthias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]