Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Vba(exel)





Frage

Hallo zusamen, ich möchte eine Zeile ab einer spalte kopieren? mein Vba text sieht so aus: Sub sortiment() Dim index As Integer Dim count As Integer count = 0 Sheets("ARCHIV_10").Activate Worksheets.Add Worksheets(1).Name = "Drehzahl_UR3" With Sheets("ARCHIV_10") For index = 1 To .UsedRange.Rows.count If (.Cells(index, 1).Value = "Drehzahl_UR3") Then count = count + 1 .Rows(index).Copy Destination:=Sheets("Drehzahl_UR3").Rows(count(F5)) End If Next index End With MsgBox (count) End Sub Beim kopierBefehl mache ich was Falsch.. Kann jemanden mir helfen Danke

Antwort 1 von JoeKe

Hallo kare,

leider hab ich deinen Code nicht vollständig verstanden. Aber versuch es mal so:

Option Explicit

Sub sortiment()
Dim index As Long
Dim zähler As Long
zähler = 0
Sheets("ARCHIV_10").Activate
Worksheets.Add
Worksheets(1).Name = "Drehzahl_UR3"
For index = 1 To Sheets("ARCHIV_10").Cells(Rows.count, 1).End(xlUp).Row
If Sheets("ARCHIV_10").Cells(index, 1).Value = "Drehzahl_UR3" Then
zähler = zähler + 1
Sheets("ARCHIV_10").Rows(index).Copy _
Destination:=Sheets("Drehzahl_UR3").Rows(zähler)
End If
Next index
MsgBox (zähler)
End Sub


Du solltest keine Namen für Variable verwenden, die VBA-Schlüsselwörter sind (count).

Gruß

JöKe

Antwort 2 von Kare

Hallo jöke,

Dein Programm macht genau das,was mein auch macht,,,,,,
die Frage ist :
ich kopiere jede zeile vom Archiv10,die "Drehzahl_UR3"als wert hat,und das für die Ganze Liste(A1bis ende), und lasse die wieder in Drehzahl_UR3 Arbeitsblatt ausgeben.
Nun Archiv10 will ich nach anderen Namen prüfen Bsp
" strom_auf",die in archiv10 auch genau so gelistet sind wie "Drehzahl_UR3", und in der selben Arbeitsblatt wieder ausgeben. dieses mal ab der spalte F.
so mal anders für:
Drehzah_UR3 brauche ich:A(1....)bisE(1....) Ausgabebereich
strom_auf brauche ich:F(1...) bisJ(1...) ausgabebereich
in Archi10 sind "drehzah_UR3" und "Strom_auf" durcheinander gelistet.
A B C D E
Drehzah_UR3 Wert Wert wert wert
strom_auf w w w w
Drehzah_UR3 w w w w
Drehzah_UR3 w w w wert
strom_auf
strom_auf (und so weiter)
ungefähr so

Antwort 3 von JoeKe

Hallo kare,

ganz habe ich es immer noch nicht verstanden, was wan wo hin soll. Aber versuch mal dies:

Option Explicit

Sub sortiment()
Dim zähler As Long, loZeile1 As Long, loZeile2 As Long
Sheets("ARCHIV_10").Activate
Worksheets.Add
Worksheets(1).Name = "Drehzahl_UR3"
zähler = 1
loZeile1 = 0
loZeile2 = 0
Do While Sheets("ARCHIV_10").Cells(zähler, 1) <> ""
If Sheets("ARCHIV_10").Cells(zähler, 1).Value = "Drehzahl_UR3" Then
loZeile1 = loZeile1 + 1
Sheets("ARCHIV_10").Range("A" & zähler & ":E" & zähler).Copy _
Destination:=Sheets("Drehzahl_UR3").Cells(loZeile1, 1)
ElseIf Sheets("ARCHIV_10").Cells(zähler, 1).Value = "Strom_auf" Then
loZeile2 = loZeile2 + 1
Sheets("ARCHIV_10").Range("A" & zähler & ":E" & zähler).Copy _
Destination:=Sheets("Drehzahl_UR3").Cells(loZeile2, 6)
End If
zähler = zähler + 1
Loop
MsgBox loZeile1
MsgBox loZeile2
End Sub


Gruß

JöKe

Antwort 4 von Kare

erstmal Danke für deine Hilfe

