Clever-Excel-Forum

Normale Version: Stringaddition - Addition einer Zahl zu einem String
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallöchen Leute,

immer wieder habe ich folgendes Problem. Am Ende eines Strings taucht eine Zahl auf zu der eine weitere Zahl addiert werden soll. Also defacto eine String - Int Addition, die aufgrund der Typenunverträglichkeit
nach etwas Programmierarbeit verlangt.

Bisher löse ich dieses Problem so:

Code:
Sub Stringaddition()
'Zahlen zu einem String addieren:
Dim strZeichen, str, intZahl, intx
strZeichen = "$A$280"
intZahl = 11
strZeichen = Replace(strZeichen, Split(strZeichen, "$")(2), Split(strZeichen, "$")(2) + intZahl)
Debug.Print strZeichen

'Oder allgemeiner:
strZeichen = "A280"
intZahl = 31
intx = Len(CStr(Val("1" & StrReverse(strZeichen)))) - 1
strZeichen = Replace(strZeichen, Right(strZeichen, intx), Right(strZeichen, intx) + intZahl)
Debug.Print strZeichen

End Sub

Aufgrund meiner leider immer noch bescheidenen Programmierkenntnisse in Visual Basic  finde ich hierfür jedoch keine bessere Lösung.  Wie bekomme ich so etwas optimaler hin? Sozusagen in einem Rutsch.
Ihr Cracks habt doch sicherlich dafür eine Lösung? Vielen Dank für eure Hilfe schonmal im voraus.
Moin,

irgendwie verstehe ich dein Anliegen nicht. Du hast doch (offenbar) eine funktionierende Lösung, und die hast du sogar selbst erarbeitet (ohne jede Ironie). Das ist mehr Wert als die mitunter vorgestellten Schrumpf-Codes, die jeder Fremde erst einmal Stück für Stück auseinandernehmen und dann analysieren muss.
  • Und was verstehst du unter "etwas optimaler"
  • bzw. "Sozusagen in einem Rutsch"?
Meine Lösungen für solche Dinge sind UDFs und gewiss mindestens genau so lang, allerdings etwas transparenter …
Morrn, Madam;
es kommt ja nun ganz darauf an, was du damit bezweckst. Soll eine Range-Angabe erhöht werden, denn danach sieht's hier aus, ist die Operation schlicht überflüssig, denn dafür gibt's alternative Schreibweisen (die Absolut-Schreibung brauchst du in VBA idR ohnehin kaum mal). Für Range("A280") kann man auch Cells(280, 1) schreiben. Soll die Zeile um den Wert einer Variablen ixZ erhöht werden, schreibt man einfach Cells(280 + ixZ, 1).
Hast du aber anderes vor, kann man das so wie du oder in einer SubProzedur oder ZellFormel mit einer UDF (wie schon von GMG-CC erwähnt) erledigen. Eine allgemeinere UDF für verschiedene ähnlich gelagerte Aufgaben wird im nachfolgenden Bsp verwendet:
FGH
1Alpha251Alpha26
2Beta332Beta35
3Gamma873Gamma90
4Delta914Delta95
5Epsilon665Epsilon71
6H1[:H5]:=MaskOn(F1;"alf")&MaskOn(F1;"num")+G1
Die UDF findest du bei Bedarf im Herber-Archiv (http://www.herber.de/forum - Button RECHERCHE - Neueinstellung von 2014 verwenden!), aber ich nehme doch an, du meinst das mit dem Range !
Gruß, Castor
Lieber Günther,

es wäre lieb und nett von dir, wenn du deine benutzerdefinierten Funktionen dann zu diesem Thema auch zur Verfügung stellen würdest.

Und last but not least: Vielen Dank an Castor für deine Bemühungen und dem angegebenem Link.
Moin,

ich bin in Zeitnot, daher nur der Link. Gilt aber nur für Ganzzahlen, der Rest kommt irgendwann ... Blush
Hallo,
der Link war aber eher allgemein (zum Forum); die in der Formel verwendete UDF findest du hier!
Da du ursprünglich $A$280 auftrennen wolltest, vermute ich, du benötigst die Zeilennr einer Adresse. Das kann man in VBA auch so machen:
Range("A280").Row . Stehen derartige ZellAdressen in bestimmten Zellen, die in Variable gelesen werden, sieht das dann so aus:
Range(varName).Row
Gruß, Castor
Code:
Sub snb()
    c00 = "$A$260"
    
    MsgBox Int(StrReverse(Val(StrReverse(c00 & ".")))) + 1
    
    MsgBox Range(c00).Row + 1
    MsgBox Join(Evaluate("row(" & c00 & ")"), "") + 1
End Sub