Officeスクリプトには別のブック・別のファイルを開いて直接データをコピーする機能はありません(2024年時点)
別ブックのデータを活用したい場合はPowerAutomateを利用するか、手動でデータをコピーするしかありません。
ここではOfficeスクリプトとPowerAutomateのを組み合わせた方法を紹介します。
それぞれの役割分担は下記の通りです。
- Officeスクリプト:データの取得・書き込み
- PowerAutomate:別ブックへのアクセス
Officeスクリプトの作成
まずは別ファイル・別ブックを開いたときにデータをコピーする2つのスクリプトを作成します。
シート名・セル範囲・変数名などは例の値が入っているので変更して活用してください。
コピー元からデータを取得するスクリプト
コピー元からデータを取得するスクリプトの例を紹介します。
スクリプトの最初で戻り値のデータの型string[][]
を宣言して、スクリプトの最後でreturn
で値を返すように記載することでPowerAutomateで取得したデータを利用できるようになります。
範囲指定したデータ取得
ワークシート「sheet1」のセル範囲A1:C4のデータを取得するスクリプト例が下記です。
function main(workbook: ExcelScript.Workbook): string[][] {
// コピー元のシートを取得
let sheet = workbook.getWorksheet("Sheet1"); // シート名は任意に設定
// コピーする範囲を取得
let range = sheet.getRange("A1:C4"); // 範囲は任意に設定
// 範囲の値を取得
let values = range.getValues();
// データを返す
return values;
}
使用しているセル範囲のデータ取得
ワークシート「sheet1」の使用しているセル範囲をすべて取得するスクリプト例はこちらです。
function main(workbook: ExcelScript.Workbook): string[][] {
// コピー元のシートを取得
let sheet = workbook.getWorksheet("Sheet1"); // シート名は任意に設定
// シートの使用範囲を取得
let usedRange = sheet.getUsedRange();
// 範囲の値を取得
let values = usedRange.getValues();
// データを返す
return values;
}
コピー先にデータを書き込むスクリプト
コピー先へデータを書き込むスクリプトの例を紹介します。
スクリプトの最初のdata: string[][]
で使用するデータを宣言することでPowerAutomateで利用するデータを設定できるようになります。
範囲指定したデータ書き込み
ワークシート「sheet1」のセル範囲A1:C4のデータを書き込むスクリプト例が下記です。
function main(workbook: ExcelScript.Workbook, data: string[][]): void {
// コピー先のシートを取得
let sheet = workbook.getWorksheet("Sheet1"); // シート名は任意に設定
// 書き込む範囲を取得
let range = sheet.getRange("A1:C4"); // 範囲は任意に設定
// データを書き込む
range.setValues(data);
}
先頭セルを指定したデータ書き込み(範囲は自動設定)
ワークシート「sheet1」のセルA1を先頭にデータを書き込む例です。範囲は自動で設定されます。
function main(workbook: ExcelScript.Workbook, data: string[][]): void {
// コピー先のシートを取得
const sheet = workbook.getWorksheet("Sheet1"); // シート名は任意に設定
// 書き込む範囲を設定(先頭セルの行インデックスと列インデックスを指定)
const range = sheet.getRangeByIndexes(0, 0, data.length, data[0].length); // (例 A1:行インデックス0, 列インデックス0)
// データを書き込む
range.setValues(data);
}
Sponsored link
PowerAutomateフロー作成
次に作成したスクリプトを別ブックで実行するPowerAutomateフローを作成します。
- フローの起動(手動 or 定期実行)
- コピー元のファイルを開いてスクリプトを実行
- コピー先のファイルを開いてスクリプトを実行
フロー作成手順
それでは説明例として下図のように同じOneDrive上にある「ファイルA」から「ファイルB」に「Sheet1」のデータをコピーするフローの作成をします。トリガーは手動トリガーとします。
まずはPowerAutomateフローを作成します。
PowerAutomateのページで 「マイフロー」->「新しいフロー」->「インスタントクラウドフロー」を選択します。
「フローを手動でトリガーする」を選択して「作成」をクリック。フロー名は任意で設定してください。
次にコピー元からデータを取得するアクションを追加します。
フロー下部の+マークをクリックして「Excel Online(Business)」->「スクリプトの実行」を選択する。
パラメータの設定で実行するファイル「ファイルA.xlsx」とスクリプトを選択します。
スクリプト「データ取得」には前述の「コピー元からデータを取得するスクリプト」に記載のスクリプトが書かれています。
次にコピー先にデータを書き込むアクションを追加します。
フロー下部の+マークをクリックして「Excel Online(Business)」->「スクリプトの実行」を選択する。
パラメータの設定で実行するファイル「ファイルB.xlsx」とスクリプトを選択します。引数(ScriptParameters)には前のアクションで取得したコピーデータ「body/result」を選択します。
スクリプト「データ書き込み」には前述の「コピー先にデータを書き込むスクリプト」に記載のスクリプトが書かれています。
動的コンテンツ(フロー内で取得したデータ)を利用する場合は項目欄を選択して、表示された下図のマークをクリックすればOKです。取得しているデータの一覧が表示されます。
これで別ブックからデータをコピーするPowerAutomateフローは完成です。
フロー実行(別ブックからコピー)
上記で作成したフローは手動トリガーとしたので PowerAutomateページの「マイフロー」にある対象フローの実行ボタンをクリックすればフローを開始できます。
実行した後にファイルBを開くと、下図のようにデータがコピーされているのがわかります。
スケジュール済みのクラウドフローで定期実行の設定をした場合はテスト機能などを使い確認してみてください
Sponsored link
コメント