Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

die ersten 6 Stellen

die ersten 6 Stellen
26.07.2007 17:34:38
Maik
Hallo,
ich habe da ein kleines Problem. Wie kann ich unter Spalte A alle Zeilen mit gleichem Inhalt in ein neues Blatt kopieren, wobei nur die ersten 6 Stellen ausgelesen werden sollen. Die Werte sind so formatiert: 20050525. Das kommt beispielsweise 5 mal in Spalte A vor. Dann gehts zum Beispiel mit 20050601 in Spalte A weiter usw. Aber ich möchte nur die gleichen (bis zur 6. Stelle) ermitteln und anschließend die dazugehörigen Zeilen in ein neues Blatt kopieren. Das Blatt soll genau so lauten wie diese 6 Stellen. Also dann zum Beispiel 200505.
Das wäre echt klasse wenn hier jemand eine Lösung hätte.
Danke und Grüße
Maik

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: die ersten 6 Stellen
26.07.2007 18:59:00
Chaos
Servus,

Sub kopieren()
Dim r As Integer, z As Integer
Dim n As String, nam As String, nam1 As String
Application.ScreenUpdating = False
nam = ActiveSheet.Name
n = InputBox("Suchstring?")
r = Range("A65536").End(xlUp).Offset(0, 0).Row
Sheets.Add
nam1 = ActiveSheet.Name
With Sheets(nam)
For z = 1 To r Step 1
If Left(.Cells(z, 1).Value, 6) = n Then
.Cells((z, 1).EntireRow.Copy Destination:= Sheets(nam1).Range("A65536").End( _
xlUp).Offset(1, 0)
End if
Next z
End with
With Sheets(nam1)
If Range("A1").Value = "" Then
Sheets(nam).Delete
End if
End with
Application.ScreenUpdating = True
End Sub


ungetestet.
Du gibst z.B. ein 200505, dann sucht das Makro diese und kopiert sie in ein neu angelegtes Blatt. Ist nichts vorhanden in dem Blatt, dann wird dieses wieder gelöscht.
Gruß
Chaos

Anzeige
AW: die ersten 6 Stellen
26.07.2007 19:03:55
Chaos
Ach so,
hatt vergessen, dass das Blatt auch so heißen soll.

Sub kopieren()
Dim r As Integer, z As Integer
Dim n As String, nam As String, nam1 As String
Application.ScreenUpdating = False
nam = ActiveSheet.Name
n = InputBox("Suchstring?")
r = Range("A65536").End(xlUp).Offset(0, 0).Row
Sheets.Add
nam1 = ActiveSheet.Name
With Sheets(nam)
For z = 1 To r Step 1
If Left(.Cells(z, 1).Value, 6) = n Then
.Cells((z, 1).EntireRow.Copy Destination:= Sheets(nam1).Range("A65536").End( _
xlUp).Offset(1, 0)
End if
Next z
End with
With Sheets(nam1)
If .Range("A2").Value = "" Then
.Delete
Else
ThisWorksheet.Name = n
End if
End with
Application.ScreenUpdating = True
End Sub


Waren ein paar kleinere Schreibfehler drin.
jetzt müsste es passen.
Gruß
Chaos

Anzeige
AW: die ersten 6 Stellen
26.07.2007 20:55:00
Maik
Hallo Chaos,
klasse, großartig. :-) Funktioniert super. Aber eine Bitte noch Chaos. Kannst du nochmal schauen / erweitern, das es ohne InputBox / Suchstring geht. Ich meine das automatisch gesucht wird und alle gleichen kopiert werden. Aber wie schon gesagt, GROSSARTIG GENIAL. DANKE!!!!
Danke + Grüße
Maik

AW: die ersten 6 Stellen
26.07.2007 21:26:00
Chaos
Servus Maik,
ist alles machbar, aber was willst du suchen? Wenn du 1000 verschiedene Werte hast z.B., dann müsstest du 1000 verschiedene If Anweisungen oder Select Case-Anweisungen schreiben.
Wie viel verschiedene Möglichkeiten gibt es denn von dem, was gesucht werden kann?
z.B. 200505, 200506, 200507 und das war es oder wesentlich mehr ?
Du kannst dir auch eine Zelle für den Suchstring reservieren, wo du eingibst, was du suchen möchtest.
Dann statt:
n = InputBox..., eben z.B. n = Range("A1").Value
Gruß
Chaos

Anzeige
AW: die ersten 6 Stellen
26.07.2007 21:36:00
Maik
Hai Chaos,
super das du noch online bist. Also das wäre für jeden Monat im Jahr. Also am Besten dann im Workbook 12 Tabellenblätter die automatisch erzeugt werden.
Grussi
Maik

AW: die ersten 6 Stellen
26.07.2007 22:04:08
Chaos
Das mit dem Hai nehm ich dir übel, ich habe nichts von einem Raubfisch.
Aber jetzt mal Spass beiseite.
Das versteh ich nicht so richtig. Was fragst du denn jetzt ab? Monate?
Erklär mal genauer, was du willst.
Gruß
Chaos

AW: die ersten 6 Stellen
26.07.2007 22:24:39
Maik
Oh sorry Chaos, ;-)
war nicht so gemeint, grins. So wie du schon per Eingabe gesucht hast z.B. 200505 möchte ich quasi, das automatisch jede Zelle in Spalte A miteinander überprüft/verglichen wird, und dann alle gleichen (komplette Zeile) wie schon von dir gelöst in einem seperatem Blatt kopiert werden. Ich hoffe du weißt was ich meine :-(
20050502 chaos
20050503 Maik
20050602 Hallo
20050605 Test
20050615 Test1
20050630 Test2
Also in diesem Fall wären es 2 neue Blätter die dann lauten "200505" und "200506" mit den entsprechenden kopierten Zeilen. Das aber wie schon von mir erwähnt/gewünscht automatisch.
Also alles was so in Spalte A so auftaucht. Um so mehr neue Blätter werden es dann.
Weißt du was ich meine ?
Danke und Grussi
Maik

Anzeige
AW: die ersten 6 Stellen
26.07.2007 22:30:49
Chaos
Servus Maiki,
hab ich schon verstanden. Jetzt ist nur noch die Frage, ob es nur 2005-er gibt, oder ob auch andere jahre existieren, z.B. 200601, u.sw..
Komme aber heute nicht mehr dazu. Wenn morgen also genehm ist, dann schreib ich dir einen Code, der das alles automatisch macht.
Gruß
Chaos

AW: die ersten 6 Stellen
26.07.2007 22:44:00
Maik
Hey Chaos,
ja, es sind noch andere Jahre vorhanden. In der Spalte A können mehere Jahre auftauchen. Oh Man, sorry dafür. Ausdrücken per Text ist gar nicht soooooooooo einfach. Super, natürlich ist morgen ok. Ich wünsche dir eine gute Nacht und bis morgen.
Grussi
Maiki

Anzeige
AW: die ersten 6 Stellen
27.07.2007 09:44:00
Chaos
Servus,
das hatte ich befürchtet.
Schau mal das ist jetzt der Code für ein einziges Jahr, zeimlich lang oder?

Sub kopieren()
Dim z As Integer, r As Integer
Dim nam As String, nam1 As String, nam2 As String, nam3 As String, nam4 As String, nam5 As  _
String, nam6 As String, nam7 As String, nam8 As String, nam9 As String, nam10 As String, nam11 As String, nam12 As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
r = Sheets("Tabelle1").Range("A65536").End(xlUp).Offset(0, 0).Row
nam = Sheets("Tabelle1").Name
Sheets.Add
nam1 = ActiveSheet.Name
Sheets.Add
nam2 = ActiveSheet.Name
Sheets.Add
nam3 = ActiveSheet.Name
Sheets.Add
nam4 = ActiveSheet.Name
Sheets.Add
nam5 = ActiveSheet.Name
Sheets.Add
nam6 = ActiveSheet.Name
Sheets.Add
nam7 = ActiveSheet.Name
Sheets.Add
nam8 = ActiveSheet.Name
Sheets.Add
nam9 = ActiveSheet.Name
Sheets.Add
nam10 = ActiveSheet.Name
Sheets.Add
nam11 = ActiveSheet.Name
Sheets.Add
nam12 = ActiveSheet.Name
With Sheets(nam)
For z = 1 To r Step 1
Select Case Left(.Cells(z, 1).Value, 6)
Case "200501":
.Cells(z, 1).EntireRow.Copy Destination:=Sheets(nam1).Range("A65536").End( _
xlUp).Offset(1, 0)
Case "200502":
.Cells(z, 1).EntireRow.Copy Destination:=Sheets(nam2).Range("A65536").End( _
xlUp).Offset(1, 0)
Case "200503":
.Cells(z, 1).EntireRow.Copy Destination:=Sheets(nam3).Range("A65536").End( _
xlUp).Offset(1, 0)
Case "200504":
.Cells(z, 1).EntireRow.Copy Destination:=Sheets(nam4).Range("A65536").End( _
xlUp).Offset(1, 0)
Case "200505":
.Cells(z, 1).EntireRow.Copy Destination:=Sheets(nam5).Range("A65536").End( _
xlUp).Offset(1, 0)
Case "200506":
.Cells(z, 1).EntireRow.Copy Destination:=Sheets(nam6).Range("A65536").End( _
xlUp).Offset(1, 0)
Case "200507":
.Cells(z, 1).EntireRow.Copy Destination:=Sheets(nam7).Range("A65536").End( _
xlUp).Offset(1, 0)
Case "200508":
.Cells(z, 1).EntireRow.Copy Destination:=Sheets(nam8).Range("A65536").End( _
xlUp).Offset(1, 0)
Case "200509":
.Cells(z, 1).EntireRow.Copy Destination:=Sheets(nam9).Range("A65536").End( _
xlUp).Offset(1, 0)
Case "200510":
.Cells(z, 1).EntireRow.Copy Destination:=Sheets(nam10).Range("A65536").End( _
xlUp).Offset(1, 0)
Case "200511":
.Cells(z, 1).EntireRow.Copy Destination:=Sheets(nam11).Range("A65536").End( _
xlUp).Offset(1, 0)
Case "200511":
.Cells(z, 1).EntireRow.Copy Destination:=Sheets(nam12).Range("A65536").End( _
xlUp).Offset(1, 0)
End Select
Next z
End With
With Sheets(nam1)
If .Range("A2").Value  "" Then
.Name = "200501"
Else
.Delete
End If
End With
With Sheets(nam2)
If .Range("A2").Value  "" Then
.Name = "200502"
Else
.Delete
End If
End With
With Sheets(nam3)
If .Range("A2").Value  "" Then
.Name = "200503"
Else
.Delete
End If
End With
With Sheets(nam4)
If .Range("A2").Value  "" Then
.Name = "200504"
Else
.Delete
End If
End With
With Sheets(nam5)
If .Range("A2").Value  "" Then
.Name = "200505"
Else
.Delete
End If
End With
With Sheets(nam6)
If .Range("A2").Value  "" Then
.Name = "200506"
Else
.Delete
End If
End With
With Sheets(nam7)
If .Range("A2").Value  "" Then
.Name = "200507"
Else
.Delete
End If
End With
With Sheets(nam8)
If .Range("A2").Value  "" Then
.Name = "200508"
Else
.Delete
End If
End With
With Sheets(nam9)
If .Range("A2").Value  "" Then
.Name = "200509"
Else
.Delete
End If
End With
With Sheets(nam10)
If .Range("A2").Value  "" Then
.Name = "200510"
Else
.Delete
End If
End With
With Sheets(nam11)
If .Range("A2").Value  "" Then
.Name = "200511"
Else
.Delete
End If
End With
With Sheets(nam12)
If .Range("A2").Value  "" Then
.Name = "200512"
Else
.Delete
End If
End With
Application.DisplayAlerts = False
Application.ScreenUpdating = True
End Sub


Du kannst so einen Code entweder für jedes Jahr zusammenstellen (einmalige Änderung) oder eben man kann den Code so umschreiben, dass du das Jahr eingibst und die Aktion dann ausführen lässt.
Weiterhin ist es nicht möglich, ubegrenzt viele tabellenblätter anzulegen (stark abhängig vom Arbeitsspeicher). Sollen die Tabellenblätter immer da sein oder ist das nur eine temporäre Auswertungssache.
Im 2. Fall würde ich dir eine Löschschleife empfehlen und zwar beim Öffnen oder Schließen der Datei:


Sub löschen()
Dim wks as Worksheet
Application.DisplayAlerts = False
For Each wks In activeWorkbook.Worksheets
If wks.Name  "Tabelle1" Then ' Quelltabelle
wks.Delete
End if
Next wks
Application.DisplayAlerts = True
End Sub


Schau dir die Beispielmappe an, da habe ich es mit der Jahreseingabe gelöst.
https://www.herber.de/bbs/user/44487.xls
Du hast jetzt die Wahl.
Gruß
Chaos

Anzeige
AW: die ersten 6 Stellen
27.07.2007 10:03:10
Maik
Hallo Chaos,
vielen Dank dafür :-) Ich schaue mir das mal an und werde das ausprobieren. Ich habe jetzt das WE leider keine Zeit dafür. Bin nicht zu Hause. Es wäre übrigens schön wenn wir im Kontakt bleiben könnten. Kann ich dich irgendwie direkt erreichen?
Danke nochmal und viele Grüße
Maiki

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige