私の回避策は、私のためにコピー貼り付けを行うようにExcelマクロを呼び出すことでした。ワークシートとRangeオブジェクトをマクロに渡すときにエラーが発生したので、以下のコードでは文字列識別子のみを使用します。
パイソン
def copypaste_range(wb_string,
ws_source_string,
rng_to_copy_string,
ws_destination_string,
rng_to_paste_string):
import xlwings as xw
xw.App.display_alerts = False
folder = r'D:\My Documents'
xls_path = folder + r'\xlwings_macros.xlsb'
wb_macros = xw.Book(xls_path)
wb_macro = wb_macros.macro('copypaste_range')
wb_macro(wb_string,
ws_source_string,
rng_to_copy_string,
ws_destination_string,
rng_to_paste_string)
xw.App.display_alerts = True
wb_macros.close()
VBAは
Public Sub copypaste_range(wb_string, _
ws_source_string, rng_to_copy_string, _
ws_destination_string, rng_to_paste_string)
Dim wb As Workbook
Dim fso As New FileSystemObject
If Not IsWorkBookOpen(wb_string) Then
Set wb = Workbooks.Open(fileName:=wb_string)
Else
wb_string = fso.GetFileName(wb_string)
Set wb = Workbooks(wb_string)
End If
Dim rng_to_copy As Range
Dim rng_to_paste As Range
Set rng_to_copy = wb.Sheets(ws_source_string).Range(rng_to_copy_string)
Set rng_to_paste = wb.Sheets(ws_destination_string).Range(rng_to_paste_string)
rng_to_copy.Copy _
Destination:=rng_to_paste
End Sub
そのまま式の値をコピーします。実際には、数式自体を処理するか、より簡単に**新しい**式をあなたの例の現在の行に反映させる必要があります。 – stovfl