Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Mit VB Script bzw. Makro Tabellenreihen kopieren

Frage Microsoft Microsoft Office

Mitglied: Sebastian-

Sebastian- (Level 1) - Jetzt verbinden

04.03.2009, aktualisiert 09:46 Uhr, 4652 Aufrufe, 11 Kommentare

Hallo liebe Leute!

Ich habe mittlerweile schon gut 4-5 Stunden versucht, dass folgende Problem in Excel zu lösen (auch mittels code Schnippseln aus google usw.), es bis jetzt jedoch leider nicht hinbekommen:

Es geht um 2 Datenblätter:

Blatt1 sieht so aus:

1 | Name1 | Adresse1 | Telefon1
2 | Name2 | Adresse2 | Telefon2
3 | Name3 | Adresse3 | Telefon3
.. | Name.. | Adresse.. | Telefon..
n | Name.. | Adresse..| Telefon..

Blatt2 sieht so aus:

23 |
19 |
1 |
57 |
18 |
9 |
.. |
.. |

Ich möchte nun mittels Makro die Zeilen aus Blatt1 auf Blatt2 kopieren, für die auf Blatt2 Zahlen existieren (die Zahlen auf Blatt2 sind random).

Blatt2 sollte dann so aussehen:

23 | Name23 | Adresse23 | Telefon23
19 | Name19 | Adresse19 | Telefon19
1 | Name1 | Adresse1 | Telefon1
.. |
.. |
usw.

Ich hoffe, jemand kann mir dabei behilflich sein, ich bin nämlich der Verzweiflung nahe

Schon mal vielen Dank im Voraus!

[Edit Biber] Ist doch ganz banal mit SVerweis() lösbar -- also verschoben von "Visual Basic, VBA und .Net" nach "Excel" [Edit]
Mitglied: rubberduck
04.03.2009 um 09:18 Uhr
Hallo Sebastian

Ist vielleicht eine etwas naive Frage...aber wieso machst Du es nicht einfach mit einem SVERWEIS?

Gruss
Rubberduck
Bitte warten ..
Mitglied: Sebastian-
04.03.2009 um 09:28 Uhr
Hallo Rubberduck,

ganz einfach, weil die Zahlen auf Blatt2 immer random-generiert werden.. und da ist es etwas umständlich, jedes mal einen Zellenverweis einzustellen.
Bitte warten ..
Mitglied: rubberduck
04.03.2009 um 09:31 Uhr
Könntest Du das .xls mal raufstellen?
Ich möchte zwar nichts behaupten, aber ich denke, dass es gehen sollte...
Bitte warten ..
Mitglied: Sebastian-
04.03.2009 um 09:41 Uhr
Das kann ich aus Datenschutzgründen leider nicht tun.
Bitte warten ..
Mitglied: rubberduck
04.03.2009 um 09:45 Uhr
...

Ich hoffe, dass das nur ein witz war...

Kannst ja die besonders schützenswerte Daten rausnehmen.
Und ob dort jetzt "blabla" oder "labla" drinsteht, tut glaub ich nichts zur Sache.
Bitte warten ..
Mitglied: optimax
04.03.2009 um 10:51 Uhr
Die Adressen aus Blatt1 sollten lückenlos ab Zeile x untereinander stehen. Wenn dem so ist einfach mit einer for next Schleife suche ab zeile x nachfolgend nach z.B. >0 dann Zeilenummer merken, adressdaten merken (Merken=in Variablen einlesen). Die Variablen als Public deklarieren.
Dann in Blatt2 nach Vorhandensein der Adressnummer suchen, wenn gefunden die Daten aus den Variablen in die entsprechenden Felder schreiben. Wenn nicht vorhanden next.
Sind die Blätter in verschiedenen Arbeitsmappen oder in der selben Mappe????

So könntest Du die Anzahl der Adressen ermitteln, sucht in Spalte A ab Zeile A4 nach einer Leerzelle:

Columns("A").Find("", After:=[A3]).Select
AdressAnzahl = Selection.Row - 4

So könnte es funktionieren, Annahme es sind 2 Arbeitsmappen und die Daten sind ab Zeile 4/SpalteA..., ggfs. die Mappen-/Blatt Namen anpassen:

Public NameTxt
Public AdresseTxt
Public TelefonTxt
Public AdressNr
Public AdressAnzahl

Sub Adressen_Uebertragen()

Application.Workbooks("Mappe1_Adressen.XLS").Activate
Application.Sheets("Tabelle1").Activate

Columns("A").Find("", After:=[A3]).Select
AdressAnzahl = Selection.Row - 4

For i = 1 To AdressAnzahl
NameTxt = ""
AdresseTxt = ""
TelefonTxt = ""

Application.Workbooks("Mappe1_Adressen.XLS").Activate
Application.Sheets("Tabelle1").Activate

AdressNr = ActiveSheet.Cells(i + 3, 1).Value
NameTxt = ActiveSheet.Cells(i + 3, 2).Value
AdresseTxt = ActiveSheet.Cells(i + 3, 3).Value
TelefonTxt = ActiveSheet.Cells(i + 3, 4).Value

'Blatt2 muss jetzt aktiviert werden....

