4

コンテキスト: R を使用してデータ操作を行い、それを Excel にエクスポートして棒グラフを作成しています。

問題:これまでのところ、Excel VBA マクロを記録し、それを RDCOMClient パッケージを介して R コードに変換するのは比較的簡単です。しかし、VBA "with" 関数構造をどのように解釈するのか途方に暮れています。

質問:次の Excel VBA コードを R コードに変換したいと考えています (特に RDCOMClient パッケージを使用):

' Activate barchart
ActiveSheet.ChartObjects("Chart 1").Activate

' Select the Male data column
ActiveChart.SeriesCollection(1).Select

' Change the colour of the Male bars in the barchart
With Selection.Format.Fill
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorAccent1
    .ForeColor.TintAndShade = 0
    .ForeColor.Brightness = 0
    .Solid
End With

再現可能なコード:次の R コードは、Excel ワークシートに棒グラフを設定します。

# Load package and helper functions - see http://www.omegahat.org/RDCOMClient
require(RDCOMClient)
source("http://www.omegahat.org/RDCOMClient/examples/excelUtils.R")

# Create Excel application
xls <- COMCreate("Excel.Application")

# Make Excel workbook visible to user
xls[["Visible"]] <- TRUE

# Add a worksheet to the workbook
wb = xls[["Workbooks"]]$Add(1)

# Add data.frame to worksheet (Hishest Qualification of Job Applicants by Sex)
df <- data.frame(Degree=c("BSc", "MSc", "PhD"), Male=c(322, 107, 39), Female=c(251, 128, 25))
exportDataFrame(df, at = wb$ActiveSheet()$Range("A1"))

# Add Chart
chart.display.range <- wb$ActiveSheet()$Range("E2:M20")
wb$ActiveSheet()$Range("A1:C4")$Select()
wb$ActiveSheet()$Shapes()$AddChart(Top = chart.display.range$Top(), 
                                   Left = chart.display.range$Left(), 
                                   Height = chart.display.range$Height(), 
                                   Width = chart.display.range$Width())$Select()

これまでに行ったこと: VBA コードの最初の 2 行は、R に簡単に変換できます。

# Activate chart
wb$ActiveSheet()$ChartObjects("Chart 1")$Activate()

# Select the Male data column
male <- wb$ActiveChart()$SeriesCollection(1)
male$Select()

そして、with構造のために

# bar colour to be changed (this is a guess)
bar <- male$Selection()$Format()$Fill()

次のエラーが発生します。

#Error in .COM(x, name, ...) : 
# Cannot locate 0 name(s) Selection in COM object (status = -2147352570)

「選択」として解釈しているものは使用すべきではありませんか? ここからどこへ行くべきかわかりませんが、上記のエラーを修正したら、次のようなことをすると思います。

bar[["Visible"]] = 1
bar[["ForeColor"]][["ObjectThemeColor"]] = 5
bar[["ForeColor"]][["TintAndShade"]] = 0
bar[["ForeColor"]][["Brightness"]] = 0

前もって感謝します!

PS RプロットをExcelにエクスポートするオプションがあるかもしれないことは知っていますが、「with」関数構造を解釈する方法を理解しようとすることにもっと興味があります.

PPS Windows 7 x64、x86_64-w64-mingw32/x64 (64 ビット)、R 3.0.1、RDCOMClient_0.93-0.1 を使用しています

4

1 に答える 1