すぐに役立つエクセルVBAマクロ集 - すぐマク
すぐに役立つ Excel VBA マクロ集 Excel VBA Macro
Macro
Google
 
Home |  What's New! |  Gallery |  Introduction |  Service |  Profile

500連発・組み方講座フォロー

Big Color Pallet

[広告]
 
Excel VBA Macro
Excel DownLoad
© 1997 - 2007
Yoshioh Nagai.
All RightsReserved.
HappyTech & Co., Ltd.
www.happy500z.com
Sample Macro  コピー [基本型] Previous Next
コピー
[基本型]
1)  すべてコピー、切り取りする
2)  形式を選んで貼り付ける
2-3)値だけを残して数式を削除する
3)  指定したセル範囲の値を等しくする
4)  空白セルを無視して値を貼り付け
5)  行列を入れ替えて値と書式を貼り付け
5-2)指定した行へ貼り付ける
6)  リンク貼り付け
7)  コピーモードを解除
8)  クリップボードの内容を確認する


1) すべてコピー、切り取りする もくじへ 使用可能なExcelのバージョン
'=========================================================================================
Sub コピーして貼り付ける()                      'Pasteメソッド
    Worksheets("SSS").Activate                  'ワークシートをアクティブにする ※1
    Range("A1:C3").Copy                         'コピーする ※2
    Range("A4").Select                          '貼り付け先のセル範囲を選択する ※3
    ActiveSheet.Paste                           '現在の選択範囲に貼り付ける
End Sub
'-----------------------------------------------------------------------------------------
Sub コピーして別のシートに貼り付ける()          'Pasteメソッド
    Worksheets("SSS").Activate                  'ワークシートをアクティブにする ※1
    Range("A1:C3").Copy                         'コピーする ※2
    ActiveSheet.Paste Destination:=Worksheets("SS2").Range("A4") '貼り付ける ※3、4
End Sub
'-----------------------------------------------------------------------------------------
Sub 使われたセル範囲をコピーして別のシートに貼り付ける() 'Pasteメソッド
    Worksheets("SSS").UsedRange.Copy            '※1
    ActiveSheet.Paste Destination:=Worksheets("SS2").Range("A1") '貼り付ける ※3、4
End Sub
'-----------------------------------------------------------------------------------------
Sub クリップボードを経由せずにコピー貼り付けする_同一ブック()
    Worksheets("SSS").Range("A1:C3").Copy _
    Destination:=Worksheets("SS2").Range("A4") '※1、2、3、4、5
End Sub
'-----------------------------------------------------------------------------------------
Sub クリップボードを経由せずにコピー貼り付けする_異なるブック()
    Workbooks("BBB.xls").Worksheets("SSS").Range("A1:C3").Copy _
    Workbooks("BB2.xls").Worksheets("SS2").Range("A4") '※1、2、3、4
End Sub
'-----------------------------------------------------------------------------------------
Sub 切り取ってクリップボードに保存する()
    Worksheets("SSS").Range("A1:C3").Cut        '※1、2
End Sub
'-----------------------------------------------------------------------------------------
Sub シートを新しいブックにコピーする()
    Worksheets("SSS").Copy                      '※1
    ブック名 = ActiveWorkbook.Name              '新しいブック名(必要なら)
End Sub
'=========================================================================================
<コメント>
※1 SSS、SS2にはシート名を、BBB、BB2にはブック名を記入
※2 A1:C3にはコピーする範囲を記入
※3 A4には貼り付けるセルの左上を記入
※4 Copyメソッドの前部にはコピー元を、後部には貼り付け先を記入
※5 セル範囲を変数で指定するサンプルは こちら

1-2) すべてコピーする (Excel95文法) もくじへ 使用可能なExcelのバージョン
'=========================================================================================
Sub コピーしてすべて貼り付ける()
    Sheets("SSS").Select                        'シートを選択する ※1
    Range("A1:C3").Copy                         'コピー ※2
    Range("A4").PasteSpecial Paste:=xlAll       'すべて貼り付け ※3
End Sub
'=========================================================================================
<コメント>
※1 SSS、SS2にはシート名を記入
※2 A1:C3にはコピーする範囲を記入
※3 A4には貼り付けるセルの左上を記入


