【マクロVBA】変数を組み合わせて列・行のコピーを行い、貼り付ける!複数行・列にも対応!

行・列操作

エクセルでよく使用するコピー&ペーストですが、マクロVBAでも行うことができます。

コピペまとめ記事は下記リンクをご参照ください。

【マクロVBA㉟】コピー&ペースト全集!セル・指定範囲・行・列のコピーと様々な貼り付け方法 ► 独学エクセル塾 (dokugakuexcel.com)

今回は変数を用いた行・列のコピー方法を紹介します。
変数を使用するとなると少し工夫が必要になってきます。

通常の行・列のコピーについては下記の記事を参考にしてみてください。

【マクロVBA】行・列のコピー!1つ・複数の行・列のコピーをして形式を指定して貼り付ける方法とは ► 独学エクセル塾 (dokugakuexcel.com)

それでは見ていきましょう。




⬛︎こんなことができるようになる!

・変数を使用して行・複数行をコピーすることができる
・変数を使用して列・複数列をコピーすることができる

⬛︎忙しい向けのコピペ用のプログラム

・複数行のコピー

Sub 変数を用いて複数の行数をコピーする()

Dim N1 As Long, N2 As Long
N1 = 3 'コピーしたい開始行数を入力する
N2 = 5 'コピーしたい終わり行数を入力する
Rows(N1 & ":" & N2).Copy

End Sub

・複数列のコピー

Sub 変数を用いて複数の列をコピーする()

Dim N1 As Long, N2 As Long
N1 = 3 'コピーしたい開始行数を入力する
N2 = 10 'コピーしたい終わり行数を入力する
Range(Columns(N1), Columns(N2)).Copy

End Sub

⬛︎構文の説明

・単体の行・列のコピー

行:Rows(行番号).Copy
列:Columns(列番号).Copy または  Columns(“列英字”).Copy

・複数の行・列のコピー

行:Rows(開始行番号:終わり行番号).Copy
列:Range(Columns(開始列番号),Columns(終わり列番号)).Copy

⬛︎変数を使用した行のコピー

・1つの行のコピー

まずは1行のコピーをする方法を紹介します。
簡単なプログラムなので見本から見ていきましょう。

Sub 変数の行数をコピーする()

Dim N As Long
N = 6 'コピーしたい行数を入力する
Rows(N).Copy

End Sub

変数Nに数値を格納して「Rows(N)」のように当てはめています。
これで変数Nに格納した数値の行番号のコピーが可能となります。
見本ではN=6なので6行目がコピーされます。

それでは実行してみましょう。
結果はこのようになります。

6行目がコピーできましたね。

・複数の行をコピー

今度は複数行のコピーを見ていきましょう。
こちらは一工夫必要になります。

まず通常の複数行のコピーの例を見ていきましょう。
Rows(3:5).Cooy

今回の見本は3から5行目のコピーとなります。

では変数を用いた場合はどうなるのでしょうか。
構文はこちらです。

Rows(開始行番号:終わり行番号).Copy

今回は見本で「開始行番号」を「N1」、「終わり行番号」を「N2」とします。

開始行番号:終わり行番号の形にしないといけないのですが、
本来数値の入る行番号に変数の文字列が入力されます。
すると区切りの「:」が検出されなくなるため、「&」と「”」で分ける必要があります。

結果としてこのようになります。

Rows(N1 & “:” & N2).Copy

ちなみに「&」と「”」を省略すると「N1:N2」という文字列で検出されるため、エラーとなります。

では「3行目から5行目」をコピーするプログラムを紹介します。

Sub 変数を用いて複数の行数をコピーする()

Dim N1 As Long, N2 As Long
N1 = 3 'コピーしたい開始行数を入力する
N2 = 5 'コピーしたい終わり行数を入力する
Rows(N1 & ":" & N2).Copy
End Sub

では実際に実行してみましょう。
結果はこのようになります。

狙い通り3から5行目をコピーすることができました。

⬛︎変数を使用した列のコピー

これまでは行のコピーでしたが、今度は列のコピー方法について紹介します。
まず前提条件として、列のはAやCといった「英字」で表されます。

しかし英字は計算できない上に文字列なので、VBAには不向きになります。
なので今回は列番号を元に説明していきます。
列番号の考え方として「A」は「1」、「B」は「2」など英字が進むにつれて数値が増える仕組みになります。

しかし列番号を数えるのは大変ですよね。
そこで簡単に列番号を求める方法を紹介します。

まず、求めたい列を選択します。
ここでは「DA列」を見本にしてみましょう。

この状態で「Ctrl」+「Shift」を押したまま「←」を押します。
すると列番号が表示されます。

