Hausaufgabe

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
InputBox MsgBox
Bild

Betrifft: Hausaufgabe
von: Jonas
Geschrieben am: 09.05.2015 14:39:01

Unser AINF-Lehrer hat uns am Fr diese Aufgabe gestellt, aber ich kann sie nicht lösen:
'Schreibe eine Funktion die deinen Namen
'(in der Form Vorname Nachname)
'einliest und ihn in die Form Nachname V.
'bringt und wieder ausgibt.
Beginnen sollen wir mit: Function twistName()
Danke im voraus für die Hilfe

Bild

Betrifft: AW: Hausaufgabe
von: Hajo_Zi
Geschrieben am: 09.05.2015 14:45:18
nur wenige sehen die Funktion twistName()
http://www.excelformeln.de/formeln.html?welcher=158


Bild

Betrifft: AW: Hausaufgabe
von: Jonas
Geschrieben am: 09.05.2015 15:08:48
Tut mir leid, aber leider versteh ich diese Antwort nicht.
Trotzdem Danke füt die Hilfe

Bild

Betrifft: AW: Hausaufgabe
von: Hajo_Zi
Geschrieben am: 09.05.2015 15:18:52
gut Du gehst davon aus das ich die Funktion twistName() kenne.
Gut dann gehe ich auch davon aus das Du die zu verwendende persönliche Funktion Trennen() kennst. Also benutze Sie.
Ich bin dann raus.
Gruß Hajo

Bild

Betrifft: twistName ist Name d.erst zu erstellenden Fkt!
von: Luc:-?
Geschrieben am: 09.05.2015 17:33:36
Ist das so schwer zu begreifen, Hajo? ;->
Gruß, Luc :-?

Bild

Betrifft: Vorname und Nachname umdrehen
von: WF
Geschrieben am: 09.05.2015 15:08:39
=TEIL(A1;FINDEN(" ";A1)+1;99)&" "&LINKS(A1;FINDEN(" ";A1)-1)
WF

Bild

Betrifft: AW: Vorname und Nachname umdrehen
von: Jonas
Geschrieben am: 09.05.2015 15:12:17
Allles was wir im Untetrricht gemacht haben war:

Sub Funktionen02()
    Dim s1 As String
    Dim s2 As String
    Dim n As Integer
    'Kleinschreibung
    s1 = "HALLO 2BHMBU!"
    s2 = LCase(s1)
    Debug.Print (s2)
    'Großbuchstaben
    s1 = "hallo 2bhmbu!"
    s2 = UCase(s1)
    Debug.Print (s2)
    'Länge
    s1 = "Hallo 2BHMBU!"
    n = Len(s1)
    Debug.Print (n)
    'Linker Teilstring
    s1 = "Hallo 2BHMBU!"
    s2 = Left(s1, 5)
    Debug.Print (s2)
    'Rechter Teilstring
    s1 = "Hallo 2BHMBU!"
    s2 = Right(s1, 6)
    Debug.Print (s2)
    'Texposition finden
    s1 = "Hallo 2BHMBU!"
    s2 = " "
    n = InStr(s1, s2)
    Debug.Print (n)
    'Teilstring
    s1 = "Hallo 2BHMBU!"
    s2 = Mid(s1, 4, 4)
    Debug.Print (s2)
    'Einzelnes Zeichen
    s1 = Chr(65) & Chr(10) & Chr(66)
    Debug.Print (s1)
End Sub


Bild

Betrifft: VBA: ohne mich
von: WF
Geschrieben am: 09.05.2015 15:17:20
.

Bild

Betrifft: AW: VBA: ohne mich
von: Herbert Grom
Geschrieben am: 09.05.2015 18:23:28
Hallo Walter,
der Gute kennt halt noch nicht Deine Präferenzen (Userbild
)! ;o)=)
Servus

Bild

Betrifft: OT: VBA mit mich @ HG
von: Michael
Geschrieben am: 09.05.2015 20:25:33
Hallo Herbert,
ich schaffe es dieses Jahr leider nicht zum Excel-Treffen.
Schöne Grüße aus Nürnberg und mail die Tage,
Michael

Bild

Betrifft: AW: OT: VBA mit mich @ HG
von: Herbert Grom
Geschrieben am: 10.05.2015 10:01:28
Hallo Michael,
"heute ist nicht alle Tage..."! ;o)=)
Servus

Bild

Betrifft: AW: Vorname und Nachname umdrehen
von: Michael
Geschrieben am: 09.05.2015 15:24:39
Hallo Jonas,
da hast Du doch schon die Lösung vor der Nase!
Du suchst zuerst das Leerzeichen mit InStr, dann weist Du mit 2 mal Mid den Teilstring den Variablen s1 und s2 zu - beim hinteren Stück mußt Du dabei mit len berechnen, wie lang der String ist.
Schließlich setzt Du ihn in umgekehrter Reihenfolge wieder zusammen.
Übrigens paßt Dein Beispielcode nicht so recht: ein "normaler" Code steckt in einer sub, während eine Funktion Rückgabewerte hat. Deine Beispielfunktion hat *keine* Rückgabewerte.
Aha, Nepomuk hat zwischenzeitlich schon eine Lösung bereit gestellt...
Wenn Du sie nicht verstehst, machst Du es eben mit den Dir bekannten Mitteln wie oben skizziert.
Schöne Grüße,
Michael

Bild

Betrifft: AW: Vorname und Nachname umdrehen
von: Nepumuk
Geschrieben am: 09.05.2015 15:16:40
Hallo,
so:

Option Explicit

Public Function twistName(ByRef probjCell As Range) As String
    Dim avntSplitName As Variant
    avntSplitName = Split(probjCell.Text, " ")
    twistName = avntSplitName(1) & " " & Left$(avntSplitName(0), 1) & "."
End Function

 AB
1Jonas NimmersattNimmersatt J.

ZelleFormel
B1=twistName(A1)

Gruß
Nepumuk

Bild

Betrifft: Hausaufgaben soll man eigentlich selber ...
von: Luc:-?
Geschrieben am: 09.05.2015 18:38:18
…machen, Jonas,
aber da dir ja nun schon geholfen wurde, will ich mal nicht so sein, zumal Nepumuks Funktion allzu verräterische ProfiPgmmiererMerkmale zeigt. Außerdem ist nicht klar, woher die Fkt den Namen nehmen soll. Nepumuk hat hier die Eingabe unnötigerweise auf eine Arbeits­blatt­Zelle eingeengt. Deshalb könnte die untenstehende Fkt besser geeignet sein. Bei Anwendung beider Fktt in einer ZellFormel ergäbe sich folgendes Bild:

 ABC
1Jonas BleibtreuBleibtreu J.Bleibtreu J.
2 #WERT!Bleibtreu J.
3B1:=twistName(A1)
4B2:=twistName("Jonas Bleibtreu")
5C1:=twistName2(A1)
6C2:=twistName2("Jonas Bleibtreu")

Meine Lösung sähe dann so aus:
Function twistName2(vollName)
    Dim tName$()
    tName = Split(" " & vollName)
    tName(0) = tName(2)
    tName(1) = Left$(tName(1), 1) & "."
    ReDim Preserve tName(1)
    twistName2 = Join(tName)
End Function
Gruß, Luc :-?

Bild

Betrifft: OT@Luc-kommt noch eine E-Mail? ;-) owT
von: robert
Geschrieben am: 09.05.2015 19:14:50


Bild

Betrifft: OT: Ja, in den nächsten Tagen! SchöSo! orT
von: Luc:-?
Geschrieben am: 09.05.2015 21:16:50
(Z.Z. ein kraFra-Problem!)
Gruß, Luc :-?

Bild

Betrifft: finde ich auch, aber trotzdem ...
von: Michael
Geschrieben am: 09.05.2015 20:22:49
Hallo zusammen,
das ist ja wirklich was, was man dauernd braucht, und auch wenn das alles mit split und ähnlichen Befehlen geht, notiere ich so Zeug immer noch mit einer "historischen" Schreibweise, die genau den Kenntnissen von Jonas entspricht.
1. Aufgaben gehören sich in Teilprobleme zerlegt.
2. Wenn einen die Aufgabe überfordert, setzt man sich erst mal mit simpelsten Daten hin
Userbild
um sich einen Überblick zu verschaffen, was da passiert bzw. passieren soll.
Das sollte durch die farbliche Hervorhebung klar werden, hoffe ich.
Das Ganze in ein Programm umgesetzt könnte dann so aussehen:


Function twistname3(vollName As String) As String
 posi = InStr(vollName, " ")
 S1 = Mid(vollName, 1, posi - 1)
 laenge = Len(vollName)
 ' S2 = Mid(vollName, 5, 3) auskommentiert
 ' wir wollen ja Variabeln für unterschiedliche
 ' Längen der Namen
 S2 = Mid(vollName, posi + 1, laenge - posi)
 twistname3 = S2 & " " & S1
End Function
Sub twist_aufrufen()
 ' Einlesen des Namens:
 Name = Range("B11")
 MsgBox twistname3(Name)
End Sub
wenn der "einzulesende Wert" in B11 steht; ansonsten halt inputbox oder wie auch immer.
Alle kapiert, Jonas?
Schöne Grüße,
Michael

Bild

Betrifft: Auf Deklarationen sollte man nicht verzichten, ...
von: Luc:-?
Geschrieben am: 09.05.2015 21:27:42
…Michael;
und seinen Kenntnisstand hat er nicht mitgeteilt. Auch, wenn zu vermuten ist, dass der gg 0 tendiert, müsste es ja einen LehrplanStand geben, den wir aber nicht kennen.
Wenn die Funktion aus einer SubProzedur aufgerufen wird, muss es auch möglich sein, ihr eine TextVariable zu übergeben. Das geht zwar auch bei deiner Version, du zeigst es aber nicht.
Ansonsten bin ich durchaus bei dir, denn ich wäre wohl ein Alptraum für einen biederen Standard-VBA-Trainer… ;-)
Gruß + schöSo, Luc :-?

Bild

Betrifft: AW: finde ich auch, aber trotzdem ...
von: Herbert Grom
Geschrieben am: 10.05.2015 10:05:05
Hallo Michael,
Deine Erläuterungen sind perfekt! Wer es so nicht kapiert, kapiert es nie mehr!
Servus

Bild

Betrifft: Lösung mit Regex
von: CitizenX
Geschrieben am: 10.05.2015 12:13:56
Hi,
ist zwar alles schon gesagt und beantwortet worden, aber aus vollständigkeits- od. alternativ Gründen hier noch eine
Variante mit Regex, wobei die Trennung vom Vor- und Zunamen irrrelevant ist.


Option Explicit
Function twistName(ByRef strContent As String) As String
    Dim regex: Set regex = CreateObject("vbscript.regexp")
    
    With regex
        .Pattern = "(\w).*\W(\w+)"
        twistName = .Replace(strContent, "$2 $1.")
    End With
End Function
VG
Steffen

Bild

Betrifft: Jonas?
von: Michael
Geschrieben am: 10.05.2015 15:35:46
Hi zusammen,
es scheint, als ob Jonas die versammelte Excel-Power nicht zu würdigen weiß.
An seiner Stelle würde ich noch ein bißchen herumspielen, z.B. mit dem Umsortieren von mehr als zwei Namen. Ein Blick in die Hilfestellung zu instr und evtl. instrrev kann dabei nix schaden...
@Steffen: um Deine regex-Kenntnisse beneide ich Dich - mir verbiegt es da immer das Hirn.
@Luc: den Kenntnisstand hat er doch mitgeteilt: "gemacht haben wir nur" diese seltsame Beispielfkt, die keine ist. Ich stehe grad mit Deinem Kommentar auf der Leitung ("du zeigst es aber nicht"): ich rufe das Ding doch mit einer Variablen auf?
@Herbert: danke, ich hab mich halt erinnert, wie oft ich anfangs (tempus fugit) an so Zeug geknabbert hab.
Schönen Sonntag noch,
Michael

Bild

Betrifft: Ja, aber die ist nur deshalb Text, weil die Fkt ..
von: Luc:-?
Geschrieben am: 10.05.2015 18:19:58
…Text verlangt, Michael;
primär rufst du in der SubProz eine Zelle auf. Ob Jonas den Zusammenhang erkennt, wage ich zu bezweifeln, wenn er doch nur diesen geringen Kenntnis­stand hat. Dafür mag ja das reprä­sentativ sein, was er gepostet hat, aber ob das auch dem Lehrplan­ziel entspricht, ist nicht zweifels­frei feststellbar.
Gruß, Luc :-?

Bild

Betrifft: AW: Ja, aber die ist nur deshalb Text, weil die Fkt ..
von: Michael
Geschrieben am: 10.05.2015 18:33:47
Hi Luc,
da haste natürlich schon recht, die Angabe, wie das Ding überhaupt aufgerufen werden soll, isser uns schuldig geblieben: "schreibe eine Fkt, die die Namen einliest" ...
Wenn ich mir's genau überlege ...
copy con name.txt
Michael Mustermann
^Z
oder vielleicht
set name="Michael Mustermann"
Der Variationen gibt es fülle.
Gruß,
Michael

Bild

Betrifft: AW: warum nicht einfach die
von: Daniel
Geschrieben am: 10.05.2015 15:51:45
Formellösung von WF nehmen und in VBA umsetzen, wenns VBA sein soll?

Function twistname(txt As String) As String
twistname = Mid(txt, InStr(txt, " ") + 1) & " " & Left(txt, 1) & "."
End Function
Gruß Daniel

Bild

Betrifft: Ja, das entspräche wohl am Ehesten Vorgabe ...
von: Luc:-?
Geschrieben am: 10.05.2015 18:22:56
…und wahrscheinlich erwartetem Kenntnisstand des Fragestellers, Daniel.
Gruß, Luc :-?

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Englische Excelversion?"