*当ブログではアフェリエイト広告を利用しています。

GAS

【GAS】スプレッドシートでコピー&ペーストの実行の仕方!GASでどこまでできる?

momeq
モー
モー

今回のテーマは、GAS(Google App Script)でのコピー&ペーストをやって見ます。VBAと比較されがちなGASさんですが、どこまでできるのか?見ていきたいと思います。

<VBAでのコピー&ペーストはこちらから>

この記事は・・・

  • GASでコピー&ペーストをしたい人
  • ペーストのいろいろな方法を知っておきたい人
  • コピー以外の方法を知っておきたい人

にお勧めです。

ニャー
ニャー

GASの使い方の初歩となるところだにゃ。是非憶えて欲しいんだにゃ。

コピーのやり方

モー
モー

GASでのコピー&ペーストは、基本的にcopyTo()メソッドを使用してきます。使用方法は至ってシンプルで、コピーをしたいセルに繋げて記載するだけです。でも、引数が色々あって、引数の数でコピー方法が変わります。 

ニャー
ニャー

憶えておきたい方法は、3段階に分かれるんだにゃ。引数の数で変わるけど、引数の数が変わると渡す引数も変わるから、別々のものとして捉えた方が、憶えやすいと思うんだにゃ。

一番シンプルなコピー&ペースト

モー
モー

まずは、引数が1つの一番シンプルなコピー&ペーストです。引数にコピー先を指定するだけ。指定する引数は、貼り付けたい場所の左上のセルをしてします。

オブジェクト.copyTo(コピー先)

オブジェクトを指定したコピー先にコピーする

function myFunction() {
  let sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1")
  let sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート2")
  sheet1.getRange(1, 1, 5, 3).copyTo(sheet2.getRange(1, 1))
}

値orフォーマットを指定

モー
モー

次に、引数を2つ指定する方法。値かフォーマットを貼り付けられるやり方です。

オブジェクト.copyTo(コピー先, オプション)

オブジェクトを指定したコピー先にコピーする

オプションを指定することで、コピーする内容を制限する

{オプション:true}の形で指定

オプションタイプ説明
formatOnlytrue/falseフォーマットのみをコピー
contentsOnlytrue/false値のみをコピー
function myFunction() {
  let sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1")
  let sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート2")
  sheet1.getRange(1, 1, 5, 3).copyTo(sheet2.getRange(1, 1), {contentsOnly:true})
}

様々な形式を指定

モー
モー

最後が引数を3つ指定する方法。第2引数で何をペーストするかを指定できます。値だけ、フォーマットだけの他、数式、入力規則だけなど8つの中から選ぶことができます。そして、第3引数で、行と列を反転させる転置を行うかを指定できますね。

copyTo(コピー先, ペーストタイプ, 転置)

ペーストタイプ => SpreadsheetApp.CopyPasteType.ペーストタイプで指定

転置=>true or false で指定

オブジェクト.copyTo(コピー先, ペーストタイプ, 転置)

オブジェクトを指定したコピー先にコピーする

ペーストタイプでコピー内容を指定し、転置で列と行を反転させるかを選べる

ペーストタイプ => SpreadsheetApp.CopyPasteType.ペーストタイプで指定

転置=>true or false で指定

オプション名タイプ説明
ペーストタイプタイプを指定値、数式、フォーマットなど何をコピーするのかを指定
転置true/false転置させるかどうか。転置とは行、列を逆転させること
ペーストタイプ説明
PASTE_NORMAL値、数式、フォーマット、およびマージの貼り付け。
PASTE_NO_BORDERS値、数式、フォーマット、マージを貼り付け。ボーダーなし。
PASTE_FORMATフォーマットとデータ検証のみを貼り付け。
PASTE_FORMULA数式のみを貼り付け。
PASTE_DATA_VALIDATIONデータの入力規則のみを貼り付け。
PASTE_VALUES値のみを貼り付け。
PASTE_CONDITIONAL_FORMATTING条件式書式のみを貼り付け。
PASTE_COLUMN_WIDTHS列幅のみを貼り付け。
function myFunction() {
  let sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1")
  let sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート2")
  sheet1.getRange(1, 1, 5, 3).copyTo(sheet2.getRange(1, 1), SpreadsheetApp.CopyPasteType.PASTE_FORMULA, true)
  sheet1.getRange(1, 1, 5, 3).copyTo(sheet2.getRange(1, 1), SpreadsheetApp.CopyPasteType.PASTE_FORMAT, true)
}

代入という方法

モー
モー

さて、次は値を入れるだけならば、代入でいいんじゃない?という考えで行うForループによるコピーです。正確には、値を順次、目的のセルに代入している感じです。

function myFunction() {
  let sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1")
  let sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート2")
  let lastLow = sheet1.getLastRow()
  let lastColumn = sheet1.getLastColumn()
  for(let i = 1 ; i <= lastLow ; i++){
    for(let j = 1 ; j <= lastColumn ; j++){
      sheet2.getRange(i, j).setValue(sheet1.getRange(i, j).getValue())
    }
  }
}
ニャー
ニャー

こちらは、値だけしか入れられないため、コピーよりも劣っている感じがするんだにゃ。でもループを利用したり、変数を使うことができるので、より柔軟に入力できるのが強みだにゃ。状況に合わせて、使い分けて欲しいんだにゃ。

エクセルとの違い

モー
モー

ここでエクセルとの違いを軽く触れておきます。エクセルとの違いは次のようになりますね。

  • コピーからペーストまでが一連の流れになるので、より直感的に行える。
  • 逆にいうと、エクセルのようにコピーした値がクリップボードに貼り付けられるわけではない。
  • ペーストの詳細がエクセルより少なく、演算がない。
ニャー
ニャー

これだけみると、複雑な処理はやはりVBAに軍配が上がるかにゃ?でも簡易的な処理であれば、GASの方が直感的で使用しやすい場合もあるんだにゃ。

モー
モー

状況に合わせて使い分けるのが良いということでしょうね。色々憶えて、使い分けられるようになりたいですね。

【VBA】コピー&ペーストするには?ペーストを指定すると幅が広がります。

プログラミングを学ぶならTechAcademy(テックアカデミー)がおすすめ!

TechAcademy [テックアカデミー]

モー
モー

独学で苦戦している人は、一度しっかりと基礎を学ぶと次のステップへ進めますよ。今のおすすめは、TechAcademy(テックアカデミー)ですね。

TechAcademyのおすすめポイント
  • オンラインで選抜された現役エンジニアから学ぶことができる
  • 自宅からWeb制作・プログラミング・アプリ開発など幅広い分野を学べる
  • 学ぶだけではなく、転職の支援、副業に活かせるスキルの習得、副業の仕事紹介まで行っている
ニャー
ニャー

無料体験や相談もあるから、一度試してみてもいいんだにゃ!

\無料体験、無料相談はこちらから/



記事URLをコピーしました