2本目「セルのコピー(書式貼り付け・値貼付)」を学ぶ
では、前回に引き続きノック2本目を学んでいきます
お題 2本目
回答
前回のマクロでは、セルの入力規則やコメントも含めてシート2へ、そっくりそのままコピーされました。 Range().Copy (Destination:=)・・・ (()は省略可)
今回は「書式と数値のみ」を、シート3に貼り付けてみます!
準備
準備として、シート1のA1セルにコメントを追加、
今回の課題で、試しにこのコメントを残さずに貼り付けられるか、実践してみます。
実際に書いてみると・・
お題2の3行目に、PasteSpecial という新しい貼り付け方がでてきました。これを使うと、より柔軟に数値だけ貼り付けたり、数式だけは貼り付けたりと応用が効きます。
シンプルに丸々ぺたっとメモまで貼り付けていいときはお題1の書き方を用い、細かく指定したい時はこちら、といった使い分けで良さそうな感じです。
その後で引数として Paste:=xlPasteFormatsを指定しています。これは表示形式を貼り付けるという意味です。また、次のApplication.CutCopyMode とは、「コピーしたときのドット線で選択されている状態になっているモード」のことです。これを解除する、つまり、真偽でいう偽にしたいので、falseとします。
まずはここまででシート3を追加したのちに実行してみると・・
おお!文字が・・ない!(そりゃそうだ)。表示形式に文字情報はありません。
別で足してあげましょう。
(課題からは少しずれますが、)試しにこの状態に数式で追加してみます。
数式は英語でFormulasなので、引数にはxlPasteFormulas(=エクセルに数式を貼る)を用います。これを実行してみると
ちゃんとA1からコメントメモがないものが、シート3に
きちんと実行されました!
では、これを数値として貼り付けるお題に修正します。
シート1のB列には数式「=today()」が入っています。貼り付け先の表示形式「日付」は既に貼り付けられました。ここにtoday()という数式ではなく、数値つまり「2021/7/13」という記号として貼り付けます。
数式を追加した行の先頭で 「’」(Shift+7)を入力してください。コメントアウトしておきます(いまは使わないけど、あとでまたコピペして使い回したい、という時とかなかなか便利です)。で実行すると
ちゃんとB列に日付の値として貼り付けられました!これにてお題終了!
今回学んだこと総括
ただまるっと貼りたいなら、
Range().Copy (Destination:=)・・・ (()は省略可)
細かく指定したいなら ①コピって②ペーストスペシャルして③引数指定④範囲解除 で一連の流れ
Range().Copy
Range().PasteSpecial Paste:=xlPasteあれこれ
Application.CutCopyMode=False
ペーストスペシャルでよく使いそうな引数
表示形式
Paste:=xlPasteFormats
数式
Paste:=xlPasteFormulas
数値
Paste:=xlPasteValues
(※末尾のsに注意)