Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1696to1700
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
Inhaltsverzeichnis

Kürzerer Code

Kürzerer Code
19.06.2019 19:29:13
Frank
Hallo zusammen
Ich habe folgenden Code, der sicherlich etwas kürzer geht. Da ich aber nicht ganz so VBA sattelfest bin hoffe ich auf eure Hilfe.
If Range("artas2").Value = "HL" Or Range("artas2").Value = "S" Then Range("B11").Value = 1 Else Range("B11").Value = 14
If Range("artas2").Value = "HL" Or Range("artas2").Value = "S" Then Range("B13").Value = 1 Else Range("B13").Value = 14
If Range("artas2").Value = "HL" Or Range("artas2").Value = "S" Then Range("B15").Value = 1 Else Range("B15").Value = 14
If Range("artas2").Value = "HL" Or Range("artas2").Value = "S" Then Range("B17").Value = 1 Else Range("B17").Value = 14
If Range("artas2").Value = "HL" Or Range("artas2").Value = "S" Then Range("B19").Value = 1 Else Range("B19").Value = 14
If Range("artas2").Value = "HL" Or Range("artas2").Value = "S" Then Range("B21").Value = 1 Else Range("B21").Value = 14
If Range("artas2").Value = "HL" Or Range("artas2").Value = "S" Then Range("B23").Value = 1 Else Range("B23").Value = 14
If Range("artas2").Value = "HL" Or Range("artas2").Value = "S" Then Range("B25").Value = 1 Else Range("B25").Value = 14
If Range("artas2").Value = "HL" Or Range("artas2").Value = "S" Then Range("B27").Value = 1 Else Range("B27").Value = 14
Danke und Gruß
Frank

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kürzerer Code
19.06.2019 19:33:22
Frank
Oh ich seh gerade. da ist ein kleiner Fehler drin. Die Felder in B sollen aufsteigend gehen, also B11 =1 oder 14
B13 = 2 oder 15, B15 =3 oder 16......
Sorry
dann so
19.06.2019 19:49:20
Daniel
Hi
dim z as Long, x as Long
If Range("artas2").Value = "HL" Or Range("artas2").Value = "S" Then
x = 1
else
x = 14
end if
for z = 0 to 8
Cells(11 + z * 2, 2) = x + z
next
Gruß Daniel
AW: dann so
19.06.2019 20:00:11
Frank
Danke Daniel
ich hab jetzt den Code von Werner genommen. Der klappt auch.
Gruß Frank
AW: Kürzerer Code
19.06.2019 19:36:43
Hajo_Zi
Hallo Frank,
Option Explicit
Sub nmh()
If Range("artas2").Value = "HL" Or Range("artas2").Value = "S" Then
Range("B11,B13,B15,B17,B19,B21,B21,B23,B25") = 1
Else
Range("B11,B13,B15,B17,B19,B21,B21,B23,B25") = 14
End If
End Sub

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
Anzeige
geänderte Code
19.06.2019 19:53:09
Hajo_Zi

Option Explicit
Sub nmh()
If Range("artas2").Value = "HL" Or Range("artas2").Value = "S" Then
Range("B11,B13,B15,B17,B19,B21,B21,B23,B25").Formula = "=ROUND(((ROW()-11)+1)/2,0)"
Else
Range("B11,B13,B15,B17,B19,B21,B21,B23,B25").Formula = "=ROUND(((ROW()-11)+1)/2,0)+13"
End If
End Sub
Gruß Hajo
AW: Kürzerer Code
19.06.2019 19:41:14
Daniel
HI
1. du kannst in einer Range auch mehrere Zellen gleichzeitig anspreichen, dazu die Adressen der Zellen mit Komma getrennt angeben, also Range("B11,B13,B15,...,B27")
2. wenn du einen Zellbereich in einen Codeabschnitt mehrfach benötigst, kannst du diesen Zellbereich in einer WITH-Klammer festlegen, so dass du in der Folge anstelle des Zellbereichs nur noch den Punkt schreiben musst
3. enthält die IF-Bedingnung viele durch OR verknüpfte Einzelwerte, ist SELECT CASE oft das besser Konstrukt
mit diesen 3 Optimierungen ergibt sich folgender Code:
With Range("B11,B13,B15,B17,B19,B21,B23,B25,B27")
Select Case Range("artas2")
Case "HL", "S"
.Value = 1
Case Else
.Value = 14
end Select
End with

das sind zwar immer noch ein paar Zeilen, aber deutlich übersichtlicher und jeder Wert kommt nur genau 1x vor.
wenn du es extrem kurz magst, kann man das ganze auch in eine Programmzeile packen.
ist zwar kurz und jeder Wert kommt auch hier nur 1x vor, ist aber nicht besonders übersichtlich
With Range("artas2")
Range("B11,B13,B15,B17,B19,B21,B23,B25,B27").Value = IIF(.Value = "S" or .Value = "HL", 1,  _
14)
End with
gruß Daniel
Anzeige
AW: Kürzerer Code
19.06.2019 19:51:46
Frank
Hallo Daniel
Danke für die schnelle RM.
Ich hatte leider in meinem Code einen Fehler. Das hatte ich auch direkt hinterher gepostet.
Die Felder in B sollen aufsteigend gehen, also B11 =1 oder 14
B13 = 2 oder 15, B15 =3 oder 16......
Also nicht alle 1 oder 14, sondern aufsteigend.
Sorry.
Gruß Frank
AW: Kürzerer Code
19.06.2019 19:49:16
Werner
Hallo Frank,
das mit der aufsteigenden Nummerierung wurde wohl übersesen.
Public Sub aaa()
Dim i As Long, z As Long
z = 1
Select Case Range("artas2").Value
Case "HL", "S"
For i = 11 To 27 Step 2
Range("B" & i) = z
z = z + 1
Next i
Case Else
For i = 11 To 27 Step 2
Range("B" & i) = z + 13
z = z + 1
Next i
End Select
End Sub
Gruß Werner
Anzeige
AW: Kürzerer Code
19.06.2019 19:58:39
Frank
Hallo Werner
Klappt perfekt.
Danke und einen schönen Abend noch.
Gerne u. Danke für die Rückmeldung und...
19.06.2019 20:05:47
Werner
Hallo Frank,
...in deinem anderen Beitrag hätte ich mich auch über eine Rückmeldung gefreut.
Gruß Werner
AW: Kürzerer Code
19.06.2019 20:12:37
Hajo_Zi
mein code mit nur 5 Zeilen hat Dir also nicht gefallen.
Gruß Hajo
vielleicht sind Formeln unerwünscht
19.06.2019 20:26:55
Daniel
ansonsten könnte man ja gleich in die Zellen die Formel schreiben:
B11:

=(ZEILE()-11)/2+14-13*ODER(artas2={"S";"HL"})
und das natürlich auch per Code als echten Einzeiler:
Range("B11,B13,B15,B17,B19,B21,B23,B25,B27").Formula = "=(ROW()-11)/2+14-13*OR(artas2={""S"",""HL""})"
Gruß Daniel
Anzeige
AW: Kürzerer Code
19.06.2019 20:15:45
onur
Noch eine Version:
Dim v
v = Range("artas2").Value
Range("B11,B13,B15,B17,B19,B21,B23,B25,B27").Value = (v = "HL" Or v = "S") * 13 + 14

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige