Excelを使用していると、変数名を定数形式(例:“StrThresh” を “STR_THRESH”)に変換する必要が出てくることがあります。特に、コード管理や命名規則の統一のために、このような変換が求められる場合があります。この記事では、VBA(Visual Basic for Applications)を使って選択したセル範囲内の文字列を定数形式に変換するマクロの作成方法を詳しく解説します。

はじめに

Excelで大量のデータを扱う際、変数名や定数名の形式を統一することはコードの可読性やメンテナンス性を向上させるために重要です。特に、キャメルケース(例:“camelCase”)からスネークケース(例:“CAMEL_CASE”)への変換は一般的な要件の一つです。そこで、VBAを使用して、この変換を自動化するマクロを作成します。

変換の要件

今回のマクロでは以下の要件を満たします。

  1. 大文字変換
    すべての文字を大文字に変換します。
  2. アンダースコアの挿入
    小文字の後に大文字が続く場合、その間にアンダースコア(_)を挿入します。

例えば:

  • “StrThresh” → “STR_THRESH”
  • “camelCase” → “CAMEL_CASE”
  • “XMLHttpRequest” → “XML_HTTP_REQUEST”

VBAマクロのコード

以下が、上記の要件を満たすVBAマクロのコードです。

Sub ConvertStringFormat()
    Dim cell As Range
    Dim text As String
    Dim i As Integer
    Dim result As String
    
    ' 選択されたセル範囲に対して処理を行う
    For Each cell In Selection
        text = cell.Value
        result = ""
        
        ' 文字列を1文字ずつ処理
        For i = 1 To Len(text)
            ' 現在の文字が大文字で、前の文字が小文字の場合、アンダースコアを挿入
            If i > 1 Then
                If UCase(Mid(text, i, 1)) = Mid(text, i, 1) And _
                   LCase(Mid(text, i - 1, 1)) = Mid(text, i - 1, 1) Then
                    result = result & "_"
                End If
            End If
            
            ' 文字を大文字に変換して追加
            result = result & UCase(Mid(text, i, 1))
        Next i
        
        ' 結果をセルに書き込む
        cell.Value = result
    Next cell
End Sub

コードの説明

  1. 変数の宣言

    • cell: 処理対象のセルを表します。
    • text: セル内の元の文字列。
    • i: ループカウンタ。
    • result: 変換後の文字列を蓄積します。
  2. セル範囲のループ処理

    • For Each cell In Selection で選択されたすべてのセルを順に処理します。
  3. 文字列の1文字ずつの処理

    • For i = 1 To Len(text) で文字列の各文字を順に処理します。
    • 現在の文字が大文字で、前の文字が小文字の場合、resultにアンダースコアを追加します。
    • すべての文字を大文字に変換し、resultに追加します。
  4. 結果の書き戻し

    • 変換後の文字列を元のセルに上書きします。

マクロの使い方

以下の手順でマクロをExcelに導入し、実行します。

Excel VBAエディタを開く

  • Excelを開き、Alt + F11 を押してVBAエディタを起動します。

新しいモジュールを挿入する

  • VBAエディタ内で、左側のプロジェクトエクスプローラーから対象のブックを選択。
  • メニューから 挿入 > モジュール を選択します。

コードを貼り付ける

  • 挿入されたモジュールに、上記のVBAコードをコピー&ペーストします。

Excelシートに戻る

  • Alt + Q を押してVBAエディタを閉じ、Excelシートに戻ります。

マクロを実行する

  • 変換したい文字列が入力されているセル範囲を選択します。
  • リボンの 開発 タブをクリックし、マクロ を選択します。
  • マクロ一覧から ConvertStringFormat を選び、実行 をクリックします。

注: 開発 タブが表示されていない場合は、ファイル > オプション > リボンのユーザー設定開発 にチェックを入れて表示させてください。

動作例

以下に、マクロの動作例を示します。

変換前変換後
StrThreshSTR_THRESH
camelCaseCAMEL_CASE
XMLHttpRequestXML_HTTP_REQUEST

手順

  1. 上記の変換前の文字列をExcelのセルに入力します。
  2. 該当するセル範囲を選択します。
  3. ConvertStringFormat マクロを実行します。
  4. セルの値が定数形式に変換されます。

カスタマイズと拡張

必要に応じて、このマクロをさらにカスタマイズすることも可能です。例えば:

  • アンダースコア以外の区切り文字を使用
    アンダースコア以外の区切り文字(例:ハイフン)に変更できます。
  • 特定の文字やパターンを除外
    例えば、特定の接頭辞や接尾辞を持つ文字列を変換対象から除外するなど。
  • 複数の変換ルールを適用
    キャメルケース以外の命名規則にも対応するよう拡張できます。

ハイフンを区切り文字に変更

アンダースコアの代わりにハイフンを使用する場合、以下の部分を変更します。

result = result & "-"

元のコードのアンダースコア部分をハイフンに置き換えるだけで実現可能です。

まとめ

この記事では、Excel VBAを使用してセル内の変数名を定数形式に変換するマクロの作成方法を解説しました。自動化することで、手動での変換にかかる時間を節約し、命名規則の一貫性を保つことができます。ぜひ、業務効率化に役立ててください。