Home > 即効テクニック > Excel VBA > セル操作関連のテクニック > 指定セル範囲をピクチャとしてコピーして別シートに貼り付ける

即効テクニック

セル操作関連のテクニック

指定セル範囲をピクチャとしてコピーして別シートに貼り付ける

( - )
サンプルでは、シート1に今日の「日付・時刻・曜日」を入力して、入力されたセル範囲(A1:B3)をクリップボードにピクチャ(画像)としてコピーし、新規に追加したシートのセル(C5)に貼り付けています。

シート1には、次のように入力されます。
   A     B 
1  日付    1999/8/9   ・・・Date関数で現在の日付
2  時間    14:40:07   ・・・Time関数で現在の時刻
3  曜日    火曜日    ・・・Weekday関数から今日の曜日

シート1のA1:B3までが、ピクチャとして新規シートに貼り付けられますが、「シートの保護」でオブジェクトのみ保護するように設定すれば、ユーザーからの変更が不可能なセルとして利用する事ができます。

●準備● 
新規ブックを用意して標準モジュールを挿入し、サンプルマクロを貼り付けてください。
●サンプル●
Sub Sample() 
    Dim myWeekday As
Integer 

    Worksheets(1).Activate


    '<現在の日付を取得します。>

    Range("A1").Value
= "日付" 
    Range("B1").Value
= Date '←(1) 

    '<現在の時刻を取得します。>

    Range("A2").Value
= "時間" 
    Range("B2").Value
= Time '←(2) 

    '<今日の曜日を取得します。>

    Range("A3").Value
= "曜日" 
    myWeekday = Weekday(Date)
'←(3) 

    '<Weekday関数の戻り値から曜日名を取得します。>

    Select Case myWeekday
'←(4) 
      Case
1 
        Range("B3")
= "日曜日" 
      Case
2 
        Range("B3")
= "月曜日" 
      Case
3 
        Range("B3")
= "火曜日" 
      Case
4 
        Range("B3")
= "水曜日" 
      Case
5 
        Range("B3")
= "木曜日" 
      Case
6 
        Range("B3")
= "金曜日" 
      Case
7 
        Range("B3")
= "土曜日" 
      Case
Else 
        Range("B3")
= "?曜日" 
    End Select 

    '<指定セル範囲をクリップボードへピクチャ
(画像) 
    ' としてコピーします。>

    Columns("A:B").EntireColumn.AutoFit

      ActiveSheet.Range("A1:B3")
_ 
      .CopyPicture
xlScreen, xlBitmap '←(5) 

    '<新規シートを最後のシートの直後に挿入します。>

    Sheets.Add after:=Worksheets(Worksheets.Count)


    '<新規シートに貼り付けします。>

    ActiveSheet.Paste
Destination:= _ 
      ActiveSheet.Range("C5")
'←(6) 

End Sub 
●補足説明● 
(1)Date関数は、現在のシステム日付を返します。
(2)Time関数は、現在のシステム時刻を返します。
(3)Weekday関数は、指定された日付が何曜日であるかを表す整数の値を返します。
(4)Select Caseステートメントは、複数の条件を繰り返し判断するする場合に、
Ifステートメントよりもシンプルに条件分岐ができます。

<構文> 
 Select Case testexpression 
   [Case expressionlist-n 
      [statements-n]] ... 
   [Case Else 
      [elsestatements]] 
 End Select 

testexpression:条件比較する数式または文字列式。

expressionlist-n:比較される値。 

statements-n:testexpressionがexpressionlist-nのいずれかと一致するとき実行するステートメント。

elsestatements:testexpressionがCase節のいずれとも一致しないとき、実行するステートメント。

(5)CopyPictureメソッドは、オブジェクトをクリップボードへピクチャ(画像)としてコピーします。 
<構文> 
expression.CopyPicture(Appearance, Format,Size) 

expression:コピーするオブジェクトへの参照を表すオブジェクト式を指定。

Appearance:ピクチャのコピー形式を指定(省略可)。使用できる定数は、XlPictureAppearanceクラスのxlScreen(画面表示にできる限り近い形でコピー)またはxlPrinter(印刷するときと同じ形でコピー)。既定値はxlScreen。 

Format:ピクチャの形式を指定(省略可)。使用できる定数は、XlCopyPictureFormatクラスのxlPicture(画像マーカー形式)またはxlBitmap(ビットマップ形式)。既定値はxlPicture。

Size:Chart(グラフ) オブジェクトのときだけ指定(省略可)。使用できる定数は、XlPictureAppearanceクラスのxlScreen(画面表示と同じ大きさでコピー)
またはxlPrinter(プリンタ出力時と同じ大きさでコピー)。既定値はxlPrinter 。 

(6)Pasteメソッドは、クリップボードの内容をシートに貼り付けます。

<構文> 
expression.Paste(Destination, Link) 

expression:対象となるWorksheetオブジェクトを表すオブジェクト式を指定。

Destination:クリップボードからのデータを貼り付けるセル範囲(Rangeオブジェクト)を指定。この引数を省略すると、現在の選択範囲に貼り付けられる。この引数を指定すると、引数Linkは使えない。

Link:貼り付けたデータと元のデータの間にリンクを設定するには、Trueを指定。この引数を指定すると、引数Destinationは指定できない。省略可能で既定値はFalse。