GAS開発者向けにスプレッドシートのセルのコピー機能をすべてまとめました。
セルのデータや書式を扱う場合、コピーはかなり頻繁に行う処理だと思います。
コピー、貼り付けの方法はいろいろあります。切り取り、値のみコピー、書式のみコピー、いろんなメソッド、パラメータ引数の違い、などなど。
いままで知らなかったコピーのしかたなどがもしあれば活用してみてください。
コピーに関するメソッドをすべて載せてます。少しでも参考になれば幸いです。
Google Apps Script スプレッドシート 基礎 リファレンス
当ページは、GAS公式リファレンスを元にスプレッドシートの機能毎にまとめた基礎的な内容となっております。
若干、文言がおかしい可能性がありますが、あらかじめご了承ください。
GAS基本メソッドまとめ一覧はコチラ↓↓↓です。スプレッドシートの基本的な機能をまとめてますので、ぜひご活用ください。
まずは実際に動かしてみることをオススメします。マクロの登録方法は以下を参照いただければと思います。
GASの本はまだまだ少ないですね。基礎レベルであれば、以下の参考書が初心者にはベストの本です。
基本的な仕様やよく使われる機能の設定方法がまとまっています。
※JavaScriptの知識が既にある程度ある人にとっては冗長かもしれません。
セル範囲クラス[Range]の切り取りとコピー貼り付け
セル範囲の切り取りとコピーメソッドです。いろんな貼り付け方法すべてを記載してます。
切り取り[moveTo(ターゲット)]
moveTo(target)
この範囲からターゲット範囲まで(形式と値の両方)切り取りおよび貼り付けを行います。
function moveToSample() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
// 例:固定A1セルを切り取り、固定A2セルに貼り付け
sheet.getRange('A1').moveTo(sheet.getRange('A2'));
}
名前 | タイプ | 説明 |
---|---|---|
target | Range | この範囲をコピーするターゲット範囲。左上のセル位置のみが関係します。 |
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Range | Methods | moveTo(target)
コピー1[copyTo(先)]
copyTo(destination)
ある範囲のセルから別の範囲のセルにデータをコピーします。値とフォーマットの両方がコピーされます。
function copyTo1Sample() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
// 例:固定A1セルをコピーし、固定A2セルに貼り付け
sheet.getRange('A1').copyTo(sheet.getRange('A2'));
}
名前 | タイプ | 説明 |
---|---|---|
destination | Range | コピー先の範囲。左上のセル位置のみが関係します。 |
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Range | Methods | copyTo(destination)
コピー2[copyTo(先, コピー貼り付けタイプ, 転置)]
copyTo(destination, copyPasteType, transposed)
ある範囲のセルから別の範囲のセルにデータをコピーします。
function copyTo2Sample() {
// 以下のコードは、最初の5列の値だけを6列目にコピーします。
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange("A:E").copyTo(sheet.getRange("F1"), spreadsheetApp.CopyPasteType.PASTE_VALUES);
}
名前 | タイプ | 説明 |
---|---|---|
destination | Range | コピー先の範囲。左上のセル位置のみが関係します。 |
copyPasteType | CopyPasteType | 範囲の内容を宛先に貼り付ける方法を指定する型。 |
transposed | Boolean | 範囲を転置方向に貼り付けるかどうか。 |
Enum CopyPasteType
可能性のある特別な貼り付け種類の列挙。
プロパティ | タイプ | 説明 |
---|---|---|
PASTE_NORMAL | Enum | 値、数式、書式、および結合を貼り付けます。 |
PASTE_NO_BORDERS | Enum | 値、数式、書式、および結合を貼り付けますが、枠線は付けません。 |
PASTE_FORMAT | Enum | フォーマットとデータ検証のみを貼り付けます。 |
PASTE_FORMULA | Enum | 数式のみを貼り付けます。 |
PASTE_DATA_VALIDATION | Enum | データ検証のみを貼り付けます。 |
PASTE_VALUES | Enum | フォーマット、数式、または結合せずに値のみを貼り付けます。 |
PASTE_CONDITIONAL_FORMATTING | Enum | カラールールのみを貼り付けます。 |
PASTE_COLUMN_WIDTHS | Enum | 列幅だけを貼り付けます。 |
参照:Google Apps Script | REFERENCE | SpreadSheet | Enum CopyPasteType
Paste Sample Code
通常貼り付け
function copyToPasteNomalSample() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
// 例:現在選択セルをコピーし、固定A1セルに貼り付け
sheet.getActiveRange()
.copyTo(sheet.getRange('A1'),
SpreadsheetApp.CopyPasteType.PASTE_NORMAL,
false
);
}
値のみ貼り付け
function copyToPasteValuesSample() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
var curRow = sheet.getActiveRange().getRow(); // 現在行
var curCol = sheet.getActiveRange().getColumn(); // 現在列
// 例:現在選択セルをコピーし、一つ下のセルに値のみ貼り付け
sheet.getActiveRange()
.copyTo(sheet.getRange(curRow+1, curCol),
SpreadsheetApp.CopyPasteType.PASTE_VALUES,
false
);
}
書式のみ貼り付け
function copyToPasteFormatSample() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
var curRow = sheet.getActiveRange().getRow(); // 現在行
var curCol = sheet.getActiveRange().getColumn(); // 現在列
// 例:現在選択セルをコピーし、一つ右のセルに書式のみ貼り付け
sheet.getActiveRange()
.copyTo(sheet.getRange(curRow, curCol+1),
SpreadsheetApp.CopyPasteType.PASTE_FORMAT,
false
);
}
枠線を除くすべて貼り付け
function copyToPasteNoBordersSample() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
// 例:現在選択セルをコピーし、一つ下のセルに枠線を除くすべて貼り付け(オフセット使用)
sheet.getActiveRange()
.copyTo(sheet.getActiveRange().offset(1, 0),
SpreadsheetApp.CopyPasteType.PASTE_NO_BORDERS,
false
);
}
列幅のみ貼り付け
function copyToPasteColumnWidthsSample() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
// 例:現在選択セル列をコピーし、一つ右の列に列幅のみ貼り付け(オフセット使用)
sheet.getActiveRange()
.copyTo(sheet.getActiveRange().offset(0, 1),
SpreadsheetApp.CopyPasteType.PASTE_COLUMN_WIDTHS,
false
);
}
数式のみ貼り付け
function copyToPasteFormulaSample() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
// 例:現在選択セルをコピーし、一つ上のセルに数式のみ貼り付け(オフセット使用)
sheet.getActiveRange()
.copyTo(sheet.getActiveRange().offset(-1, 0),
SpreadsheetApp.CopyPasteType.PASTE_FORMULA,
false
);
}
データの入力規則のみ貼り付け
function copyToPasteDataValidationSample() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
// 例:現在選択セルをコピーし、一つ左のセルにデータの入力規則のみ貼り付け(オフセット使用)
sheet.getActiveRange()
.copyTo(sheet.getActiveRange().offset(0, -1),
SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION,
false
);
}
条件付き書式のみ貼り付け
function copyToPasteConditionalFormattingSample() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
var curRow = sheet.getActiveRange().getRow(); // 現在行
var curCol = sheet.getActiveRange().getColumn(); // 現在列
// 例:現在選択セルをコピーし、現在選択セルから一つ下一つ右までの範囲セル(2行2列)に条件付き書式のみ貼り付け
sheet.getActiveRange()
.copyTo(sheet.getRange(curRow, curCol, 2, 2),
SpreadsheetApp.CopyPasteType.PASTE_CONDITIONAL_FORMATTING,
false
);
}
転置して貼り付け
function copyToPasteTransposedSample() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
var curRow = sheet.getActiveRange().getRow(); // 現在行
var curCol = sheet.getActiveRange().getColumn(); // 現在列
var rowCnt = sheet.getActiveRange().getNumRows(); // 選択行数
var colCnt = sheet.getActiveRange().getNumColumns(); // 選択列数
// 例:現在範囲選択セルをコピーし、選択セルから選択列数分右のセル位置に転置して貼り付け
sheet.getActiveRange()
.copyTo(sheet.getRange(curRow, curCol+colCnt),
SpreadsheetApp.CopyPasteType.PASTE_NORMAL,
true
);
}
セル範囲クラス[Range]のオプションコピー
セル範囲の値のみコピーと書式のみのオプションを使ったコピーメソッドです。
オプションコピー[copyTo(先, オプション)]
copyTo(destination, options)
ある範囲のセルから別の範囲のセルにデータをコピーします。デフォルトでは値とフォーマットの両方がコピーされますが、これは高度な引数を使って上書きします。
function copyToContentsOnlyOptionCopy1Sample() {
// 以下のコードは、最初の5列の値だけを6列目にコピーします。
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange("A:E").copyTo(sheet.getRange("F1"), {contentsOnly:true});
}
function copyToContentsOnlyOptionCopy2Sample() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
// 例:A1:B2範囲選択セルをC3(C3:D4)に値のみコピー
sheet.getRange(1, 1, 2, 2).copyTo(sheet.getRange(3, 3), {contentsOnly:true});
}
function copyToFormatOnlyOptionSample() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
// 例:固定A1セルを2行目全列に書式のみコピー
sheet.getRange('A1')
.copyTo(sheet.getRange(2,
1,
1,
sheet.getRange(sheet.getActiveRange().getRow(), sheet.getLastColumn())
.getNextDataCell(SpreadsheetApp.Direction.NEXT
).getColumn()), {formatOnly:true});
}
名前 | タイプ | 説明 |
---|---|---|
destination | Range | コピー先の範囲。左上のセル位置のみが関係します。 |
options | Object | 以下に示すように、高度なパラメータを指定するJavaScriptオブジェクト。 |
名前 | タイプ | 説明 |
---|---|---|
formatOnly | Boolean | フォーマットのみをコピーするように指定します。 |
contentsOnly | Boolean | コンテンツのみをコピーするように指定します。 |
セル範囲クラス[Range]の値コピーと書式コピー
セル範囲の値のみコピーと書式のみコピーメソッドです。
値のみコピー1[copyValuesToRange(シート, 開始列, 終了列, 開始行, 終了行)]
copyValuesToRange(sheet, column, columnEnd, row, rowEnd)
範囲の内容を指定の場所にコピーします。宛先がソースの範囲より大きいか小さい場合、ソースはそれに応じて繰り返されるか切り捨てられます。
function copyValuesToRange1Sample() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var source = ss.getSheets()[0];
var destination = ss.getSheets()[1];
var range = source.getRange("B2:D4");
// これにより、ソースシートのB2:D4のデータが
// 2番目のシートのD4:F6にコピーされます。
range.copyValuesToRange(destination, 4, 6, 4, 6);
}
名前 | タイプ | 説明 |
---|---|---|
sheet | Sheet | ターゲットシート。 |
column | Integer | ターゲット範囲の開始列。 |
columnEnd | Integer | ターゲット範囲の終了列。 |
row | Integer | ターゲット範囲の開始行。 |
rowEnd | Integer | ターゲット範囲の終了行。 |
値のみコピー2[copyValuesToRange(グリッドID, 開始列, 終了列, 開始行, 終了行)]
copyValuesToRange(gridId, column, columnEnd, row, rowEnd)
範囲の内容を指定の場所にコピーします。宛先がソースの範囲より大きいか小さい場合、ソースはそれに応じて繰り返されるか切り捨てられます。
gridIdパラメータの詳細については、getGridId()を参照してください。
function copyValuesToRange2Sample() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var source = ss.getSheets()[0];
var range = source.getRange("B2:D4");
// これにより、ソースシートのB2:D4のデータが
// gridId 0のシートのD4:F6にコピーされます。
range.copyValuesToRange(0, 4, 6, 4, 6);
}
名前 | タイプ | 説明 |
---|---|---|
gridId | Integer | 位置に関係なく、スプレッドシート内のシートの一意のID。 |
column | Integer | ターゲット範囲の開始列。 |
columnEnd | Integer | ターゲット範囲の終了列。 |
row | Integer | ターゲット範囲の開始行。 |
rowEnd | Integer | ターゲット範囲の終了行。 |
書式のみコピー1[copyFormatToRange(シート, 開始列, 終了列, 開始行, 終了行)]
copyFormatToRange(sheet, column, columnEnd, row, rowEnd)
範囲のフォーマットを指定の場所にコピーします。宛先がソースの範囲より大きいか小さい場合、ソースはそれに応じて繰り返されるか切り捨てられます。このメソッドは書式設定のみをコピーすることに注意してください。
function copyFormatToRange1Sample() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var source = ss.getSheets()[0];
var destination = ss.getSheets()[1];
var range = source.getRange("B2:D4");
// これにより、ソースシートのB2:D4の書式設定が
// 2番目のシートのD4:F6にコピーされます。
range.copyFormatToRange(destination, 4, 6, 4, 6);
}
名前 | タイプ | 説明 |
---|---|---|
sheet | Sheet | ターゲットシート。 |
column | Integer | ターゲット範囲の開始列。 |
columnEnd | Integer | ターゲット範囲の終了列。 |
row | Integer | ターゲット範囲の開始行。 |
rowEnd | Integer | ターゲット範囲の終了行。 |
書式のみコピー2[copyFormatToRange(グリッドID, 開始列, 終了列, 開始行, 終了行)]
copyFormatToRange(gridId, column, columnEnd, row, rowEnd)
範囲のフォーマットを指定の場所にコピーします。宛先がソースの範囲より大きいか小さい場合、ソースはそれに応じて繰り返されるか切り捨てられます。このメソッドは書式設定のみをコピーすることに注意してください。
gridIdパラメータの詳細については、getGridId()を参照してください。
function copyFormatToRange2Sample() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var source = ss.getSheets()[0];
var range = source.getRange("B2:D4");
// これにより、ソースシートのB2:D4のフォーマットが、
// gridId 1555299895のシートのD4:F6にコピーされます。
// シートのgridIdは、sheet.getSheetId()またはrange.getGridId()を呼び出して取得できます。
range.copyFormatToRange(1555299895, 4, 6, 4, 6);
}
名前 | タイプ | 説明 |
---|---|---|
gridId | Integer | 位置に関係なく、スプレッドシート内のシートの一意のID。 |
column | Integer | ターゲット範囲の開始列。 |
columnEnd | Integer | ターゲット範囲の終了列。 |
row | Integer | ターゲット範囲の開始行。 |
rowEnd | Integer | ターゲット範囲の終了行。 |
最後に
GASコピー機能のまとめをご紹介させていただきました。
必要に応じて、有益な情報でさらに更新していきたいと思います。
プログラミングスキルを向上させるためには、本を読むだけでは脳にインプットされませんね。
実際に手を動かしてアウトプットしまくるのが一番の近道だと思います。
実際にサンプルソースをコピーして実行した結果がどうなるかを体験してみてください。
自分なりのアレンジを加えたり、なぜエラーになるのかを考え、何度も試行錯誤して問題を解決しまくり、着実に理解しながらスキルを向上させていきましょう。
GASはExcelVBAとはかなり違いますが、ベースとなっているJavaScriptは覚えて損はないプログラミング言語なのでショートカットキーなどと組み合わせてぜひ活用してみてください。
Googleスプレッドシート全ショートカットキー一覧はこちら↓↓↓
ショートカットキー一覧にもGASメソッドを載せています。どの操作からどのメソッドが呼ばれるのかイメージしてください。
コメント