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に注意)
MACのPC操作・エクセル操作の ショートカットリスト
HPより抜粋
-
- command + X:切り取り
- command + C:コピー
- command + V:ペースト
- command + Z:直前のコマンドを取り消し
- shift + command + Z:やり直す
- command + A:項目すべて選択
- command + F:書項目を検索
- command + G:次を検索:直前に検索した項目が次に出現する箇所を探
- command + H:最前面の App のウインドウを非表示にします。最前面の App を表示し、その他すべての App を隠すには、「option + command + H」キーを押します。
- command + M:最前面のウインドウを最小化して Dock にしまいます。最前面の App のウインドウをすべて最小化するには、「option + command + M」キーを押します。
- command + O:選択した項目を開きます。または、開くファイルを選択するためのダイアログが開きます。
- command + P:現在の書類をプリントします。
- command + S:現在の書類を保存します。
- command + T:新しいタブを開きます。
- command + W:最前面のウインドウを閉じます。その App のウインドウをすべて閉じるには、「option + command + W」キーを押します。
- option + command + esc:App を強制終了します。
- shift + command + 5:macOS Mojave 以降では、スクリーンショットを撮るか、画面収録を実行します。または、「shift + command + 3」(全面)または「shift + command + 4」(範囲指定)を使ってスクリーンショットを撮ります。
- shift + command + N:Finder で新しいフォルダを作成します。
- command + カンマ (,):最前面の App の環境設定を開きます。
MACのエクセルショートカットはこのサイトが参考になりました。定着するまでは、開いきながら編集してみるのもいいかもです
1本目 「セルのコピー」を学ぶ
出題内容(1本目)
回答する前に準備すること(今回のみ)
ファイル作成
まずは準備として、エクセルを開きます。
エクセル形式で生成されるため、マクロが利用できるブックで作成しなおします。
名前をつけて保存[shift command s] -> マクロ有効ブック(.xlsm)で保存
([]ショートカット操作表記)
このA1:C5の貼り付け先シート作成します。
+をおすとSheet2が追加されます。
A列に値を、B列に数式(today())を、C列の書式を変更しました。
ここまでを記述したファイル:1本目.xlsm - Google ドライブ
書式って具体的にどんなもの?
主に以下の要素があるようです。
- 表示形式(例 例えば日付、通過、文字列、数式など)
- 配置(セル内の横詰め、縦詰めの配置情報など)
- フォント
- 羅線
- 塗りつぶし
- 保護(セルやシートをロックして編集できないようにする時などに使用)
この場合、4の羅線と5の塗りつぶしの情報が今回書式変更した部分です。
開発タブの追加
エクセルシートの上に開発タブを追加します。あとでマクロをシート上で操作する際に、開発タブは必ず使用します。もともと備わっていないため、追加します(今回のみ必要な操作)。
上のリンゴ右のExcel タブー「環境設定」ー「リボンとツールバー」
(Windowsならオプションから)
「開発」にチェックをいれるー「保存」右下
エディターを開きマクロを書いてみる
エクセルを自動化する機能をマクロといいます。そして、そのマクロを記述するためにVBAという言語を用います。そのVBAを用いてマクロを記述するためのエディターを開きます。
エディターは [OPTION(Alt)+F11] と入力すると開きます。
開いたら左側の白いところで右クリックして標準モジュールを作成する。
新しく作成したModule1をクリックし、マクロを記述する。
「’」より右に書いた内容はコメントとなり、プログラムに影響を与えないメモとして使える。
あとあと読み返すときに、管理し易いように、わかりやすいコメントを残しながら開発する必要があります。
1行目のOption Explicit は変数の宣言を強制するもの、これを記述しておくことで宣言しないまま変数を使用するとエラーが出るように設定されます。変数の型はまだまだ初心者の自分には難しいので、とりあえず後に回して、優先順位をつけて勉強します。
sub と書いた後に、任意名(ここではお題1)、ここまで記入したら、Enterを押してください。すると、その後の()からEnd Sub まで自動で入力補完されます。このサブとエンドサブの間にマクロの処理をつらつらと書いていくこととなります。
回答
頭からみていきます。まずコピー元の情報から書いています。
「Sheet1」という名称のコピー元ワークシートがあり、そのSheet2の中の
A1:C5(”:”はここからここまでという意味)の範囲(Range)をコピーします。
.Copy以下は、貼り付け先の情報を書いています。
Sheet2ワークシートのA1を左上の角っことして照準をばしっと併せて貼り付けます。
(A1:C5の範囲を貼り付け先に指定しても結果は同じですが、単一セルで指定するようにします)
この処理ではSelect(セレクト)を使っていないため、マクロを実行すると、もともとのアクティブセルが移動や、コピー元・貼り付け先の範囲選択動作がないため、非常にスムースです!自分はいつもセレクトしてしまっていたので、一本目からわかりませんでした。
書いたマクロをボタンで動かしたい
では、試しに新しくシート上にボタンを作り、今書いた「お題1」マクロを割り当てて使ってみます。
一番右に新しく追加された「開発タブ」をクリックー「ボタン」を選択し、シート上でクリックー以下の画面が開き、先ほど作成したマクロ「お題1」ができているので、お題1をボタンに割り当てます。お題1を洗濯してOK
ボタンが現れるので、テキストを変更します
ではボタンを押して、Sheet2がどうなったかみてみます。
無事に書式まできちんと貼り付けできました!
学べたこと総括
コピペは貼り付け範囲をselectせずとも実行できる
ボタンにマクロを割り当てると操作効率が上がり使い易い。
Worksheets("コピー元").Range("範囲").Copy Worksheets("貼り付け先").Range("貼り付け先範囲の左上角セル")
エクセルマクロの勉強を始める
自己紹介
私は普段は事務業務に従事しています。年齢30台後半、男性で、サラリーマンやっています。仕事は人よりも遅い方なので、「もっと業務を効率よく進められないかな・・」と常々悩んでいました。
そんな時、Excelの処理を自動化する機能マクロというものを知りました。
マクロの認知度は近年だいぶ広まってきているように思いますが、実際にVBAでプログラミングを行っている割合はかなり少ないという実情です。また、近年は小学校義務教育にプログラミングが必修化されるなど、次世代のITスキルに異様な注力がされています。これは背景に現役世代のITスキルの著しい低さが問題視され、それを理由に他国に遅れを取っている現状を示唆します。
マクロの浸透率については以下の記事を参考にさせて頂きました。
https://www.google.co.jp/amp/s/excel-design-dr.com/excel-vba-awareness/%3famp=1
少し前ですが、スマートアンサーの20代30代調査でで約2割位です。VBA書いて実際にバリバリ業務改善している人となると、ここから大分割合が下がるのではないでしょうか?
それだけマクロを開発できるスキル、自分の業務に必要な工程を自分で洗い出し、そしてそれを自動化し、それを保守していくスキル
を持った人材は希少だと感じます。
そしてVBA100本ノックというエクセルマクロの以下の記事にたどり着きました。
とりあえずまだほんっとに右も左もわかりません。極めればかなりの時間削減が見込めそうです。それは間違いない。
ただ、分からないなりに、まずは回答を見ながら基礎知識から詰めて理解をし、どんどん写経していこうと思います。
現在の私のマクロ熟練度ですが、マクロの記録を使って書いたプログラムを少して修正する程度で、ほぼほぼ完全初心者です。最近になってmacのPCを使い始めたばかりで、パソコンの操作自体もまだおぼつきません。
マクロの勉強を始めた意図・狙い
「自分の業務をより効率よく、さらに間違いを少なくこなせるようになること(=自身のスキルアップ)と、それにより自分の時間をより多く確保すること」という2点に尽きます。
そのため、エクセルだけでなく、PC操作も併せてスピードアップする必要があります。
エクセルのスキルに絞らず、IT全般の広い意味として、知識やスキルを身につけていきたいです。そのため、可能な限りPC全般におけるショートカット操作も併せて覚えます。
さっそく一つ覚えました!Excelバージョンをブログに載せるためのスクショ撮影です!ぱしゃり![ shif+com+3 ]
こんな感じでやっていきたいなと思ってます。中には「少し説明がズレてる?」と感じられるところも多いかもしれません。
当方のマクロ開発環境
使用PC MacBookAir
excel ver 16.5
エクセルの導入がまだの方に向けて
もともと、自分のMacにはエクセルが入っていませんでした。で、エクセルのみ追加する永続ライセンスを購入しました。金額は15000円位で、PC2台にインストールできます。正直ちょっと高かったです。。が勉強のためです!
一応officeがエクセルだけ永続ライセンスとoffice全部永続ライセンスのアマゾン価格比較
エクセルだけのにライセンスにすれば価格が半分ほどで抑えられました。
「パワポやアウトルックななんて現状あまり使用しないし、とりあえずはマクロ覚えたいだけなんだけど・・」という自分みたいなタイプの方には、前者をおすすめします。
オンラインコードを購入したら、決済後の画面にオフィスの設定画面へのリンクがあり、
Microsoftアカウントでログイン後、インストールする、という流れで、30分ほどの設定ですぐに簡単にエクセルが使用できるようになりました。