2) 形式を選んで貼り付ける もくじへ 使用可能なExcelのバージョン
'=========================================================================================
Sub 形式を選んで貼り付ける_97later()            'PasteSpecialメソッド
    Worksheets("SSS").Activate                  'ワークシートをアクティブにする ※1
    Range("A1:C3").Copy                         'コピーする ※2
    Range("A4").PasteSpecial Paste:=xlPasteValues '値を貼り付け ※3
End Sub
'=========================================================================================
<コメント>
※1 SSSにはワークシート名を記入
※2 A1:C3にはコピーする範囲を記入
※3 引数 Pasteの:= の後ろには、 いずれかの定数を記入 (省略すると xlPasteAll)


2-2) 形式を選んで貼り付ける (Excel95文法) もくじへ 使用可能なExcelのバージョン
'=========================================================================================
Sub 形式を選んで貼り付けるいろいろな方法()
    Range("A4").PasteSpecial Paste:=xlValues    '値を貼り付け ※1
    Range("A4").PasteSpecial Paste:=xlFormulas  '数式を貼り付け ※1
    Range("A4").PasteSpecial Paste:=xlFormats   '書式だけ貼り付け ※1
    Range("A4").PasteSpecial Paste:=xlNotes     'メモ貼り付け ※1
    Range("A4").PasteSpecial Paste:=xlAllExceptBorders '罫線を除くすべて貼り付け ※1
End Sub
'=========================================================================================
<コメント>
※1 A4には貼り付けるセルの左上を記入、※1はマッチする方法を1つ選んで使用


2-3) 値だけを残して数式を削除する もくじへ 使用可能なExcelのバージョン
'=========================================================================================
Sub 数式セルで演算結果の値だけを残して数式を削除する()
    セル範囲 = "C1:C1"                          '※1
    Range(セル範囲).Value = Range(セル範囲).Value '※2
End Sub
'=========================================================================================
<コメント>
※1 例えば A1セルに1、B1に2、C1に数式 =A1+B1 が入力されているとすると
※2 C1セルには値の 3 が残る(数式は削除される)


3) 指定したセル範囲の値を等しくする もくじへ 使用可能なExcelのバージョン
'=========================================================================================
Sub 指定したセル範囲の値を等しくする_同一シート()
Dim cpy As Range                                'コピー範囲セット用
Dim pst As Range                                '貼り付け範囲 〃
'
    Worksheets("SSS").Activate                  '※2 シートをアクティブにする
        左 = 1                                  '※3 左上セルの列
        上 = 1                                  '※3   〃  行
        右 = 3                                  '※3 右下セルの列
        下 = 1                                  '※3   〃  行
        Set cpy = Range(Cells(上, 左), Cells(下, 右)) 'コピー範囲をセット
        Set pst = Range(Cells(上, 左 + 3), Cells(下, 右 + 3)) '※4 貼り付け範囲セット
        pst.Clear                               '※5 クリアしておく
        pst.Value = cpy.Value               '貼り付け範囲の値をコピー範囲の値と等しくする
End Sub
'-----------------------------------------------------------------------------------------
Sub 指定したセル範囲の値を等しくする_異なるシート()
Dim cpy As Range                                'コピー範囲セット用
Dim pst As Range                                '貼り付け範囲 〃
'
    Worksheets("SSS").Activate                  '※6 シートをアクティブにする
        左 = 1                                  '※3 左上セルの列
        上 = 1                                  '※3   〃  行
        右 = 3                                  '※3 右下セルの列
        下 = 1                                  '※3   〃  行
        Set cpy = Worksheets("SSS").Range(Cells(上, 左), Cells(下, 右))
                                                '※6 コピー範囲をセット
    Worksheets("SS2").Activate                  '※7 シートをアクティブにする
        Set pst = Worksheets("SS2").Range(Cells(上, 左 + 3), Cells(下, 右 + 3))
                                                '※4、7 貼り付け範囲セット
        pst.ClearContents                       '※5 値をクリアしておく
        pst.Value = cpy.Value               '貼り付け範囲の値をコピー範囲の値と等しくする
End Sub
'=========================================================================================
<コメント>
※2 SSSにはシート名を記入
※3 1、1、3、1にはセルの行、列番号を記入
※4 +3は列番号の修正で必要なら記入
※5 このコードは動作確認用につき不可欠ではない
※6 SSSにはコピーするシート名を記入
※7 SS2には貼り付けするシート名を記入


