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

VBA

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

momeq
モー
モー

今回は、VBAでコピーをする方法をやってみます。普段使わないような指定方法がいろいろあるので、憶えておいて損はないですね。

<GoogleAppsScriptでのコピー&ペーストはこちら

この記事が
  • VBAでコピー&ペーストをしたい人
  • ペーストのいろいろな方法を知っておきたい人
  • コピー以外に同じようなことをやりたい人
ニャー
ニャー

単純なコピーでも奥が深いんだにゃ。コピーだけではなく、ループを回して代入することもできるから考え方を憶えて欲しいんだにゃ。

コピーの方法

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

モー
モー

まずは、一番簡単なコピー&ペーストから。1行でかけちゃいます。

Sub sample()
    Dim ws1, ws2 As Worksheet
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")
    ws1.Range("A1").CurrentRegion.copy Destination:=ws2.Cells(1, 1)
End Sub
ニャー
ニャー

引数の「Destination:=」は省略可能だにゃ。シンプルにコピーを実施したい場合はこれに限るにゃ。

ペースト方法の指定をする場合

モー
モー

次に、ペースト方法を指定する場合です。ペーストには、色々あって、普段使っている全てを選択するだけでなく、値、数式、書式などなど色々指定できます。

セル.PasteSpecial(Paste, Operation, SkipBlanks, Transpose)

ニャー
ニャー

指定できる引数は4つ。基本は貼り付けを指定するPasteだけ記載すれば良いのにゃ。もし指定先との演算が必要ならOperationを指定し、そのほか細かな指定が必要なら残り2つも指定すると良いにゃ。

モー
モー

ペーストで指定できるのは、通常の「形式を選択して貼り付け」と同じものです。何ができるのかざっくり憶えておいて、必要に応じで調べなが使うと良いでしょう。指定できる引数の一覧は次のとおりです。

引数行動内容パラメータ
Paste貼り付けすべてxlPasteAll


罫線を除くすべてxlPasteAllExceptBorders


すべての統合されている条件式書式xlPasteAllMergingConditionalFormats


コピー元のテーマを使用してすべて貼り付けxlPasteAllUsingSourceTheme


列幅xlPasteColumnWidths


コメントxlPasteComments


書式xlPasteFormats


数式xlPasteFormulas


数式と数値の書式xlPasteFormulasAndNumberFormats


入力規則xlPasteValidation


xlPasteValues


値と数値の書式xlPasteValuesAndNumberFormats
Operation演算加算xlPasteSpecialOperationAdd


乗算xlPasteSpecialOperationDivide


除算xlPasteSpecialOperationMultiply


減算xlPasteSpecialOperationSubtract


しないxlPasteSpecialOperationNone
SkipBlanks空白のセルを無視するTrue / False
Transpose行/列の入れ替えTrue / False
モー
モー

実際のコードは次のとおりです。

Sub sample()
    Dim ws1, ws2 As Worksheet
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")
    ws1.Range("A1").CurrentRegion.Copy
    ws2.Cells(1, 1).PasteSpecial (xlPasteAll)
    Application.CutCopyMode = False
End Sub
Sub sample()
    Dim ws1, ws2 As Worksheet
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")
    ws1.Range("A1").CurrentRegion.Copy
    ws2.Cells(1, 1).PasteSpecial Paste:=xlPasteFormats
    ws2.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
    
    Application.CutCopyMode = False
End Sub
ニャー
ニャー

もし、値と書式だけコピーしたいと思う場合、同じ場所に形式だけ指定して繰り返せば良いんだにゃ。使い方は無数にあるから、必要な時に必要な分重ねる感じだにゃ

代入という考え方

モー
モー

さて、最後にちょっと変わった考え方です。コピーと言ってもエクセルのコピー機能を使う必要がない場合は、セルからセルへ代入という考え方をしてみるのもありですね。

次の例では、必要部分をForループで回して、代入しています。コピーと同じように、別のシートに値が順次代入されていきます。

Sub sample()
    Dim ws1, ws2 As Worksheet
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")
    For i = 1 To ws1.Cells(Rows.Count, 1).End(xlUp).Row
        For j = 1 To ws1.Cells(1, Columns.Count).End(xlToLeft).Column
            ws2.Cells(i, j) = ws1.Cells(i, j)
        Next
    Next
End Sub
ニャー
ニャー

このやり方だと、値以外は代入されないんだにゃ。でも、わざわざコピーを指定せず、値だけで済む分効率が良い場合もあるんだにゃ。いろいろなやり方を憶えて、引き出しを増やして欲しいところだにゃ。

モー
モー

今回はコピーの方法について見ましたが、最後の代入という考えも持っても面白いと思います。値だけとはいえ、書式を設定し直せば使えますし、場合によっては配列を使うのも面白い場合もあるかもしれませんしね。色々考えてVBAを使いこなしていきましょう!

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

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

TechAcademy [テックアカデミー]

モー
モー

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

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

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

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



記事URLをコピーしました