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
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
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
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
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.
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
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
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
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
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
die 0 durch eine 1 ersetzen.
Gruß
JöKe
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
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
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
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
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
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
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
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
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
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
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ß
wenn du das Makro in die PERSONL:XLS kopiert hast, ändert sich der Name in PERSONL:XLS!Uhrzeit_VarValue.
Gruß