これで「DA列」の列番号は「105」番目ということがわかりました。

・1つの列のコピー

まず、1列をコピーする方法についてみていきましょう。
こちらも先にプログラムから見ていきましょう。

Sub 変数の列をコピーする()

Dim N As Long
N = 6 'コピーしたい行数を入力する
Columns(N).Copy

End Sub

列のコピーの部分は「N」に当てはまります。
「Columns(N)」となっており、N=6を読み取っているので6列目をコピーすることになります。
Aから数えると6つ目はF列なのでF列をコピーしているプログラムになりますね。

では実行してみましょう。
結果はこのようになりました。

F列をコピーすることができました。

・複数の列のコピー

ここが今回の山場になります。
変数を用いた複数列のコピーを行ってみましょう。

まず、例として「C列からJ列」をコピーしてみたいと思います。
では通常のプログラムを見てみましょう。

Columns(“C:J“).Copy

簡単ですね。「Columns(“C:J”)」でC列からJ列を指示してコピーしています。
しかし今回は変数を使用します。
さらに冒頭で説明した通り、汎用性を考えて列番号で指示してみましょう。

では構文を紹介します。

Range(Columns(開始列番号),Columns(終わり列番号)).Copy

こちらの開始列番号と終わり列番号に変数を組み込むだけです。
今回は見本で「開始列番号」を「N1」、「終わり列番号」を「N2」とします。
それではプログラムを見ていきましょう。

Sub 変数を用いて複数の列をコピーする()

Dim N1 As Long, N2 As Long
N1 = 3 'コピーしたい開始行数を入力する
N2 = 10 'コピーしたい終わり行数を入力する
Range(Columns(N1), Columns(N2)).Copy

End Sub

C列はAから数えて「3」番目なので開始列番号には「3」
J列はAから数えて「10」番目なので終わり列番号には「10」が入ります。

では実行してみましょう。
結果はこのようになりました。

狙い通りC列からJ列までコピー出来ていますね。

⬛︎貼り付けの形式とプログラム

これまではコピーの方法についてまとめました。
そのコピーした行・列を貼り付けるのですが、値のみや書式など
様々な貼り付け方法が存在します。

そこで各貼り付け方法を見ていきましょう。

貼り付けの表を参照してください。

貼り付け位置.PasteSpecial Paste:=貼り付け内容,Operation:=演算内容,SkipBlanks:=True Or False,Transpose:=True Or False)
※PasteSpecial以降は省略可

 

各貼り付けのオプションを下の表にまとめました。

内容No形式詳細
PastexlpasteAllすべて
xlpasteFormulas数式
xlPasteValues
xlpasteFormats書式
xlpasteCommentsコメント
xlPasteValidation入力規則
xlPasteAllUsingSourceThemeコピー元のテーマを使用してすべて貼り付け
xlPasteAllExceptBorders罫線を除くすべて
xlpasteColumnWidths列幅
xlpasteFormulasAndNumberFormats数式と数値の書式
xlPasteValuesAndNumberFormats値と数値の書式
xlPasteAllMergingConditionalFormatsすべて結合されている条件付き書式
OperationxlPasteSpecialOperationNoneしない
xlPasteSpecialOperationAdd加算
xlPasteSpecialOperationSubtract減算
xlPasteSpecialOperationMultiply乗算
xlPasteSpecialOperationDivide除算
SkipBlanksTrue空白セルを無視する
False空白セルをしない
TransposeTrue行列を入れ替える
False行列を入れ替えない

では例を見てみましょう。

数値のみ貼り付けするときは…
貼り付け位置.PasteSpecial Paste:=xlPasteValues

コメントの貼り付けと行列を入れ替えるときは…
貼り付け位置.PasteSpecial Paste:=xlpasteComments, Transpose:=True

それぞれの貼り付け方法の意味は通常の貼り付けの記事でまとめてますので、下記リンクにてご覧ください。

貼り付けの記事についてはこちらから☟

【様々な貼り付け】値の貼り付け・行と列を入れ替えて貼り付ける方法などのオプション一覧 ► 独学エクセル塾 (dokugakuexcel.com)

⬛︎公式の説明

わかりやすいように説明したため公式と使用する語句が異なりますが マイクロソフト公式の説明については下記のリンクを参照してください。☟

Copy メソッド (Visual Basic for Applications) | Microsoft Docs

⬛︎まとめ

いかがだったでしょうか。
変数を用いて、行・列を選択するのには少し工夫が必要ですね。

しかし慣れてしまえば簡単に行・列単位でコピーできます。
さらに今回紹介した数値での行・列の選択は計算とも組み合わせることが
可能なので是非活用してみてください。

それでは次回の記事でお会いしましょう。

コメント