スネークケースで書かれたテーブル定義をEntityに書くためにキャメルケースにしたり、その逆に変換したり。けっこう変換する機会は多いですよね。
そこで、Excel VBAを使って簡単に変換する方法をご紹介します。
目次
【エクセル マクロ】スネークケース・キャメルケース変換
こちらのサイトの情報を参考にさせてもらいました。
汎用的なソースコードまではいきませんが、それなりに変換出来ます。
機能
主な機能は以下のようなものです。
- パスカルケース・キャメルケース→スネークケース(大文字・小文字)
- スネークケース(大文字・小文字)→パスカルケース・キャメルケース
- 全角→半角変換
- スネークケース(大文字・小文字)への変換の場合、前後の”_”を削除
- 末尾の数値を考慮
ソースコード
ソースコードです。エクセルの「開発タブ」を開いて、Visual Basicから標準モジュールに貼り付けて使ってください。「Excel マクロ有効ブック(*.xlsm)」での保存も忘れないでください。
標準モジュールの使い方が分からない方は、こちらを参考にしてください。
''' パスカルケース・アッパーキャメルケース(PascalCase) 変換
''' </summary>
''' <param name="value">変換する値</param>
''' <param name="isCamel">キャメルケース・ローワーキャメルケース(camelCase)にするか</param>
''' <returns></returns>
Public Function ToPascal(ByVal value As String, Optional ByVal isCamel As Boolean = False) As String
Dim ret As String: ret = ""
' 半角変換
value = StrConv(value, vbNarrow)
' スネークケースであるか
If IsSnake(value) Then
' 変換
ret = SnakeToPascal(value)
Else
' そのまま
ret = value
End If
' パスカルケース・キャメルケース変換
If isCamel Then
' 先頭文字を小文字、それ以外はそのまま
ToPascal = LCase(Mid(ret, 1, 1)) & Mid(ret, 2, Len(ret))
Else
' 先頭文字を大文字、それ以外はそのまま
ToPascal = UCase(Mid(ret, 1, 1)) & Mid(ret, 2, Len(ret))
End If
End Function
''' <summary>
''' スネークケース → パスカルケース 変換
''' </summary>
''' <param name="value">変換する値</param>
''' <returns></returns>
Private Function SnakeToPascal(ByVal value As String) As String
Dim ret As String: ret = ""
Dim values As Variant
Dim i As Long
' アンスコ区切りの配列を取得
values = Split(value, "_")
' 先頭文字を大文字、それ以外を小文字に変換
For i = LBound(values) To UBound(values)
ret = ret & UCase(Mid(values(i), 1, 1)) & LCase(Mid(values(i), 2, Len(values(i))))
Next i
SnakeToPascal = ret
End Function
''' <summary>
''' スネークケース(SNAKE_CASE) 変換
''' </summary>
''' <param name="value">変換する値</param>
''' <param name="isUpper">大文字に変換するか</param>
''' <returns></returns>
Public Function ToSnake(ByVal value As String, Optional ByVal isUpper As Boolean = True) As String
Dim ret As String: ret = ""
' 半角変換
value = StrConv(value, vbNarrow)
' スネークケースであるか
If IsSnake(value) Then
' そのまま
ret = value
Else
' 変換
ret = PascalToSnake(value)
End If
' 前後のアンスコの除去
ret = TrimUnderscore(ret)
' 大文字・小文字変換
If isUpper Then
' 大文字
ToSnake = UCase(ret)
Else
' 小文字
ToSnake = LCase(ret)
End If
End Function
''' <summary>
''' パスカルケース → スネークケース 変換
''' </summary>
''' <param name="value">変換する値</param>
''' <returns></returns>
Private Function PascalToSnake(ByVal value As String) As String
Dim ret As String: ret = ""
Dim i As Long
Dim character As String
' 文字を一文字ずつ取り出して繰り返す
For i = 1 To Len(value)
' 対象文字
character = Mid(value, i, 1)
' 先頭文字
If i = 1 Then
ret = ret & character
GoTo CONTINUE
End If
' 数値
If IsNumeric(character) Then
ret = ret & character
GoTo CONTINUE
End If
' 小文字
If LCase(character) = character Then
ret = ret & character
GoTo CONTINUE
End If
' 大文字 かつ 前の文字が小文字
If UCase(character) = character And LCase(Mid(value, i - 1, 1)) = Mid(value, i - 1, 1) Then
' アンダースコアを追加
ret = ret & "_" & character
GoTo CONTINUE
End If
ret = ret & character
CONTINUE:
Next i
PascalToSnake = ret
End Function
''' <summary>
''' 前後のアンスコの除去
''' </summary>
''' <param name="value"></param>
''' <returns></returns>
Private Function TrimUnderscore(ByVal value As String) As String
Dim ret As String: ret = ""
Dim values As Variant
Dim i As Long
' スネークケースであるか
If IsSnake(value) Then
' アンスコ区切りの配列を取得
values = Split(value, "_")
' 先頭文字を大文字、それ以外を小文字に変換
For i = LBound(values) To UBound(values)
' 空じゃない場合、追加
If Len(values(i)) > 0 Then
' 先頭はアンスコをセットしない
If Len(ret) = 0 Then
ret = ret & values(i)
Else
ret = ret & "_" & values(i)
End If
End If
Next i
TrimUnderscore = ret
Else
TrimUnderscore = value
End If
End Function
''' <summary>
''' スネークケースであるか
''' </summary>
''' <param name="value">変換する値</param>
''' <returns>true:スネークケース</returns>
Private Function IsSnake(ByVal value As String) As Boolean
Dim values As Variant
' アンスコ区切りの配列を取得
values = Split(value, "_")
If UBound(values) > 0 Then
IsSnake = True
Exit Function
End If
IsSnake = False
End Function
使い方
Excelのセルに以下のように関数を入力すれば使えます。
ToPascal関数
ToPascal関数の使い方です。引数にTrueを追加することでキャメルケースになります。
ToPascal関数の結果です。
ToSnake関数
ToSnake関数の使い方です。引数にFalseを追加することで小文字表示になります。
ToSnake関数の結果です。
編集後記
VBAで使うとソースコードのカラーがおかしいですね。
気になりますけど、我慢していただけると助かります。
こちらの記事も読まれています!
- プログラムの組み立て方 できない人がやっていないこと
- プログラミング初心者脱出のためのソースコード修正のコツ
- ITエンジニアはスキルが不安なままアラフォーになるとヤバイ!
- プログラマー やめたい、限界なのに無理してませんか?