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("貼り付け先範囲の左上角セル")