PowerPoint でリンクされた Excel テーブルにスタイルを設定する方法はありますか?

PowerPoint でリンクされた Excel テーブルにスタイルを設定する方法はありますか?

私の PPT (PowerPoint 2010) には、Excel 2010 ワークシートの一部からのリンク テーブルがあります。Excel でデータを更新すると、PPT のテーブルも自動的に更新され、期待どおりに正常に動作します。

ここで問題となるのは、PowerPoint 2010 の組み込みスタイルを使用して、このリンクされた表のスタイルを設定する方法です。通常の PowerPoint 表を挿入すると、リボンの [表ツール] の下に [デザイン] と [レイアウト] の 2 つのタブが表示されます。[デザイン] タブの [表スタイル] セクションでは、組み込みの表スタイルを使用して、表のスタイルをすばやく設定できます。

ただし、Excel からリンクされたテーブルがある場合、これらのオプションはありません。テーブルを選択すると、リボンの [テーブル ツール] の下に [書式] タブが 1 つだけ表示されます。また、PowerPoint に組み込まれているテーブル スタイルは使用できません。このため、リンクされたテーブルは、他の通常の PowerPoint テーブルと比較して、スタイルの点で一貫性がありません。

答え1

残念ながら、組み込みスタイルは、リンクまたは貼り付けられたテーブルではなく、PowerPoint で作成されたテーブルのスタイル設定にのみ使用できます。

満足できる結果が得られるかどうかはわかりませんが、一時的な方法としては、好みのスタイルで空の PowerPoint テーブルを作成し、リンクされた Excel テーブルを重ねるという方法があります。Excel と PowerPoint の間で少し調整するだけで、適切な配置やフォントの一致などを実現できます。この図は、私が作成した非常に簡単なモックアップの結果を示しています。

ここに画像の説明を入力してください

答え2

一般的に、リンクされたコンテンツに関する問題は、PowerPoint ではそれが何であるかがわからないことです。PowerPoint には、コンテンツの画像 (コンテンツを作成したアプリケーション (この場合は Excel) によって渡されます) と、実際のデータを含むファイルへのリンクがあります。コンテンツを編集する場合、PowerPoint でできることは、元のアプリでコンテンツを有効にすることだけです。

最初に Excel でテーブルをフォーマットするのが最善策かもしれません。

特定の PPT スタイルに一致させたい場合は、PPT で表を作成し、それをコピーして Excel に貼り付けます。最初にすべてのセルにテキストを入力する必要があります。そうしないと、Excel は空のセルに既定のテキスト書式を適用します。必要に応じて列幅を調整し、実際のデータを追加してファイルを保存します。その後、そこから PPT にリンクします。

答え3

ご回答ありがとうございます。しかし、私にとっては、依然として PPT で表のスタイルを設定し、Excel でデータを編集するのが最善の解決策のように思えます。そこで、Excel から PPT にデータを転送する小さな VBA コードを書きましたが、私の場合は完璧に機能しました。

コードは次のとおりです:

Option Explicit
Option Base 1

Const WB_FINANCIALS As String = "\CPMR Financials.xlsm"
Const WS_SALES As String = "Sales Forecast"

Const SLIDE_SALES_FORECAST As String = "SalesForecast"

Const TABLE_SALES_FORECAST As String = "TableSalesForecast"

Const R_CPMA_COM_SALES As String = "cpma_complete_sales"
Const R_CPMA_LARGE_ATC_SALES As String = "cpma_large_atc_sales"
Const R_CPMA_REGULAR_ATC_SALES As String = "cpma_regular_atc_sales"
Const R_CPMA_REPORTS_SALES As String = "cpma_reports_sales"
Const R_RXR_REPORTS_SALES As String = "rxr_reports_sales"
Const R_TOTAL_SALES As String = "total_sales"


Sub ReadFinancialsBook()
    Dim XLApp As Excel.Application
    Dim FBook As Excel.Workbook
    Dim SalesForecast As Excel.Worksheet

    Set XLApp = Excel.Application
    Set FBook = XLApp.workbooks.Open(FileName:=ActivePresentation.Path + WB_FINANCIALS, ReadOnly:=True)
    Set SalesForecast = FBook.Worksheets(WS_SALES)

    Dim PPT As Presentation
    Dim SalesSlide As Slide

    Set PPT = ActivePresentation
    Set SalesSlide = PPT.Slides(SLIDE_SALES_FORECAST)
    Call ReadSalesForecast(SalesSlide, SalesForecast)

    Set SalesSlide = Nothing
    Set PPT = Nothing

    FBook.Close
    Set SalesForecast = Nothing
    Set FBook = Nothing
    Set XLApp = Nothing
End Sub

Private Sub ReadSalesForecast(S As Slide, WS As Excel.Worksheet)
    Dim T As Table
    Set T = S.Shapes(TABLE_SALES_FORECAST).Table

    Call WriteWSRangeToTable(T, 2, 4, WS, R_CPMA_COM_SALES)
    Call WriteWSRangeToTable(T, 5, 4, WS, R_CPMA_LARGE_ATC_SALES)
    Call WriteWSRangeToTable(T, 8, 4, WS, R_CPMA_REGULAR_ATC_SALES)
    Call WriteWSRangeToTable(T, 11, 4, WS, R_CPMA_REPORTS_SALES)
    Call WriteWSRangeToTable(T, 14, 4, WS, R_RXR_REPORTS_SALES)
    Call WriteWSRangeToTable(T, 17, 4, WS, R_TOTAL_SALES)

    Set T = Nothing
End Sub

Private Sub WriteWSRangeToTable(T As Table, row As Integer, col As Integer, WS As Excel.Worksheet, Name As String)
    Dim i, j, r, c As Integer
    Dim str As String

    r = WS.Range(Name).Rows.Count
    c = WS.Range(Name).Columns.Count

    For i = 1 To r
        For j = 1 To c
            str = CStr(WS.Range(Name).Cells(i, j))
            str = Format(str, "#,##0")
            T.Cell(row + i - 1, col + j - 1).Shape.TextFrame.TextRange.Text = str
        Next j
    Next i
End Sub

関連情報