■VBAのカレントディレクトリの参照
Sub Test()
'カレントディレクトリを確認
Debug.Print "変更前のパス:" & CurDir
'カレントディレクトリを変更
Debug.Print "変更予定のパス:" & "D:"
ChDrive "D"
ChDir "D:"
'変更後のパス確認
Debug.Print "変更後のパス:" & CurDir
End Sub
■マクロ実行ファイルのフォルダパスを確認
Sub Test2()
'マクロ実行ファイルのフォルダパスを確認
Debug.Print "マクロ実行ファイルのフォルダパス:" & ThisWorkbook.Path
End Sub
■Pythonで実行中のファイルの場所(パス)を取得する
import os
print('basename: ', os.path.basename(__file__))
print('dirname: ', os.path.dirname(__file__))
■実行中のファイルの絶対パスを取得
import os
print('abspath: ', os.path.abspath(__file__))
print('abs dirname: ', os.path.dirname(os.path.abspath(__file__)))
■VBAからpythonコードを起動する方法1:RunPythonを使う
出典;https://note.com/gucchi123/n/nc67c6210caeb
・EXCELにxlwingsをインストール必須
・xlwingsの機能でVBAからRunPythonを指定
■VBAからpythonコードを起動する方法2:Call Shellを使う
出典:https://qiita.com/nekoti10chome/items/a8ed071777cf06b78450
・EXCELにxlwingsをインストールがいらない
・exeファイル(外部実行ファイル)ならなんでもOK
Call Shell (python.exeファイルの絶対パスの文字列,pythonコードの絶対パスの文字列)
■xlwingsを使った Excelファイルの読み書き
出典:https://kotablog.pro/python-xlwings-excelfile/
import sys # sysモジュールのインポート
import xlwings as xw # Excelファイルアクセス用
print("\n*** Excelファイルの読み込み ****")
# Excelファイルを開く
print("\nexcel_file1.xlsmを開きます")
file_name1 = r"C:\Python\excel_file1.xlsm" # ファイルのフルパス名
app_excel = xw.App(visible=True) # Excelの画面を表示する
#app_excel = xw.App(visible=False) # Excelの画面を表示しない
wb = xw.Book(file_name1) # ブックを開く
wb.activate() # ブックをアクティブにする
ws = xw.sheets["Sheet1"] # Sheet1を選択
ws.activate() # シートをアクティブにする
# 単一セルの読み込み(セル番地でアクセス)
print("\nA1セルのデータを取得します")
print(xw.Range("A1").value)
# 単一セルの読み込み(行番号、列番号でアクセス)
print("\n1行2列目のデータを取得します")
print(xw.Range((1, 2)).value)
# セル範囲の読み込み
print("\nB1セルからC2セルのデータを取得します")
print(xw.Range("B1:C2").value)
print(xw.Range((1, 2),(2, 3)).value)
# 行方向に読み込み
print("\nA1セルから行方向にデータを取得します")
print(xw.Range("A1").expand('right').value)
print(xw.Range((1, 1)).expand('right').value)
# 列方向に読み込み
print("\nC1セルから列方向にデータを取得します")
print(xw.Range("C1").expand('down').value)
print(xw.Range((1, 3)).expand('down').value)
# 表形式のデータを読み込み
print("\nA1セルを左上とする表形式のデータを取得します")
print(xw.Range("A1").expand('table').value)
print(xw.Range((1, 1)).expand('table').value)
# 単一セルに書き込み(セル番地でアクセス)
print("\nA3セルにデータを書き込みます(A0002)")
xw.Range("A3").value = "A0002"