Excel VBA から Python 実行で、Snake case ⇔ Camel case

Python インストールしてないPCでは動作しない。
xlwings のインストールも必要。

ということで、Python インストールしている人にしかお奨めしない Excel VBA から実行するもの。
Excel VBA は、筆者はまったく理解していない≒初心者≒素人です。

今回、Excel の作成を紹介します。
Excel 準備
ボタンを配置してVBAマクロを記述するために、Excel のオプションを開いて、
「リボンのユーザ設定」で、「メインタブ」の「開発」をチェックONにします。
f:id:posturan:20191003114603j:plain
メニューに「開発」が出るので、「開発」→ VisualBasic で、VBA のウィンドウが開きます。
開いたら、Python の xlwings モジュールをインポートします。
 (前提:  xlwings  は、 pip でインストール済 )
f:id:posturan:20191003115046j:plain
xlwings がインストールされているフォルダ、
Python の Lib の下の site-packages
Pythonインストールフォルダ\Lib\site-packages  
に、xlwings フォルダがあり、その下に、xlwings.bas があるはずです。
xlwings.basをインポートします。
f:id:posturan:20191003115644j:plain
VBA プロジェクトの標準モジュールフォルダに、xlwings が追加されます。
f:id:posturan:20191003115820j:plain

Python コードの準備
snakecamel.py
変換対象、書込み対象の文字列は、B列とD列で書いてます。

# -*- coding: UTF-8 -*-
import xlwings as xw

def toCamelCase(string, titleCase=False):
    import re
    if titleCase:
        return ''.join(x.title() for x in string.split('_'))
    else:
        return re.sub("_(.)", lambda m:m.group(1).upper(), string.lower())
def toSnakeCase(string, upper=False):
    import re
    if upper:
        return re.sub("(.[A-Z])", lambda x: x.group(1)[0] + "_" + x.group(1)[1], string).lower().upper()
    else:
        return re.sub("(.[A-Z])", lambda x:x.group(1)[0] + "_" +x.group(1)[1], string).lower()
    
def writeCamel():
    sheet = xw.sheets[0]
    if sheet.range('B1').value:
        for i in range(4, sheet.range('B3').current_region.last_cell.row + 1):
            snakestr = sheet.range("B%d" % i).value
            sheet.range("D%d" % i).value = toCamelCase(snakestr, True)
    else:
        for i in range(4, sheet.range('B3').current_region.last_cell.row + 1):
            snakestr = sheet.range("B%d" % i).value
            sheet.range("D%d" % i).value = toCamelCase(snakestr)
def writeSnake():
    sheet = xw.sheets[0]
    if sheet.range('D1').value:
        for i in range(4, sheet.range('D3').current_region.last_cell.row + 1):
            camelstr = sheet.range("D%d" % i).value
            sheet.range("B%d" % i).value = toSnakeCase(camelstr, True)
    else:
        for i in range(4, sheet.range('D3').current_region.last_cell.row + 1):
            camelstr = sheet.range("D%d" % i).value
            sheet.range("B%d" % i).value = toSnakeCase(camelstr)

Excel のつづき、
ボタンを用意します。
f:id:posturan:20191003121929j:plain
f:id:posturan:20191003122024j:plain
ボタンクリックの関数名を設定して、「新規作成」を押して、
Python 呼出しの記述を行います。
Call RunPython で、
import Pythonファイル名拡張子を除く。
↑の名称 + "." ドット + メソッド
で呼び出します。
f:id:posturan:20191003122436j:plain

Excel 全体は以下のようなものです。
f:id:posturan:20191003123259j:plain
チェックボックスは、コントロールの書式設定
→ コントロールタブで反映先を設定すると、
真偽値(TRUE/FALSE)が入るので反映先は、隠れる場所に配置します。