4) 空白セルを無視して値を貼り付ける もくじへ 使用可能なExcelのバージョン
'=========================================================================================
Sub 空白セルを無視して値を貼り付ける()
    Range("A4").PasteSpecial Paste:=xlValues, SkipBlanks:=True '※1
End Sub
'=========================================================================================
<コメント>
※1 A4には貼り付けるセルの左上を記入
サンプルブックのダウンロードは ここをクリック (YNxv209_copy_mushi.xls 36KB)
※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。


5-1) 行列を入れ替えて値と書式を貼り付け もくじへ 使用可能なExcelのバージョン
'=========================================================================================
Sub 行列を入れ替えて値を貼り付ける()
    Range("A4").PasteSpecial Paste:=xlValues, Transpose:=True '※1
End Sub
'-----------------------------------------------------------------------------------------
Sub 行列を入れ替えて書式を貼り付ける()
    Range("A4").PasteSpecial Paste:=xlFormats, Transpose:=True '※1
End Sub
'=========================================================================================
<コメント>
※1 A4には貼り付けるセルの左上を記入
サンプルブックのダウンロードは ここをクリック (YNxv209_copy_irekae.xls 38KB)
※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。


5-2) 指定した行へ貼り付ける もくじへ 使用可能なExcelのバージョン
'=========================================================================================
Sub 指定した行へ貼り付ける()
    Worksheets("月間").Activate                 '貼り付けるシートをアクティブにする
    行 = Worksheets("入力").Cells(2, 1)         'A2セルの値を変数「行」に取り出す
    行 = 行 + 1                                 '「行」に 1を加える ※1
    Worksheets("入力").Range("B2:C2").Copy      '入力シートのB2:C2セルをコピーする
    Worksheets("月間").Range(Cells(行, 2), Cells(行, 2)).Select '月間シートのB列の「行」で
'                                                                指定された行を選択する
        Selection.PasteSpecial Paste:=xlValues  '値を貼り付ける
End Sub
'=========================================================================================
<コメント>
※1 見出しが1行目にあるため
※2 このマクロは入力シートの A2セルの値により、月間シートの対応する日付の行に貼り付ける
入力シート→入力シート  月間シート→月間シート

6) リンク貼り付けする もくじへ 使用可能なExcelのバージョン
'=========================================================================================
Sub リンク貼り付けする()
    Range("A4").Select                          '※1
    ActiveSheet.Paste Link:=True
End Sub
'=========================================================================================
<コメント>
※1 A4には貼り付けるセルの左上を記入
サンプルブックのダウンロードは ここをクリック (YNxv209_copy_link.xls 35KB)
※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。


7) コピーモードを解除する もくじへ 使用可能なExcelのバージョン
'-----------------------------------------------------------------------------------------
Sub コピーモードを解除する()
    Sheets("SSS").Select                        '※1
        Application.CutCopyMode = False
End Sub
'-----------------------------------------------------------------------------------------
<コメント>
※1 SSSにはシート名を記入


8) クリップボードの内容を確認する もくじへ 使用可能なExcelのバージョン
'=========================================================================================
Sub クリップボードの内容がテキストならセルに貼り付ける()
    クリップ配列 = Application.ClipboardFormats '※1
    For Each クリップデータ In クリップ配列      '取得した配列の各要素に対して繰り返す
        If クリップデータ = xlClipboardFormatText Then  '※2 テキストなら
            Range("A1").PasteSpecial Operation:=xlPasteAll '貼り付ける
        End If
    Next
End Sub
'-----------------------------------------------------------------------------------------
Sub クリップボードが空か調べる()
    クリップ配列 = Application.ClipboardFormats
    If クリップ配列(1) = -1 Then
        MsgBox "クリップボードは空です。"
    End If
End Sub
'=========================================================================================
<コメント>
※1 ClipboardFormatsプロパティは、クリップボードにあるオブジェクトで使用できる形式を
   配列に取得する
※2 ClipboardFormatsプロパティの定数にはこの他に xlClipboardFormatBitmap : ビットマップ、
   xlClipboardFormatRTF : 書式付きテキストなど33ある。くわしくは こちら