Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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)
Antworten 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)
Antworten 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.
Antworten 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)
Antworten 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)
Antworten 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)
Antworten 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.





Antworten 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.





Antworten 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
Antworten 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)
Antworten Top


Gehe zu:


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