Clever-Excel-Forum

Normale Version: Tabellenbereiche per VBA Verschachteln
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
hallo,

ich habe hier einen VBCode

PHP-Code:
Sub Verschachteln()
 
   Dim ws1 As Worksheetws2 As Worksheetws As Worksheetr1 As Ranger2 As Range
    Set ws1 
ThisWorkbook.Worksheets("Tabelle1")
 
   Set ws2 ThisWorkbook.Worksheets("Tabelle2")
 
   Set ws ThisWorkbook.Worksheets("Tabelle3")
 
   Set r1 ws1.Range("A1:D100")
 
   Set r2 ws2.Range("E1:H100")
 
   
    For i 
1 To r1.Rows.Count
        fz 
ws.Cells(Rows.Count1).End(xlUp).Row 1
        r1
.Rows(i).Copy ws.Cells(fz1)
 
       r2.Rows(i).Copy ws.Cells(fz 11)
 
   Next
End Sub 

Ich habe aber nicht 3 verschiedene Tabellenblätter als nicht 1,2,3
sondern nur ein Tabellenblatt1

PHP-Code:
Set ws1 ThisWorkbook.Worksheets("Tabelle1")
 
  Set ws2 ThisWorkbook.Worksheets("Tabelle2"
Ist klar Tabelle1 für ws1
und Tabelle1 für ws2

Nun mein Problem:
PHP-Code:
Set ws ThisWorkbook.Worksheets("Tabelle3"
Dies soll auch Tabellenblatt1 sein und zwar die Spalte GE

Wie ändere ich das?
Wie schreibt man/Frau das?

danke für jede Hilfe

LG
Angelina
Hallo Angelina,


Zitat:Ich habe aber nicht 3 verschiedene Tabellenblätter als nicht 1,2,3

sondern nur ein Tabellenblatt1

Dann brauchst du auch nur ein Tabellenblatt deklarieren bzw. intitalisieren oder kannst es gleich ganz weg lassen da ohnehin nur in den einem Blatt gearbeitet wird.


Code:
Sub Verschachteln()
   Dim ws As Worksheet 'deklarieren
   Dim r1 As Range
   Set ws = ThisWorkbook.Worksheets("Tabelle1") 'initalisieren
   Set r1 = ws.Columns("GE:GE") 'Dies soll auch Tabellenblatt1 sein und zwar die Spalte GE
End Sub

War das jetzt die Frage oder soll damit auch noch etwas gemacht werden?
:) aber an Nachfragen bist Du sicherlich schon gewöhnt.
(24.02.2015, 12:05)chris-ka schrieb: [ -> ]Hallo Angelina,



Zitat:Ich habe aber nicht 3 verschiedene Tabellenblätter als nicht 1,2,3

sondern nur ein Tabellenblatt1

Dann brauchst du auch nur ein Tabellenblatt deklarieren bzw. intitalisieren oder kannst es gleich ganz weg lassen da ohnehin nur in den einem Blatt gearbeitet wird.



Code:
Sub Verschachteln()
   Dim ws As Worksheet 'deklarieren
   Dim r1 As Range
   Set ws = ThisWorkbook.Worksheets("Tabelle1") 'initalisieren
   Set r1 = ws.Columns("GE:GE") 'Dies soll auch Tabellenblatt1 sein und zwar die Spalte GE
End Sub

War das jetzt die Frage oder soll damit auch noch etwas gemacht werden?
:) aber an Nachfragen bist Du sicherlich schon gewöhnt.

hallo chris-ka,

ja ja ... beschämendes Verhalten ... aber vergessen wir es :15:

hm... dein Vorschlag verstehe ich jetzt nicht ganz
Warum?


woher ist in deinem Vorschlag der Bereich bekannt?

Code:
Set r1 = ws1.Range("A1:D100")
    Set r2 = ws2.Range("E1:H100")
Tabellenblatt1 hat 3 Spalten
sagen wir mal
Spalte A
Spalte B
und die Spalte GE

A und B wird nach GE verschachtelt - zeilenweise

oder denke ich wieder falsch?

LG
Angelina
Hallo Angelina,

versuch es mal so
Code:
Sub Verschachteln2()
   Dim ws1 As Worksheet, r1 As Range, r2 As Range
   Set ws1 = ThisWorkbook.Worksheets("Tabelle1")
   
   Set r1 = ws1.Range("A1:D100")
   Set r2 = ws1.Range("E1:H100")
   
   For i = 1 To r1.Rows.Count
       fz = ws1.Cells(Rows.Count, 187).End(xlUp).Row + 1
       r1.Rows(i).Copy ws1.Cells(fz, 187)
       r2.Rows(i).Copy ws1.Cells(fz + 1, 187)
   Next
End Sub
Gruß
Max
Hi,


