Tabelle bzw Raster mit Schleife erstellen
#1
Vielleicht kann mir jemand mit VBA Kenntnisse helfen

Ich möchte mit einer Schleife eine Tabelle erstellen lassen. Breite und Länge werden durch InputBox eingegeben. Nun soll ein Raster ausgegeben werden; Am Anfang sowie am Ende werden jeweils 40 abgezogen.
Schrittweise soll dann z.B. 1000 abgezogen werden und in vorletzter Spalte bzw. Reihe soll der Restwert eingetragen werden.
Datei mit Skizze für das Raster sind beigefügt.
Im voraus Vielen Dank


Angehängte Dateien
.xlsm   Raster.xlsm (Größe: 49,07 KB / Downloads: 10)
Top
#2
Hallöchen,

hier mal zum Verständnis ein Tabellenausschnitt. Der ist jetzt zwar mit 30, aber für's Prinzip auch ok. Eingegeben werden jeweils 1400.
Der Endwert in der letzten benötigten Spalte wäre bei 30 dann jeweils 1370. In der ersten Spalte kommt die 30 rein. Die dazwischen benötigte Spaltenzahl muss ermittelt werden.
Hier steht allerdings die Frage, wo der Wert "z.B. 1000" festgelegt wird. Per Inputboxen würde ich nur die beiden Grenzwerte 1400 (senkrecht) und 1400 (waagerecht), erhalten. In meiner Erklärung sind die Werte gleich, in der realität sicher meist unterschiedlich, daher 2 Inputboxen oder ich gebe die Werte in einer ein, z.B. durch Semikolon getrennt.
In dem Blatt mit dem 30er Muster werden jeweils 610 abgezogen. Ich brauche also zwischen der 30 und der 1370 folgende Spalten:

1370-610 = 760
760-610 = 150

Das war's hier auch schon, 150 - 610 ist < 30.


