不揃いなテキスト文をExcelVBAで変換し表記を整える
文を適当にエディターで書くと大文字小文字が混在して気になる場合は、
ExcelVBAで変換して文字を整える。
- 大文字変換
- “http”を含む文字列はそのまま(ドメインなど変換しない)
- “:\”を含む文字列はそのまま(パスなど変換しない)
エディタからExcelにコピペして変換する
- 変換前:シート名(ここにエディタの構文をコピペする)
- 変換後:シート名(ExcelVBAマクロ実行後ここに張り付く)
Sub CNV_OHMOJI()
'vbUpperCase 1 文字列を大文字に変換します
'vbLowerCase 2 文字列を小文字に変換します
'vbProperCase 3 文字列の各単語の先頭の文字を大文字に変換します
'vbWide 4 文字列内の半角文字を全角文字に変換します
'vbNarrow 8 文字列内の全角文字を半角文字に変換します
'vbKatakana 16 文字列内のひらがなをカタカナに変換します
'vbHiragana 32 文字列内のカタカナをひらがなに変換します
Dim sh1 As String, st2 As String
Dim i As Integer, j As Integer
Dim LC As Integer, CC As Integer
Dim wk_nm1 As String, wk_nm2 As String, wk_nm3 As String
sh1 = "変換前"
sh2 = "変換後"
LC = 1000
CC = 10
Sheets(sh2).Select
Range(Cells(1, 1), Cells(LC, CC)).Select
Selection.ClearContents
Sheets(sh2).Cells(1, 1).Select
For i = 1 To LC
For j = 1 To CC
wk_nm1 = Sheets(sh1).Cells(i, j)
If InStr(wk_nm1, "http") <= 0 And _
InStr(wk_nm1, ":\") <= 0 Then
Sheets(sh2).Cells(i, j) = Trim(StrConv(wk_nm1, vbUpperCase))
Else
Sheets(sh2).Cells(i, j) = Trim(wk_nm1)
End If
Next j
Next
End Sub
上記を関数化して「大文字、小文字、先頭だけ大文字」変換させてみる
Function CNVMOJI(r)
'vbUpperCase 1 文字列を大文字に変換します
'vbLowerCase 2 文字列を小文字に変換します
'vbProperCase 3 文字列の各単語の先頭の文字を大文字に変換します
'vbWide 4 文字列内の半角文字を全角文字に変換します
'vbNarrow 8 文字列内の全角文字を半角文字に変換します
'vbKatakana 16 文字列内のひらがなをカタカナに変換します
'vbHiragana 32 文字列内のカタカナをひらがなに変換します
Dim sh1 As String, st2 As String
Dim i As Integer, j As Integer
Dim LC As Integer, CC As Integer
Dim wk_nm1 As String, wk_nm2 As String, wk_nm3 As String
sh1 = "変換前"
sh2 = "変換後"
LC = 1000
CC = 10
Sheets(sh2).Select
Range(Cells(1, 1), Cells(LC, CC)).Select
Selection.ClearContents
Sheets(sh2).Cells(1, 1).Select
For i = 1 To LC
For j = 1 To CC
wk_nm1 = Sheets(sh1).Cells(i, j)
If InStr(wk_nm1, "http") <= 0 And _
InStr(wk_nm1, ":\") <= 0 Then
Sheets(sh2).Cells(i, j) = Trim(StrConv(wk_nm1, r))
Else
Sheets(sh2).Cells(i, j) = Trim(wk_nm1)
End If
Next j
Next i
End Function
Sub CNVMOJI_Upp()
Dim RET As Variant
RET = CNVMOJI(1)
End Sub
Sub CNVMOJI_Low()
Dim RET As Variant
RET = CNVMOJI(2)
End Sub
Sub CNVMOJI_Pro()
Dim RET As Variant
RET = CNVMOJI(3)
End Sub
サンプルはUWSCモジュール先頭10行とする
大文字指定:CNVMOJI_Upp()
※下記は大文字変換後のサンプル文
//Edgeを閉じる!!
CTRLWIN(GETID("EDGE"),CLOSE)
//環境に合わせて変更すること
//EDGE = EXEC( "C:\Program Files (X86)\Microsoft\Edge\Application\MSEDGE.EXE" )
EDGE = EXEC( "C:\Program Files\Microsoft\Edge\Application\MSEDGE.EXE" )
SLEEP(1)
//JRAのsitemapを立ち上げる
URL="http://www.jra.go.jp/sitemap/"
SENDSTR(EDGE, URL)
SCKEY(EDGE, VK_RETURN)
//EXEC("CMD /C START=http://www.jra.go.jp/sitemap/")
SLEEP(1)
//ここまでをサンプルで使用する。
小文字指定:CNVMOJI_Low()
※下記は小文字変換後のサンプル文
//edgeを閉じる!!
ctrlwin(getid("edge"),close)
//環境に合わせて変更すること
//EDGE = EXEC( "C:\Program Files (X86)\Microsoft\Edge\Application\MSEDGE.EXE" )
EDGE = EXEC( "C:\Program Files\Microsoft\Edge\Application\MSEDGE.EXE" )
sleep(1)
//jraのsitemapを立ち上げる
URL="http://www.jra.go.jp/sitemap/"
sendstr(edge, url)
sckey(edge, vk_return)
//EXEC("CMD /C START=http://www.jra.go.jp/sitemap/")
sleep(1)
先頭だけ大文字:CNVMOJI_Pro()
※下記は先頭だけ大文字変換後のサンプル文
//edgeを閉じる!!
Ctrlwin(getid("edge"),close)
//環境に合わせて変更すること
//EDGE = EXEC( "C:\Program Files (X86)\Microsoft\Edge\Application\MSEDGE.EXE" )
EDGE = EXEC( "C:\Program Files\Microsoft\Edge\Application\MSEDGE.EXE" )
Sleep(1)
//jraのsitemapを立ち上げる
URL="http://www.jra.go.jp/sitemap/"
Sendstr(edge, Url)
Sckey(edge, Vk_return)
//EXEC("CMD /C START=http://www.jra.go.jp/sitemap/")
Sleep(1)
今回はStrconvを使った文字列変換を試してみた。
Function CNVMOJI(r) r:に下記の数字を入れると説明のとおり変換する
Function CNVMOJI(r)
1:文字列を大文字に変換します
2:文字列を小文字に変換します
3:文字列の各単語の先頭の文字を大文字に変換します
4:文字列内の半角文字を全角文字に変換します
8:文字列内の全角文字を半角文字に変換します
16:文字列内のひらがなをカタカナに変換します
32:文字列内のカタカナをひらがなに変換します
※忘れた頃にたまに使う[StrConv関数]
直接的な指定の場合は、StrConv(wk_nm1, vbUpperCase)とした方が分かり易いが、モジュール内に入れて今回のように汎用的に使う場合は、数値で指定した方が上手く使い回せる場合が多い。
編集後記
私もたまに、「全角半角変換」は使うのでその都度ググってパラメータを確認したりする。
‘vbWide 4 文字列内の半角文字を全角文字に変換します
‘vbNarrow 8 文字列内の全角文字を半角文字に変換します
MessageBox同様になかなか連続で使ってないと、すぐに忘れるw
それでは、またね~😎