The Road to EXCELER ~エクセラーへの道~
ブログ
  • HOME »
  • ブログ »
  • 月別アーカイブ: 2006年12月

月別アーカイブ: 2006年12月

マクロは難しくない

"使い捨てマクロ"はこれまで見てきたように、自動記録に少しのコードを付け加えて手軽にマクロを作成し、実際のビジネスの場で少しでも効率的に仕事を進めることができるようにしようというものです。これからも事例をご紹介しつつ、その手軽さ,便利さをお伝えしていこうと思います。

思えば私が親にねだってPCを買ってもらったのが中学生のとき。MZ-731というSHARPのマシン↓でした。

4色のドットプリンタとカセットが付いていて、まず付属のカセットテープで言語を読み込ませてから使用する、「クリーンコンピュータ思想」なるものに則ったマイコンでした(当時はPCのことを"マイコン"と呼んでました)。確か「S-BASIC」と「Hu-BASIC」という2種類の言語のテープが付属していて、用途によってどちらかを読み込ませてからしか使えない仕様になっていました。フロッピーディスクなんてものは個人ではとても買えない高価なもので、市販ソフトも含め、ほとんどのローディング,セーブもカセットテープでやっていました。

MZ-700シリーズはグラフィック機能が乏しく、円もきれいに描けなくて、市販のゲームもキャラクターコードを組み合わせて絵を描いていたものでした。その代わり描画速度は速く、今から考えるとよくあんな■とか△とかで表現できたなぁ…と思うほどのいいデキではありましたが。。
当時は「マイコン・ベーシック・マガジン」という本が売れていて、自分も何かおもしろいゲームをプログラミングして投稿したいものだといろんなBASIC本を買って勉強していました。その後、NECのPC-8801mkⅡSRという当時一番人気の機種に買い替えるのですが、高校に入り受験勉強が忙しくなり、大学ではその他もろもろな遊び(?)が忙しくなったため、PCとは相当の期間疎遠になってしまいました。あのときずっとPCをイジっていればかなりの確率で今頃はSEかプログラマーの道を歩んでいたと思います。

…と、どうでもいい話をつらつらと書いてしまいましたが、BASICやFORTRANなんかは基本的な部分であれば中学生レベルでも理解できる簡単な言語ですので、興味のある方は一度そういう本をパラパラと読まれれば、きっとエクセルのマクロ作成にも大変役に立つと思います。マクロをあまり敬遠せず、お気軽に使って面倒な工数仕事はサッサと片付けてしまいましょう!

2006年はいつもこのブログを読んでいただきましてありがとうございました。今後は少し構成を変えていきます。

2007年もどうぞよろしくお願い致します。

合計欄の下に平均値を加える繰返し作業(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)」して試してみてください。

前半.

後半.

Page 1 / 3123

最近の投稿