Excel JavaScript API を使用して範囲を切り取り、コピー、貼り付ける
この記事では、Excel JavaScript API を使用して範囲を切り取り、コピー、貼り付けるコード サンプルについて説明します。 オブジェクトがサポートする Range
プロパティとメソッドの完全な一覧については、「 Excel.Range クラス」を参照してください。
注:
Excel JavaScript API には、"Cell" オブジェクトまたはクラスがありません。 代わりに、Excel JavaScript API はすべての Excel セルを Range
オブジェクトとして定義します。 Excel UI の個々のセルは、Excel JavaScript API の 1 つのセルを持つ Range
オブジェクトに変換されます。 1 つの Range
オブジェクトに複数の連続したセルを含めることもできます。 詳しくは、「Excel JavaScript API を使用したセルの操作」を参照してください。
ヒント
完全なサンプルでこの記事の API の切り取り、コピー、貼り付けを試すには、Excel で [スクリプト ラボ] を開き、[サンプル] ライブラリの [範囲のコピーと貼り付け] を選択します。
Copy and paste
Range.copyFrom メソッドは、Excel UI のコピーおよび貼り付けアクションをレプリケートします。 変換先は、 で Range
呼び出される copyFrom
オブジェクトです。 コピーされるソースは、範囲または範囲を表す文字列のアドレスとして渡されます。
次のコード サンプルでは、A1:E1 のデータを G1 で始まる範囲にコピーします (この貼り付けは G1:K1 で終わります)。
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getItem("Sample");
// Copy everything from "A1:E1" into "G1" and the cells afterwards ("G1:K1").
sheet.getRange("G1").copyFrom("A1:E1");
await context.sync();
});
Range.copyFrom
には、省略可能なパラメーターが 3 つあります。
copyFrom(sourceRange: Range | RangeAreas | string, copyType?: Excel.RangeCopyType, skipBlanks?: boolean, transpose?: boolean): void;
copyType
では、ソースからコピー先にコピーされるデータを指定します。
Excel.RangeCopyType.formulas
は、ソース セル内の数式を転送し、それらの数式の範囲の相対的な位置を保持します。 任意の数式以外のエントリはそのままコピーされます。Excel.RangeCopyType.values
では、データ値と、数式の場合は数式の結果をコピーします。Excel.RangeCopyType.formats
では、フォント、色、およびその他の書式設定を含む、範囲の書式設定をコピーしますが、値はコピーしません。Excel.RangeCopyType.all
(既定のオプション) は、データと書式設定の両方をコピーし、見つかった場合はセルの数式を保持します。
skipBlanks
では、空白セルをコピー先にコピーするかどうかを設定します。 true の場合、copyFrom
ではソースの範囲にある空白セルはスキップされます。
スキップされたセルでは、コピー先の範囲内の対応するセルにある既存のデータを上書きすることはありません。 既定値は false です。
transpose
では、ソースの場所へのデータの行と列の入れ替えを行うかどうかを決定します。
行と列を入れ替える範囲は対角線で反転されるため、行 1、2、3 が列 A、B、C になります。
次のコード サンプルと画像は、この動作をシンプルなシナリオで示しています。
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getItem("Sample");
// Copy a range, omitting the blank cells so existing data is not overwritten in those cells.
sheet.getRange("D1").copyFrom("A1:C1",
Excel.RangeCopyType.all,
true, // skipBlanks
false); // transpose
// Copy a range, including the blank cells which will overwrite existing data in the target cells.
sheet.getRange("D2").copyFrom("A2:C2",
Excel.RangeCopyType.all,
false, // skipBlanks
false); // transpose
await context.sync();
});
範囲のコピーと貼り付け前のデータ
範囲のコピーと貼り付け後のデータ
セルの切り取りと貼り付け (移動)
Range.moveTo メソッドは、ブック内の新しい場所にセルを移動します。 このセルの移動動作は、セルが範囲の境界線をドラッグして移動したときや、[切り取りと貼り付け] アクションを実行する場合と同じように動作します。 範囲の書式設定と値の両方が、 パラメーターとして指定された場所に destinationRange
移動されます。
次のコード サンプルでは、 メソッドを使用して範囲を Range.moveTo
移動します。 変換先の範囲がソースよりも小さい場合は、ソース コンテンツを含むように展開されることに注意してください。
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
sheet.getRange("F1").values = [["Moved Range"]];
// Move the cells "A1:E1" to "G1" (which fills the range "G1:K1").
sheet.getRange("A1:E1").moveTo("G1");
await context.sync();
});
関連項目
Office Add-ins