du hast mich doch Verstanden es lauft!
jetzt möchte ich die Sortierung für mehrere Namen aus der Archiv_10( es heisst: es gibt neben Drehzahl_UR3 und Strom_auf noch 14 andere)
Die nächste Sortierung soll von K(1....) bisO(1...) eingetragen werden danach die Nächste vonP(1...) bisT(1....) und so geht es weiter

Do While Sheets("ARCHIV_10").Cells(zähler, 1) <> ""
Sheets("ARCHIV_10").Range("A" & zähler & ":E" & zähler).Copy _
Destination:=Sheets("Drehzahl_UR3").Cells(loZeile1, 1)
Kannst du mir die Beiden Zeilen kommentieren

danke

Antwort 5 von JoeKe

Hallo Kare,

freut mich das es funktioniert. Leider hab ich grade eine groben Fehler meinerseits entdeckt.

Do While Sheets("ARCHIV_10").Cells(zähler, 1) <> ""
...
Loop


sagt mach das folgende bis du in Tabelle("ARCHIV_10) in Spalte A auf eine leere Zelle trifst.
Und genau das kann zu Fehlern führen, wenn dann noch Werte darunter stehen.
Besser ist eine For...Next Schleife.
Bei

For zähler = 1 To Sheets("ARCHIV_10").Cells(Rows.count, 1).End(xlUp).Row
...
Next


werden die Zeilen 1 bis zur letzten gefüllten Zeile der Spalte A abgearbeitet.

Option Explicit

Sub sortiment()
Dim zähler As Long, loZeile1 As Long, loZeile2 As Long
Sheets("ARCHIV_10").Activate
Worksheets.Add
Worksheets(1).Name = "Drehzahl_UR3"
loZeile1 = 0
loZeile2 = 0
For zähler = 1 To Sheets("ARCHIV_10").Cells(Rows.count, 1).End(xlUp).Row
If Sheets("ARCHIV_10").Cells(zähler, 1).Value = "Drehzahl_UR3" Then
loZeile1 = loZeile1 + 1
Sheets("ARCHIV_10").Range("A" & zähler & ":E" & zähler).Copy _
Destination:=Sheets("Drehzahl_UR3").Cells(loZeile1, 1)
ElseIf Sheets("ARCHIV_10").Cells(zähler, 1).Value = "Strom_auf" Then
loZeile2 = loZeile2 + 1
Sheets("ARCHIV_10").Range("A" & zähler & ":E" & zähler).Copy _
Destination:=Sheets("Drehzahl_UR3").Cells(loZeile2, 6)
End If
Next
MsgBox loZeile1
MsgBox loZeile2
End Sub


Sheets("ARCHIV_10").Range("A" & zähler & ":E" & zähler).Copy _
Destination:=Sheets("Drehzahl_UR3").Cells(loZeile2, 6)


heißt kopiere zeilenweise die Spalten A - E vom Blatt "ARCHIV_10". Für das Ziel (Destination) reicht eine Zelle (wie beim manuellen kopieren zusammenhängender Bereiche auch). Die Zeilen (loZeile) werden dabei von 1 solange hochgezählt wie die For...Next Schleife durchlaufen wird. Die Spalte wird durch die Ziffer bei Cells(loZeile, 1)=SpalteA fest vergeben.
Wenn du nun weitere abfragen einbauen willst, must du

ElseIf Sheets("ARCHIV_10").Cells(zähler, 1).Value = "Strom_auf" Then
loZeile2 = loZeile2 + 1
Sheets("ARCHIV_10").Range("A" & zähler & ":E" & zähler).Copy _
Destination:=Sheets("Drehzahl_UR3").Cells(loZeile2, 6)


kopieren, für jeden weiterne Fall eine neue loZeile deklariere (loZeile3, loZeile4 usw.) und entsprechend ändern und die Zielspalte anpassen (1=A, 6=F, K=11 usw.).

Gruß

JöKe

Antwort 6 von Kare

hallo jöKe,

ich habe gestern nicht mehr geschafft,das programm auszuführen,aber dafür heute,,es klappt supper
danke dir noch mal für deine hilfe.
ich bin am überlegen , wie ich das ganze ab die zweite zeile eintrage, und dafür die erste zeile für jeden dieser namen als Titel zu nehmen d.h :
die Drehzah_UR3-Daten werden von spalte A bis spalte E eingetragen----> ich möchte jetzt die erste Zeile von A bis E als Titel für diese Daten nehmen:
in der erste zeile von A bis E wird Drehzahl geschrieben und ab der zweite Zeile kommt die Sortierung, die wir gemacht haben.
bis dann.
liebe Grüsse

Antwort 7 von JoeKe

Hallo Kare,

leider versteh ich deine Tabellenaufbau immer noch nicht 100%ig.
Aber wenn du erst ab der zweiten Zeile die Daten eintragen willst, musst du nur bei

loZeile1 = 0
loZeile2 = 0
usw.


die 0 durch eine 1 ersetzen.

Gruß

JöKe

Antwort 8 von Kare

Hallo jöKe


ich möchte in der erste Zeile die betitlung der mit dem oben VBA Programm kopierten Daten eingeben,und das wäre Für ( Drehzahl_UR3) von A1 bis E1. für Strom_auf von F1 bis J1
mit der betitlung meine ich : ich kann ein wort eingben,das in dem Breich von A1 bis E1 mit dem Programm gescrieben,,,schöner wäre es auch ,wenn man diesen Breich Färben könnte.


schöne grüße
Kare

Antwort 9 von JoeKe

Hallo Kare,

so grob habe ich das schon verstanden. Aber für eine vernünftige Lösung reicht das leider nicht aus.
Kannst du eventuell mal eine Beispieldatei auf netupload hochladen und dann den downloadlink hier posten?
Kann mich dann aber erst Dienstag damit befassen, gehe jetzt erstmal ins Wochenende.

Gruß

JöKe

Antwort 10 von Kare

Hallo jöKe,

ich bin jetzt auch nicht zu Hause. ich schicke den downloadlink, sobald ich die datei auf die vertuelle Festplate abgelegt habe.

ich wünsche ein schönes Wochenende,

liebe Grüsse.

Kare

Antwort 11 von Kare

die Beispielsdatei ist unter der adresse:
http://www.netupload.de/detail.php?img=72f477174fc2b24e5339964681d6a04d.xls


bis dann

Schöne Grüße

Antwort 12 von JoeKe

Moin Kare,

die Datei hab ich erstmal. Nun bräuchte ich aber noch ein Muster wie das Ergebnis aussehen soll. Ist das machbar?

Gruß

JöKe

Antwort 13 von Kare

Hallo JöKe,
ich habe noch mal die Datei mit dem Muster_ergebins hochgeladen, in Tabelle 5 ist das Muster_ergebnis...
die Adresse lautet:http://www.netupload.de/detail.php?img=a5cb557202f0cf847c9d0d05ba250c87.xls

jetzt brauche ich nicht Alle 5 spalten mehr,ich konnte nur mit der Uhrzeit und VarValue-Spalte arbeiten.

kann man das Makro so schreiben, so daß das Makro nicht auf Archiv10 immer sich bezieht, ich habe noch andere dateien mit anderen Namen.
ich glaube,da muss man bei diesem befehl:Sheets("ARCHIV_10").Activate ........ was machen

Antwort 14 von JoeKe

Hallo Kare,

sieh dir mal diese Datei an.
Ich habe eine Schaltfläche eingefügt über die das neue Makro gestartet wird.
Als erstes wirst du nach dem Blatt gefragt, von welchem du die Daten überetragen willst.
Das Blatt das eingefügt wird heißt "Uhrzeit/VarValue".

Gruß

JöKe

Antwort 15 von Kare

hallo JöKe,

es funktioniert Prima.es gibt nur noch eine sache,
wie kann ich das modul,was du geschrieben hast global defenieren.
sobald ,ich eine Andere Archiv Datei mit excel aufmache, defeniert Der VBA ein neues Projekt.
und ich muss immer das Modul unter dem Neuen Projekt kopieren und erst dann ausfüren.


ansonsten Respekt danke.

Gruß
Kare

Antwort 16 von JoeKe

Hallo Kare,

um es in allen Dateien verwenden zukönnen, muss du es in dei PERSONL.XLS verschieben.
Falls es die bei dir noch nicht gibt, kannst du hier bei den Anleitungen nachlesen wie es geht.
Die Schaltfläche die ich in das Beispiel eingebaut habe, verliert dann unter Umständen den Bezug.

Gruß

JöKe

Antwort 17 von Kare

he JöKe,

ich habe schon versucht ,es geht nicht,
ich habe das Modul in meinem PERSONL.XLS kopiert
hat nicht viel geholfen.
bis dann

Antwort 18 von JoeKe

Hallo Kare,

wenn du das Makro in die PERSONL:XLS kopiert hast, ändert sich der Name in PERSONL:XLS!Uhrzeit_VarValue.

Gruß