

下記に示すコードでExcelのデータをランダムフォレストを用いて解析しようとしたらExcelマクロの方で下記のようなエラーが発生してしまいました。

恐らくDataFilePathが上手く取得できていないものと考えられますが、定義の部分で絶対パスを定義してみたりしたのですが、実行できません。  
何か対処法ご存じの方いらっしゃたらご助言お願い致します。

### 現状のソースコード

Excelマクロ

[code]

    Sub RandomForest()
        On Error GoTo ErrorHandler ' エラーハンドリングを設定
        
        Dim PythonPath As String
        Dim PythonScript As String
        Dim DataRange As Range
        Dim OutputRange As Range
        Dim DataFilePath As String
        Dim OutputFilePath As String
        Dim OutputFileDirectory As String
        
        ' Pythonのパスを指定
        PythonPath = "C:\Users\katou\anaconda4\python.exe"
        
        ' Pythonスクリプトのパスを指定
        PythonScript = "\RadomForest.py"
        
        ' データの範囲を指定
        On Error Resume Next ' エラーが発生した場合は次の行に進む
        Set DataRange = Sheets("Sheet1").Range("B3:K5,P3:P5")
        On Error GoTo 0 ' エラーハンドリングを元に戻す
        
        If DataRange Is Nothing Then ' データの範囲が取得できなかった場合はエラーメッセージを表示
            MsgBox "データの範囲を指定できませんでした。", vbCritical
            Exit Sub
        End If
        
        ' 出力先の範囲を指定
        Set OutputRange = Sheets("Sheet1").Range("S3")
        
        ' データファイルのパスを設定
        DataFilePath = ThisWorkbook.Path & "\data.csv"
        
        ' データを一時的なCSVファイルに保存
        DataRange.Copy
        With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
            .SetText .GetFromClipboard()
            .PutInFile DataFilePath
        End With
        ' Pythonスクリプトを実行
        Shell PythonPath & " " & PythonScript & " " & DataFilePath & " " & OutputFilePath, vbNormalFocus
        
        ' 出力ファイルのディレクトリパスを取得
        OutputFileDirectory = ThisWorkbook.Path & "\"
        
        OutputFilePath = OutputFileDirectory & "output.csv"
        
        ' 出力結果を読み込んでExcelに貼り付け
        On Error Resume Next ' エラーが発生した場合は次の行に進む
        With Application.Workbooks.Open(OutputFilePath)
            .Sheets(1).UsedRange.Copy OutputRange
            .Close False
        End With
        On Error GoTo 0 ' エラーハンドリングを元に戻す
        
        If Err.Number <> 0 Then ' 出力ファイルの読み込みに失敗した場合はエラーメッセージを表示
            MsgBox "出力ファイルの読み込みに失敗しました。", vbCritical
            Exit Sub
        End If
        
        Kill DataFilePath
        Kill OutputFilePath
        Exit Sub ' 正常終了時はここで終了する
        
    ErrorHandler: ' エラーハンドリング用のラベル
        MsgBox "エラーが発生しました: " & Err.Description, vbCritical
    End Sub
    
    
    
[/code]

Pythonスクリプト

[code]

    import sys
    import pandas as pd
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.feature_selection import SelectFromModel
    
    # コマンドライン引数から入力ファイルパスと出力ファイルパスを取得
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    
    # データを読み込む
    data = pd.read_csv(input_file)
    
    # 目的パラメータ（y）を指定
    y = data['P3':'P5']
    
    # 説明変数（x）を指定
    X = data.loc[2:4, 'B':'K']
    
    # ランダムフォレストモデルを学習
    model = RandomForestClassifier()
    model.fit(X, y)
    
    # 特徴量の重要度を取得
    importances = model.feature_importances_
    
    # 特徴量抽出を行う
    selector = SelectFromModel(model, threshold=0.1)
    selector.fit(X, y)
    X_selected = selector.transform(X)
    
    # 結果をCSVファイルに保存
    result = pd.DataFrame({'importance': importances})
    result.to_csv(output_file, index=False)
    
[/code]


CC BY-SA 4.0
2023-07-09T10:14:19.397
95539
2023-07-09T15:33:43.620
2023-07-09T15:33:43.620
58850
58850
question
python vba excel
ExcelマクロからPythonスクリプトが実行できない