Arbeitsblatt mit dem Namen 'Tabelle1'
BCDEFGHI
2301507601370Länge1400
330Breite1400
4150
5760
61370
7
Verwendete Systemkomponenten: [Windows (32-bit) NT :.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Danke dir für deine Antwort "schauan"
Das Raster mit den 610 funktioniert ja auch. bei dem werden jeweils am Anfang und Ende zuerst 30 und dann 120 (30+120 =150) abgezogen, bzw Spalten und Reihen gemacht.
Das hatte ich schon hin bekommen.
Jedoch wollte ich nun ein Raster haben, in dem jeweils nur 40 am Anfang und Ende abgezogen wird, 
und zwischendurch z.B. 1000
d.h. beim Raster 1000: wenn ich eine Breite von 4500 habe, dann müsste es so sein das 40, 1040, 2040, 3040, 4040, 4460.
Und das bekomme ich nicht hin.
Top
#4
Hallöchen,


ich habe jetzt mal nicht nach dem Fehler gesucht. Dein code ist recht umfangreich für diese Aufgabe und Du hast für jede Variante einen eigenen. Daher habe ich mal einen flexiblen geschrieben, hier nur für die waagerechten Werte und ohne die Zellrahmen.

Die 4 Ausgangswerte solltest Du entweder alle abfragen, oder Du schreibst zumindest die 40 und die 1000 oder 30 und 610 usw. irgendwo im Blatt fest hin und holst sie Dir von dort. Du könntest dazu sogar den Blattnamen verwenden, nenne es z.B. 40-1000.

Code:
Sub test()
'Variablendeklaration
'Integer
Dim i1%, i2%, i3%, i4%, iCnt%
'String, Variant
Dim strWerte$, arrWerte
'Werte festlegen - später über Inputbox oder andere Quellen
i1 = 40
i2 = 4500
i3 = 8500
i4 = 1000
'Endwert festlegen / um Startwert verringern
i2 = i2 - i1
'Schleife solange Endwert>=Wert
Do While i2 >= i1
  'Wert merken
  strWerte = strWerte & i2 & ";"
  'Endwert um Schrittweite verringern
  i2 = i2 - i4
'Ende Schleife solange Endwert>=Wert
Loop
'Startwert hinzufuegen
strWerte = strWerte & i1
'Werte in ein Array wandeln
arrWerte = Split(strWerte, ";")
'Schleife ueber alle Werte im Arrray, rueckwaerts
For iCnt = UBound(arrWerte) To 0 Step -1
  'Wert in Zelle eintragen - hier ab A1
  Cells(1, UBound(arrWerte) - iCnt + 1) = arrWerte(iCnt)
'Ende Schleife ueber alle Werte im Arrray
Next
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#5
Hallo

Hab recht vielen Dank für deine Mühe.
Jedoch ist es leider nicht so wie ich es wollte.
Bei deinem Test zählt er die ganze Reihe Rückwärts.
Ich wollte jedoch etwas anderes (Siehe neues Raster2)
Vielleicht hab ich mich bei meiner ersten Frage falsch ausgedrückt

Gruß Wolfgang


Angehängte Dateien
.xlsm   Raster2.xlsm (Größe: 46,61 KB / Downloads: 4)
Top
#6
Hallöchen,

schaue mal in Deine erste Datei bei dem 610er Raster:
Das geht doch rückwärts, oder?
Jetzt ist die Frage, wodurch entschieden wird, ob es rückwärts oder vorwärts geht.

Arbeitsblatt mit dem Namen 'Raster 610'
BCDEFGHIJK
1930150760137019802590320033503470
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#7
Hallo Wolfgang,

ich habe es so verstanden:

Code:
Sub Raster(rngRaster As Range, lngLänge As Long, lngBreite As Long, lngSchritt As Long)
Dim lngAnz As Long
Dim lngPos As Long
lngAnz = WorksheetFunction.RoundUp((lngLänge - 80) / lngSchritt, 0) + 1
For lngPos = 1 To lngAnz
    If lngPos = lngAnz Then
        rngRaster.Offset(lngPos - 1, 0) = lngLänge - 40
    Else
        rngRaster.Offset(lngPos - 1, 0) = 40 + lngSchritt * (lngPos - 1)
    End If
Next lngPos
lngAnz = WorksheetFunction.RoundUp((lngBreite - 80) / lngSchritt, 0) + 1
For lngPos = 1 To lngAnz
    If lngPos = lngAnz Then
        rngRaster.Offset(0, lngPos - 1) = lngBreite - 40
    Else
        rngRaster.Offset(0, lngPos - 1) = 40 + lngSchritt * (lngPos - 1)
    End If
Next lngPos
End Sub


Angehängte Dateien
.xlsm   Raster.xlsm (Größe: 21,41 KB / Downloads: 3)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#8
Hallo Wolfgang,

und mit variabelm Aussenbereich


Angehängte Dateien
.xlsm   Raster.xlsm (Größe: 21,95 KB / Downloads: 6)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#9
Hallo 

Das 610er Raster funktioniert einwandfrei. Jedoch wird bei diesem am Anfang und Ende zuerst 30 und dann 120 abgezogen.
Dann fängt es am Anfang ab 150 (30+120) mit jeweils 610 er Schritten an zu zählen.
Raster Werte von links nach rechts 30, 150, 760, 1370, 1980, 2590 usw. , am Ende (z.B. breite 5000) 4850, 4960

Beim 1000 er Raster soll es am Anfang und Ende jeweils nur einen Wert (hier 40) abziehen.
Dann wären die Raster Werte von links nach rechts 40, 1040, 2040, 3040, 4040  usw., am Ende (z.B. breite 5000)  4960

Bei deiner Schleife wird vom Endwert z.B. 5000 abgezogen: 4960, 3960, 2960 usw.

Vielen Dank für deine Mühe

Gruß Wolfgang
Top
#10
Hallo 

Dein Vorschlag gefällt mir.

Es macht was es soll, jedoch müsste hier bei "0" angefangen werden, damit auf Breite und Länge jeweils der Anfangswert erscheint
Sonst kann man keine Raster bzw. Rahmen um die Werte eingeben

Schau dir bitte mal die Skizze an

Danke dir für deine Mühe

Gruß  Wolfgang


Angehängte Dateien
.xlsm   Skizze.xlsm (Größe: 40,77 KB / Downloads: 2)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste