1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

エクセルで範囲選択した内容をPythonのリスト初期化コードに変換するマクロ(VBA)

Posted at

概要

エクセル上の選択範囲の内容を、Pythonのリスト初期化コードに変換してクリップボードにコピーするVBAコードです。次の図のように選択範囲の先頭行を変数名、以降の行をリストの要素とするPythonプログラムを生成します。

無題.png

クリップボードにテキストをコピーする方法については「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コードエディタを起動し、対象のブックをダブルクリックで選択します。

f1.png

VBAコードを記述するウィンドウが開くので、そこに上記のコードをコピペします。

エクセルに戻って、範囲を選択してからAlt+F8」でマクロを起動、「ThisWorkbook.Range2PythonList」を選択して実行します。

f2.png

選択範囲の内容が、Pythonのリストの初期化コードに変換されクリップボードにコピーされます。あとは、適当なエディタに貼り付けて利用します(必要に応じて import datetime を追記してください)。

f3.png

参考資料

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?