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.

Stringaddition - Addition einer Zahl zu einem String
#1
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.
Antworten Top
#2
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 …
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
[-] Folgende(r) 1 Nutzer sagt Danke an GMG-CC für diesen Beitrag:
  • Schülerin
Antworten Top
#3
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
[-] Folgende(r) 1 Nutzer sagt Danke an Castor für diesen Beitrag:
  • Schülerin
Antworten Top
#4
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.
Antworten Top
#5
Moin,

ich bin in Zeitnot, daher nur der Link. Gilt aber nur für Ganzzahlen, der Rest kommt irgendwann ... Blush
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antworten Top
#6
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
[-] Folgende(r) 1 Nutzer sagt Danke an Castor für diesen Beitrag:
  • Schülerin
Antworten Top
#7
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
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Schülerin
Antworten Top


Gehe zu:


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