概要
エクセル上の選択範囲の内容を、Pythonのリスト初期化コードに変換してクリップボードにコピーするVBAコードです。次の図のように選択範囲の先頭行を変数名、以降の行をリストの要素とするPythonプログラムを生成します。
クリップボードにテキストをコピーする方法については「VBA 失敗しない文字列をクリップボードへコピーする方法」で紹介されているコードを、そのまま利用させていただきました。
コード
選択範囲(Range)をPythonのリスト(初期化コード)に変換
Sub Range2PythonList()
If TypeName(Selection) <> "Range" Then
Exit Sub
End If
sCol = Selection(1).Column '範囲開始列
eCol = Selection(Selection.Count).Column '範囲終了列
sRow = Selection(1).Row '範囲開始行
eRow = Selection(Selection.Count).Row '範囲終了行
If sRow = eRow Then
Exit Sub
End If
pCode = ""
For c = sCol To eCol
pCode = pCode & Cells(sRow, c).Value & "=["
For r = sRow + 1 To eRow
v = Cells(r, c).Value
Select Case TypeName(v)
Case "String"
pCode = pCode & "'" & v & "'"
Case "Empty", "Null", "Nothing"
pCode = pCode & "None"
Case "Date"
pCode = pCode & "datetime.datetime(" _
& Year(v) & "," _
& Month(v) & "," _
& Day(v) & "," _
& Hour(v) & "," _
& Minute(v) & "," _
& Second(v) & ")"
Case Else
pCode = pCode & v
End Select
pCode = pCode & ","
Next r
pCode = Left(pCode, Len(pCode) - 1) & "]" & vbCrLf
Next c
Debug.Print pCode
SetClip (pCode)
End Sub
'クリップボードにテキストをコピー
' https://info-biz.club/windows/vba/vba-set-clipboard.html
Sub SetClip(S As String)
With CreateObject("Forms.TextBox.1")
.MultiLine = True
.Text = S
.SelStart = 0
.SelLength = .TextLength
.Copy
End With
End Sub
実行方法
エクセルを起動して「Alt+F11」でVBAコードエディタを起動し、対象のブックをダブルクリックで選択します。
VBAコードを記述するウィンドウが開くので、そこに上記のコードをコピペします。
エクセルに戻って、範囲を選択してから「Alt+F8」でマクロを起動、「ThisWorkbook.Range2PythonList」を選択して実行します。
選択範囲の内容が、Pythonのリストの初期化コードに変換されクリップボードにコピーされます。あとは、適当なエディタに貼り付けて利用します(必要に応じて import datetime
を追記してください)。