Application.Workbooks("Mappe2_Adressen_Kopiert.XLS").Activate
Application.Sheets("Tabelle1").Activate
For k = 1 To AdressAnzahl
If ActiveSheet.Cells(k + 3, 1).Value = AdressNr Then
ActiveSheet.Cells(k + 3, 2).Value = NameTxt
ActiveSheet.Cells(k + 3, 3).Value = AdresseTxt
ActiveSheet.Cells(k + 3, 4).Value = TelefonTxt
GoTo Naechste_Adresse
End If
Next 'k
Naechste_Adresse:
Next 'i

End Sub
......
Das ganze ist natürlich ohne Fehlerprozedur. Die beiden Mappen müssen geöffnet sein.

Gruß OpTiMaX
Bitte warten ..
Mitglied: rubberduck
04.03.2009 um 10:58 Uhr
bin immer noch überzeugt, dass es ohne VBA geht.
rein nur mit formeln...
Bitte warten ..
Mitglied: Sebastian-
04.03.2009 um 11:45 Uhr
Hallo OpTiMaX, danke für deinen Ansatz. Die Worksheets sind alle in der selben Arbeitsmappe.

Ich habe schon einen Ansatz hinbekommen:

Sub Zeilen_kopieren()
Dim a As Long, i As Long
Application.ScreenUpdating = False
a = 1
For i = 1 To 29
If Worksheets("CE").Cells(i, "A") = Worksheets("Tabelle1").Cells(i, "A") Then
Worksheets("CE").Rows(i).Copy _
Destination:=Worksheets("Tabelle1").Rows(i)
a = a + 1
End If
Next i
Application.ScreenUpdating = True

End Sub

Allerdings kopiert er mir hier nur die Zeilen, in denen die Nummer von Blatt1 mit der Nummer auf Blatt2 übereinstimmt. Also zum Beispiel:

Auf Blatt1 steht in Zelle A23 die Zahl 22.
Durch den Zufallsgenerator wurde auf Blatt2 in Zelle A23 ebenfalls die Zahl 22 generiert -> Zeile von Zelle A23 wird von Blatt1 korrekt auf Blatt2 kopiert.

Alle anderen Zeilen (z.B. Blatt1 A14 = 13; Blatt2 A14 = 25) werden nicht kopiert.


Es soll einfach so sein, dass er sich von Blatt2 die Zelle A1 nimmt (z.B. Wert 42), dann in Blatt1 springt und die Zeile kopiert, in der A=42 ist.
Das gleiche dann für A2 auf Blatt2 (z.B. Wert 13), dann in Blatt1 springen und Zeile kopieren, in der A=13 ist. usw.
Bitte warten ..
Mitglied: optimax
04.03.2009 um 12:28 Uhr
Dann brauchst Du die Mappe nicht zu wechseln.

Public NameTxt
Public AdresseTxt
Public TelefonTxt
Public AdressNr
Public AdressAnzahl

Sub Adressen_Uebertragen()

Application.Sheets("Blatt1").Activate

Columns("A").Find("", After:=[A3]).Select
AdressAnzahl = Selection.Row - 4

For i = 1 To AdressAnzahl
NameTxt = ""
AdresseTxt = ""
TelefonTxt = ""

Application.Sheets("Blatt1").Activate

' Beschreibung... ActiveSheet.Cells(ZeileNummer,SpalteNummer)
AdressNr = ActiveSheet.Cells(i + 3, 1).Value
NameTxt = ActiveSheet.Cells(i + 3, 2).Value
AdresseTxt = ActiveSheet.Cells(i + 3, 3).Value
TelefonTxt = ActiveSheet.Cells(i + 3, 4).Value

'Blatt2 muss jetzt aktiviert werden....

Application.Sheets("Blatt2").Activate

For k = 1 To AdressAnzahl
If ActiveSheet.Cells(k + 3, 1).Value = AdressNr Then
ActiveSheet.Cells(k + 3, 2).Value = NameTxt
ActiveSheet.Cells(k + 3, 3).Value = AdresseTxt
ActiveSheet.Cells(k + 3, 4).Value = TelefonTxt
GoTo Naechste_Adresse
End If
Next 'k
Naechste_Adresse:
Next 'i

End Sub
Bitte warten ..
Mitglied: Sebastian-
04.03.2009 um 12:47 Uhr
Suuuuuper! Es läuft! Vielen vielen Dank, optimax!
Bitte warten ..
Mitglied: optimax
04.03.2009 um 14:00 Uhr
Zitat von rubberduck:
bin immer noch überzeugt, dass es ohne VBA geht.
rein nur mit formeln...

in diesem Fall mit Sverweis und dynamische Felddefinition...

@108269

Gern geschehen
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(2)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Outlook & Mail
gelöst Email Anhänge speichern VB Script aber nur bestimmte Dateitypen (Outlook) (4)

Frage von LindeUnimog zum Thema Outlook & Mail ...

VB for Applications
gelöst VB Script rekursiv statt nur ein Ordner (4)

Frage von Saschaaaaa zum Thema VB for Applications ...

Batch & Shell
gelöst Script SFTP Dateien kopieren (10)

Frage von bnfk859-forum zum Thema Batch & Shell ...

VB for Applications
gelöst VB Script nach gefundenem Wort die nächsten 4 Zeichen ersetzten (2)

Frage von deutsch73 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (10)

Frage von 1410640014 zum Thema Backup ...