The Road to EXCELER ~エクセラーへの道~
ブログ
  • HOME »
  • ブログ »
  • マクロ関連(使い捨てマクロ)

マクロ関連(使い捨てマクロ)

合計欄の下に平均値を加える繰返し作業(5)

近くの駅でやっていた「光の祭典」の一部です。

この青白いイリュミネーションはいつ見てもキレイですね。。
今日は仕事納めでホッと一息…といった感じです。

゚・*:.。..。.:*・゚゚・*:.。..。.:*・゚ ゚・*:.。..。.:*・゚゚・*:.。..。.:*・゚ ゚・*:.。..。.:*・゚゚・*:.。..。.:*・゚

それでは前回とは別の方法で繰り返しのマクロを組んでみましょう。
「最低知っておくべきコード等」
の紹介をしたときにでてきた「GoTo」というコマンドを使ってみます。これは別の処理コードへ強制的に移動させるときに使用しますので、今回は、
E1セルを選択→"***"印があるか確認→あったら自動記録したマクロを実行
という作業をした後、一つ下へセルを動かしてから最初の処理コードへ強制的に移動させる、というマクロを組みます。

このマクロでは、常に処理コードの最初へ移動させてしまうので延々と続いてしまいます。平均値が全部入ったら[ESC]キーでストップをかけてくださいね。

前回のマクロを変更しながら作成していきます。まず頭の部分は、「For i=1 To 1000」という「For~Next」文を消して、「i=1」とだけしておきます。そうすると次の、「Cells(i,5).select」で ワークシート上ではE1セルを選択します。
それから次の、「If ActiveCell.Value = "***" Then」で、"***"印があるか確認し、あったらそのまま自動記録したマクロを実行した後、一つ下へセルを動かします。
このとき、もし"***"印が無かったら単に一つ下へセルを動かす、というコマンドを「End If」の前に付け足しておきます。
Else i=i+1
「もし"***"印が無かったら、現在の i という変数に、1を加えた数値を代入しなさい」という意味になります。
"***"印があったとしても、自動記録したマクロを実行した後、一つ下へセルを動かすので、自動記録したマクロの一番下にも「i=i+1」をつけ加えておきましょう。
そして最後に、「End Sub」の前に、「GoTo」で 「Cells(i,5).select」へ強制移動させます。
ここで、「Cells(i,5).select」以下の処理コードに名前を付けておかないと、どこに「GoTo」させるか指定できないのでコードの固まりに名前を付けておきます。
ここでは「Paragraph1」という名前にします。「Cells(i,5).select」の直前に「Paragraph1:」と入れてください。
これで名前が付きましたので、先ほどの「GoTo」に移動先を加えて、「GoTo Paragraph1」としてください。
以下のようになればOKです!(長くなるので自動記録部分は少し省略して載せておきます。)

ちなみに、冒頭にも書きましたが、[ESC]キーでストップをかけないと止まりませんのでご注意を。。
使い捨てマクロではこういう不完全な状態のマクロであっても、目的を達成できさえすれば充分OKです。

前半.

後半.

合計欄の下に平均値を加える繰返し作業(4)

クリスマス直前の六本木です。

忘年会帰りにちょっと寄ってみました。
青い光の並木道、キレイですね。思ったより人はあまり歩いてませんでしたが、カップルとかは中に入ってるんでしょうね。寒かったし。。なんか夜景を眺めながら巨大なツリーを楽しめる
そうで。。

皆さんも良いクリスマスを!

о(ж>▽<)y ☆

゚・*:.。..。.:*・゚゚・*:.。..。.:*・゚ ゚・*:.。..。.:*・゚゚・*:.。..。.:*・゚ ゚・*:.。..。.:*・゚゚・*:.。..。.:*・゚

さて、前回の処理を繰り返すマクロを付け足していきます…と、その前に手順を確認しておきましょう!

再掲.

E列のマクロスタート地点に、IF関数で"***"マークをつけましたね。E8セルを選択して、「=if(A8="合計","***","")」と入力し、[編集(E)]→[コピー(C)]で、E1:E1000まで[貼り付け(P)]したやつです。