Code:
Sub Verschachteln()
   Dim ws As Worksheet, i As Long, fz as long
   Set ws = ThisWorkbook.Worksheets("Tabelle1")
   With ws
       For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row 'letzte Zeile in Spalte A auf dem Blatt Tabelle1
           fz = .Cells(Rows.Count, "GE").End(xlUp).Row + 1 'erste freie Zelle in Spalte GE
           .Cells(i, 1).Copy .Cells(fz, "Ge") 'kopiere die Zellen aus A in Spalte GE
           .Cells(i, 2).Copy .Cells(fz + 1, "GE") 'kopiere die Zellen aus B in Spalte GE
       Next
   End With
End Sub


wobei jetzt nicht zeilenweise sondern Zellen in Spalte GE zusammengeführt werden.
Hi Chris,

so wie ich das verstehe wurde in dem Ursprungs-Makro doch zeilenweise aus unterschiedlichen Bereichen und Blättern
kopiert und dann jede gerade kopierte Zeile unter die zuvor kopierte Zeile eingefügt.
Soll das jetzt anders sein?

Gruß
Max
(24.02.2015, 13:07)Max schrieb: [ -> ]Hi Chris,

so wie ich das verstehe wurde in dem Ursprungs-Makro doch zeilenweise aus unterschiedlichen Bereichen und Blättern
kopiert und dann jede gerade kopierte Zeile unter die zuvor kopierte Zeile eingefügt.
Soll das jetzt anders sein?

Gruß
Max

Hallo Max,

keine Ahnung!
ich habe lt. den Angaben von Angelina den Code jetzt umgebaut. (siehe Zitat)
Aber ich gebe Dir Recht der Ursprungscode und die Beschreibung was erreicht werden sollte weichen von einander ab....
mal schauen was Angelina dazu sagt.

Zitat:sagen wir mal

Spalte A
Spalte B
und die Spalte GE

A und B wird nach GE verschachtelt - zeilenweise

lg
(24.02.2015, 13:07)Max schrieb: [ -> ]Hi Chris,

so wie ich das verstehe wurde in dem Ursprungs-Makro doch zeilenweise aus unterschiedlichen Bereichen und Blättern
kopiert und dann jede gerade kopierte Zeile unter die zuvor kopierte Zeile eingefügt.
Soll das jetzt anders sein?

Gruß
Max

hallo,

zwei Spalten sollen zeilenweise verschachtelt werden.

Das wäre dann die ZielspalteGE
Erste Zelle aus der SpalteA
Erste Zelle aus der SpalteB
Zweite Zelle aus der SpalteA
Zweite Zelle aus der SpalteB
usw.

habe es nun so:
das geht auch jedoch beginnt das schreiben in der Spalte GE nicht in der ersten Zelle
sondern in der zweiten - es soll aber direkt in der ersten Zeile der Spalte GE anfangen.

Huh

PHP-Code:
Dim ws1 As Worksheetws2 As Worksheetws As Worksheetr1 As Ranger2 As Range
Dim i 
As Long
Dim fz 
As Long



    Set ws1 
ThisWorkbook.Worksheets("F"' Spalte GG
    Set ws2 = ThisWorkbook.Worksheets("F") ' 
Spalte GF
    Set ws 
ThisWorkbook.Worksheets("F"'Spalte GE
    Set r1 = ws1.Range("GG1:GG100") '
A
    Set r2 
ws2.Range("GF1:GF100"'B
    
    For i = 1 To r1.Rows.Count
        fz = ws.Cells(Rows.Count, 187).End(xlUp).Row + 1
        r1.Rows(i).Copy ws.Cells(fz, 187)
        r2.Rows(i).Copy ws.Cells(fz + 1, 187)
      
        
    Next 

Angelina
Damit Du dierekt in die erste Zeile Spalte GE schreibst, musst Du nur die Codezeile
Code:
fz = ws.Cells(Rows.Count, 187).End(xlUp).Row + 1
gegen diese ersetzen
Code:
fz = ws.Cells(Rows.Count, 187).End(xlUp).Row
Gruß
Max
Hallo Angelina,


Code:
Sub Verschachteln()
  Dim ws As Worksheet, i As Long, fz As Long
  Set ws = ThisWorkbook.Worksheets("F")
  fz = 1
  With ws
      For i = 1 To 100 'wenn es 100 sein sollen...
          .Cells(i, "gg").Copy .Cells(fz, "Ge")
          .Cells(i, "gf").Copy .Cells(fz + 1, "GE")
           fz = Cells(Rows.Count, "GE").End(xlUp).Row + 1
      Next
  End With
End Sub

p.s es würde wesentlich schneller gehen wenn man mit einem Array arbeiten würde, wurdest Du das auch in Betracht ziehen?
Seiten: 1 2