次の方法で共有


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 では、ソースの場所へのデータの行と列の入れ替えを行うかどうかを決定します。 行と列を入れ替える範囲は対角線で反転されるため、行 123 が列 ABC になります。

次のコード サンプルと画像は、この動作をシンプルなシナリオで示しています。

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();
});

範囲のコピーと貼り付け前のデータ

範囲のコピー メソッドが実行される前の Excel のデータ。

範囲のコピーと貼り付け後のデータ

範囲のコピー メソッドが実行された後の Excel のデータ。

セルの切り取りと貼り付け (移動)

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();
});

関連項目