Excel Makro mit Visual Basic

1337_alpha

Enthusiast
Thread Starter
Mitglied seit
02.03.2008
Beiträge
7.762
Ort
Großherzogtum Baden
Hey, vielleicht kann mir hier einer weiterhelfen.

Wir lernen gerade an der Uni so ein paar Anfänge von Visual Basic und ich hab schon Vorkenntnisse im programmieren (Java) aber das unterscheidet sich doch relativ in einigen Punkten.

Wir sollen in einer Excel Datei den normalen Namen eines Elements durch den wissenschaftlichen Ersetzen der dahinter in Klammern steht.
z.B. Kohlenstoff (Carbonium) soll per Makro zu ---> Carbonium werden.

Der Lehrer hat uns vorgeschlagen wir sollten es per Makro aufzeichnen herausbekommen.

Wenn ich es manuell mach, dann kommt aber folgender Quelltext dabei raus.

Sub Makro1()
'
' Makro1 Makro
'
' Tastenkombination: Strg+a
'
Range("A2").Select
ActiveCell.FormulaR1C1 = "Hydrogenium"
Range("A3").Select
End Sub


Der ist leider in keinster Weise universal anwendbar und sagt ja eigentlich nur aus, dass ich in A2 manuell Hydrogenium reingeschrieben hab.
Also in Java würde ich das ganz grob so machen:

Wenn ausgewählte Zelle = "x(y)" ausgewählte Zelle wird zu -> y

Kann mir jemand auf die Sprünge helfen?
Leider fehlen mir auch die grundlegenden Programmiersprachen Kenntnisse - der Prof hat uns da relativ unvorbereitet drauf losgeschickt.

Vielen Dank :wink:

edit:

Sub InhaltChecken()

Dim strName As String

If Sheets("Tabelle1").Range("A1").Value = "" Then
strName = Application.InputBox("Name eingeben")
Else
Exit Sub
End If

MsgBox strName

End Sub

Das hier hab ich auch noch im Internet gefunden bzgl. dazu.
Das sollte ungefähr in die Richtung abzielen.
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Ehrlich gesagt würde ich das mit ner Formel machen :fresse: -> VBA für so ne Simplerei ist doch ganz schön Aufwand. Aber da bleibt das "Lernen" halt auf der Strecke...

Soll das dynamisch sein/werden? So nach dem Motto, eine Schleife läuft durch alle Zellen einer Spalte und ändert die Namen?

Du könntest das in etwa so machen:

Code:
Sub Werte_Ersetzen()

Dim x As Long              'Zeilenzähler
Dim lZeilenNr As Long      'Zeilennummer
Dim lSpaltenNr As Long     'Spaltennummer

'Definiere Startposition (Zelle A1)
  lSpaltenNr = 1  '1 entspricht Spalte A
  lZeilenNr = 1   '1 entspricht Zeile 1

'Sheet namens "DeinWorkSheet" aktivieren
  Sheets("DeinWorkSheet").Select

'Setzen der Startzeile aus Variable lZeilenNr
  x = lZeilenNr

'Schleife läuft solange, bis in Zelle x der Spalte lSpaltenNr nichts mehr drin steht
  While ActiveSheet.Cells(x, lSpaltenNr).Text <> ""
    
    ActiveSheet.Cells(x, lSpaltenNr).Value = Mid(Split(Trim(ActiveSheet.Cells(x, lSpaltenNr).Text), " ")(1), 2, Len(Split(Trim(ActiveSheet.Cells(x, lSpaltenNr).Text), " ")(1)) - 2)
    x = x + 1
  Wend  'Ende Schleife

End Sub

Der Schleifeninhalt macht dabei folgendes in der gegebenen Reihenfolge:
-> Zelleninhalt der Zelle "x, lSpaltenNr" nehmen und ein Trim drauf anwenden
-> Diesen getrimmten Zelleninhalt an der Position des ersten Leerzeichens Splitten und den zweiten Teil davon nutzen -> das besagt die (1) -> entspricht in deinem Beispiel "(Carbonium)"
-> Dann davon (das macht die Mid Funktion) einen String rauspicken, der bei Position 2 beginnt -> also die erste Klammer abschneiden und bis zur Länge des gleichen Strings minus 2 geht (und die zweite Klammer abschneidet)
-> Der Spaß wird dann komplett in das Value Object der gleichen Zelle geschrieben und überschreibt damit den Quellstring



Was mit dieser einfachen Funktion nicht geht wäre der Punkt, wenn du gewollt Leerzeichen vor oder nach der Klammer hast... Keine Ahnung, ob das in deiner Datenbasis vorkommt. Wenn ja, könnte man bspw. die Zeile umbauen. Es lässt sich auch an der Klammer (auf) splitten und anstatt an Position 2 eben an Position 1 beginnen und die Klammer hinten abschneiden. Damit wärest du Leerzeichenunabhängig. :wink:

Technisch wäre ebenso die Anwendung einer RegEx denkbar... Um eben den Klammerinhalt rauszupicken. ;) Dafür brauchst du nen Verweis auf die "Microsoft VBScript Regular Expressions 5.5" und ein RegExp Objekt. Wäre eigentlich sogar die elegantere Methode, weil du damit weitestgehend unabhängig von der Syntax und Schreibweise bist.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh