2012-06-11 7 views
6

私はGoogleのページの次のページを辿っていますが、この一見単純なリクエストに対する解決策を探していますが、役に立たないです。 を使用して文字列を文例に変換する信頼できる方法を誰かが知っていますか?VBAを使用して文例に変換する

私は理想的には、関数ではなくサブ関数にビルドするので、GUIから呼び出す方が簡単です。

参考のために、私が望む:

HERE

がLONG、UGLY大文字の文です。すぐに私を改めてください。なるための

ここでは長い間、醜い大文字の文です。すぐに私を訂正してください。

タイトルケースに変換私は非常にシンプルであり(そのための組み込み関数があります)、文例に変換するのは本当に困難でした。

私は、次の方法のいくつかを試してみましたが、毎ターンでエラーが出ている:

どのように私はこれが仕事を得ることができますか?

+1

あなたが与えた最初のリンクは期待どおりに機能します。 –

+1

申し訳ありません。私は本質的に間違って実行していた。 'Sub ConvertToSentenceCase()ActiveCell = SentenceCase(ActiveCell)End Sub' – seegoon

+3

これはあなたの問題が解決されたこと(そしてあなたの解決方法)もしあなたがそれをあなた自身で解決すれば。 :-) – JimmyPena

答えて

7

あなたは、より効率的に、このために、この

Sub Tested() 
    Call ProperCaps("HERE IS A LONG, UGLY UPPERCASE SENTENCE. PLEASE AMEND ME IMMEDIATELY." & vbCrLf & "next line! now") 
End Sub 

Function ProperCaps(strIn As String) As String 
    Dim objRegex As Object 
    Dim objRegMC As Object 
    Dim objRegM As Object 
    Set objRegex = CreateObject("vbscript.regexp") 
    strIn = LCase$(strIn) 
    With objRegex 
     .Global = True 
     .ignoreCase = True 
     .Pattern = "(^|[\.\?\!\r\t]\s?)([a-z])" 
     If .test(strIn) Then 
      Set objRegMC = .Execute(strIn) 
      For Each objRegM In objRegMC 
       Mid$(strIn, objRegM.firstindex + 1, objRegM.Length) = UCase$(objRegM) 
      Next 
     End If 
     MsgBox strIn 
    End With 
End Function 
+1

+1 RegExpをうまく使います。最初の手紙を大文字にしないので、マイナーな調整が必要です。 –

+0

@SiddharthRout thx Sid。 update made – brettdj

+1

これは絶対的な夢です。 – seegoon

1

おかげで、コードの有効ビットのようなパース

何かを実行するために正規表現を使用することができます。なぜVBが適切なケースを持っていて、文例が非常に奇妙なのか。私は、私の目的のためにそれを微調整しました。正面にスペースがあれば、最初の文字を大文字にしないので、私はいくつかの変更を分かち合いたいと思います。

文の先頭または末尾に不要な空白を削除するには、上記の別の関数を追加しました。

Public Function DblTrim(vString As String) As String 
Dim tempString As String 
tempString = vString 

Do Until Left(tempString, 1) <> " " 
    tempString = LTrim(tempString) 
Loop 
Do Until Right(tempString, 1) <> " " 
    tempString = RTrim(tempString) 
Loop 

DblTrim = tempString 

End Function 

Public Function ProperCaps(strIn As String) As String 
    Dim objRegex As Object 
    Dim objRegMC As Object 
    Dim objRegM As Object 
    Set objRegex = CreateObject("vbscript.regexp") 
    strIn = DblTrim(strIn) 

    With objRegex 
     .Global = True 
     .ignoreCase = True 
     .Pattern = "(^|[\.\?\!\r\t]\s?)([a-z])" 
     If .test(strIn) Then 
      Set objRegMC = .Execute(strIn) 
      For Each objRegM In objRegMC 
       Mid$(strIn, objRegM.firstindex + 1, objRegM.Length) = UCase$(objRegM) 
      Next 
     End If 
     ProperCaps = strIn 
    End With 
End Function 

あなたはすべてのスペースを削除して、首都としての最初の文字とバック文を取得するためにProperCaps(Yourstring)を呼び出すことができます。

DblTrim(Yourstring)を使用して、スペースの数に関係なく、文字列の前後にあるすべてのスペースを(文例を変更せずに)削除することもできます。

関連する問題