まず、E1セルから出発し、順番に、E2セル,E3セル…と一つずつ下へセルを動かしていきます。

そして、"***"印を見つけたら前回の手順を実行して平均値を記載、終了したらまた一つ下へセルを動かす、という作業をE1000セルにたどり着くまで繰り返します。

これで全部の組の平均値をサクサクと加えられます。

E列はA,B,C,…と数えて5番目の列なので、E列のセルを選択するには、

Cells(○, 5).Select

とします。○のところには行番号が入りますので、ここに順番に1から1000まで入れば、E1セルから出発し、順番に、E2セル,E3セル…と一つずつセルを選択していくことができそうですね。

そしてその過程で、選択したセルに"***"印を見つけたら前回の手順を実行させればよいので、前回のマクロの直前に IF文で、

If ActiveCell.Value = "***" Then

と記述します。IF文の終わりには、

End If

をつけますので、ご注意を。。

ここまでの作業を1000行目まで繰り返すので、For~Next文で、

For ○ = 1 To 1000

というのを頭につけておき、その終わりに

Next ○

をつけておきましょう。

"○"というのは変数のことですので、ここでは i を使って使い捨てマクロ完成です。

以下のようになればOKです!(長くなるので自動記録部分は少し省略して載せておきます。)

[ツール(T)]→[マクロ(M)]→[マクロ(M)]とし、「Macro1」を「実行(R)」して試してみてください。

前半.

後半.

合計欄の下に平均値を加える繰返し作業(3)

近くにある「Strawberry Cafe」なるカフェです。

テレビも付いてるし、アルコール類もメニューにあってゆっくりできるのですが、閉店時間が18時って早過ぎないかっっ…!?

(  ゚ ▽ ゚ 😉

゚・*:.。..。.:*・゚゚・*:.。..。.:*・゚ ゚・*:.。..。.:*・゚゚・*:.。..。.:*・゚ ゚・*:.。..。.:*・゚゚・*:.。..。.:*・゚

さて、前回の処理に使い捨てマクロを絡めていきたいと思います。

まず最初に、前回の(1)と(2)の手順を実行し、"***"フラグをつけておきます。

常に"***"マークをつけたセルからカウントして○行目、○列目から処理を開始させようとしているので、相対参照を使います。(「合計」や「平均」という文字を探してその位置を基点として処理することもできますが、汎用性を考慮してあえて"***"フ
ラグをつけてやってみます。)

次に、E8セルを選択しておいて、[ツール(T)]→[マクロ(M)]→[新しいマクロを記録(R)]とし、出てきた「マクロの記録」ウィンドウではとりあえずそのまま「OK」。「記録終了」ウィンドウの右側にある「相対参照」ボタンをクリックします。

その後、前回の(3)~(6)の手順を実行します。

ここまでできたら、マクロの自動記録を終了させます。「相対参照」ボタンの左側にある四角形のボタンをクリックしてください。

[ALT]+F11キーでVBE画面に切り替え、マクロシートの画面を確認してみてください。

こんな感じのコード↓が記録されていますでしょうか。

これの意味はわからなくてもあまり影響はありませんが、今まで操作したことが記述されているだけなのでなんとなくわかると思います。例えば、「Offset(0,-3).~」の部分はアクティブセルから0行目、-3列目(左に3列目)に移動する、という意味ですし、チラホラと散見される「Copy」とか「Cut」とか「Paste」という表現は何回か操作した「コピー」,「切り取り」,「貼り付け」の意味です。

もう一度[ALT]+F11キーでエクセル画面に切り替え、動作確認してみましょう。

"***"が付いているセルを選択した後で、[ツール(T)]→[マクロ(M)]→[マクロ(M)]とし、現れた「マクロ」ウィンドウでマクロ名「Macro1」を選択して「実行(R)」。

うまく平均点が入りましたか?次回、いよいよ繰返し処理を手で付け加えていきます。

Page 30 / 35«293031»

最近の投稿