Clever-Excel-Forum

Normale Version: Variabele Anzahl an Spalten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo

Es würde mir sehr weiterhelfen wenn jemand ein Blick auf mein Problem werfen könnte und mir dann einen Tip geben könnte.
Ich muss ein bestehendes Marco an einigen Stellen anpassen.
Ich scheitere aber immer an derselben Problemstelle.




Hier steht der funktionierende Code um in Spalte A alle Zellen bis zur letzten automatisch auszufüllen.

Code:
letzteZeile = ActiveWorkbook.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 'in Spalte A ermittelt

'Werte auffüllen
With Range("A1:A2:A3")
.AutoFill Destination:=Range("A1:A" & letzteZeile), Type:=xlFillDefault
End With

Ich müsste nun ähnliches machen, allerdings in der Breite.
Also ich müsste die Werte ausfüllen bis zur vorletzten Spalte für die Zeile 1
Momentan fülle ich IMMER bis zur Zelle 1 der Spalte Y aus.


Code:
   Range("B1").Select
   ActiveCell.FormulaR1C1 = "Zelle 1"
   Range("C1").Select
   ActiveCell.FormulaR1C1 = "Zelle 2"
   Range("B1:C1").Select
   Selection.AutoFill Destination:=Range("B1:Y1"), Type:=xlFillDefault


Neuerdings sind das aber nicht mehr IMMER 24 Zellen (bis zur Spalte Y)

Ich habe mich hier mal versucht


Code:
letzteSpalte = ActiveWorkbook.ActiveSheet.Cells(2, Columns.Count).End(xlToLeft).Column 'in Zeile 2 ermittelt
vorletzteSpalte = letzteSpalte - 1 'vorletzte Spalte

   Selection.AutoFill Destination:=Range("B1:Y1" & votletzte), Type:=xlFillDefault

Allerdings in der Gewissheit dass("B1:Y1"   nicht stimmen kann.  Ich weiss bloß nicht wie es richtig ist.

---------------------------

Später im Ablauf wähle ich momentan den Bereich  ("B1´:Y1")      aus - kopiere ihn und füge ihn in einem anderen Blatt wieder vertikal ein.
Anschliessend dasselbe für den Bereich ("B2:Y2")
Zur Info: B1 bis Y1 ist der Nummer einer Batteriezelle
          in B2 bis Y2 steht der Wert der Batteriespannung

Code:
ActiveWorkbook.Sheets(strTabname).Select
   Range("B1:Y1").Select
   Selection.Copy
   Sheets("Floating").Select
   Range("B6:B29").Select
   Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
       False, Transpose:=True

   ActiveWorkbook.Sheets(strTabname).Select
   Range("B2:Y2").Select
   Application.CutCopyMode = False
   Selection.Copy
   Sheets("Floating").Select
   Range("C6:C29").Select
   Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
       False, Transpose:=True


Das klappt super weil aktuell ja IMMER der fixe Bereich für die 24 Zellen ausgewählt uns eingefügt wird.
Auch hier habe ich das Problem dass bis zu Y1 oder Y2 variabel wird / also bis zur vorletzten Spalte

Ebenfalls wird das eventuell nicht gehen um die kopierten Werte (da variabele Länge) nach ("B6:B29") oder ("C6:C29") einzufügen ??


Vielen Dank

Mit freundlichsten Grüssen  (was überhaupt so möglich ist)
Hallo,

Du bist schon sehr nah Dran am Ergebnis.
Lösch die 1  bei Y1.
Hallo,

Code:
   Range("B1")= "Zelle 1"
   Range("C1")= "Zelle 2"
   Range("B1:C1").AutoFill Destination:=Range(cells(1,2),cells(1, vorletzteSpalte)), Type:=xlFillDefault



Code:
With ActiveWorkbook.Sheets(strTabname)
    .Range(Cells(1, 2), Cells(1, vorletzteSpalte)).Copy
    Sheets("Floating").Range("B6").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
       False, Transpose:=True
    .Sheets(strTabname).Range(Cells(2, 2), Cells(2, vorletzteSpalte)).Copy
    Application.CutCopyMode = False
    Sheets("Floating").Range("C6").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
       False, Transpose:=True




ungetestet!

Hallo atilla,

bist Du Dir da sicher????
Hallo Edgar,

ich bezog mich auf diesen Teil:

Zitat:Zitat:
letzteSpalte = ActiveWorkbook.ActiveSheet.Cells(2, Columns.Count).End(xlToLeft).Column 'in Zeile 2 ermittelt
vorletzteSpalte = letzteSpalte - 1 'vorletzte Spalte

   Selection.AutoFill Destination:=Range("B1:Y1" & votletzte), Type:=xlFillDefault

Allerdings in der Gewissheit dass("B1:Y1"   nicht stimmen kann.  Ich weiss bloß nicht wie es richtig ist.


Aber für mich gilt auch ungetestet: Range("B1:Y" & votletzte) sollte von der Syntax her richtig sein.
Hi,

(11.01.2017, 16:46)atilla schrieb: [ -> ]Aber für mich gilt auch ungetestet: Range("B1:Y" & votletzte) sollte von der Syntax her richtig sein.

und "vorletzteSpalte" ist was anderes als "votletzte"
Hallo Edgar,

sorry Du hast recht, war Blödsinn von mir.

Die Syntax ist zwar richtig, hat aber mit der Aufgabenstellung nichts zu tun.
So, wie Du es mit der Range(cells()) Schreibweise machst, sollte es gelöst werden.

Ich habe einfach nur oberflächlich drüber gelesen und das erste was mir auf-und einfiel nieder geschrieben.
Man sollte sich auch bei scheinbar einfachen Dingen genauso konzentrieren wie bei den schweren Dingen.
Hallo BoscoBiati

Vielen dank für eure schnelle Antwort.

Ich habe deine Vorschläge eingebracht.

Er bleibtt aber hängen bei: xlPaste  zudem wird bei der Eingabe von xlPaste automatisch ein Leerzeichen davor und dahinter eingefügt.
Code:
Sheets("Floating").Range("B6").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
       False, Transpose:=True


Als Fehlermeldung kommt: Compile error  invalid use of property

P.S. votletzte = vorletzte


Danke

Schönen Abend gewünscht
Hallo,

an der gezeigten Stelle stimmte der Code.
zeig bitte mehr Code, also eigentlich den gesamten.
Hallo,


Zitat:xlPaste  zudem wird bei der Eingabe von xlPaste automatisch ein Leerzeichen davor und dahinter eingefügt

das gehört so :19:

@atilla,

ich hatte es genauso wie Du, dann kam mir irgendwie, dass Y ja die Spalte ist und vorletzteSpalte auch, passt also nicht.
Hallo

Die obenerwähnte Anpassung der variablen Zellen hat geklappt und läuft super.
Danke an Euch.

Zusätzlich möchte ich nun aber noch den Wert: "Total" in die Zelle 1 der letzten Spalte einfügen.

Ursprünglich war das immer fix die Spalte X
Damals konnte ich die Zelle so adressieren
Range ("Z1") = "Total"

Da neuerdings die letze Spalte nicht mehr immer die Spalte Z ist,
sondern mit "letzteSpalte" definiert wurde - gelingt mir die Adressierung nicht mehr.

Versuch habe ich:
Range ("letzteSpalte1") = "Total"

resp.

Range (cells(1, letzteSpalte)) = "Total"

Es wäre nett wenn nochmal jemand mir weiterhelfen würde.

Vielen Dank

mfg

Seiten: 1 2