こんばんは若槻です。本日は来月のTOPに使うためのものを
仕上げていました。見直すと「うん;?」となるところがありますが
作り直す気力は無いのでこのままいきます←
さて、本日はおとといくらいに延期になったVBAについて
語ってみようと思います。
※量が多いので数日に分けます
興味ない人もいるかもしれませんが隠しません。
ではスタート~。
====================================================
◎システム名 「演習-学生名簿」
====================================================
今回のシステムはシートに登録された(シート内にずらっと名前やら
学校名やら学年が並んでるだけ)学生たちを使って色々する、というものです。
~現在ある内容~
・グループ分け
・学年別 ←簡単1
・学校別
・性別ごと ←簡単2
・配役配置
・試合
・検索(作成中
分けられたもの見ても面白くないでしょうから中身を
解説してみます。
→ちなみに「解説」とか偉そうなこと言ってますが、
若槻もひよっこなので、あくまで若槻のプログラムです。
何か作りたい方はネットでちゃんとしたVBAサイトを
探した方が身のためです(おい
まずは簡単なところから。
0.基本(諸動作)
○ワークシート
ExcelのVBAでワークシートやらワークブックやらを指定する時は
「 Worksheets("シート名") 」(ブックの時はWorkbooks
とかって書かなくちゃいけません。
でもこれ毎回やってたら面倒だし、万一シート名を変更した時に
いちいち直しに行くのが非常に面倒。
なので、若槻は変数を決めてそこにセットしています。
「 Public WH1 As Worksheet 」
こう書くと「Publicである必要は?」と言われそうですが、
若槻は変数を全て1つの標準モジュールにまとめてるので
これがデフォです←
とにかくWH1という変数をWorksheet型で定義します。
そして別のところで
「 Set WH1 = Worksheets("シート名") 」
とします。これでどのプロシージャ(Sub~End Subに挟まれた作業)でも
WH1でシートを指定できます。
こうしておくとシート名を変えても上の文をひとつ変えるだけで済みます。
あ、ただ一箇所だけに済ませるには上のセット文をひとつの
プロシージャにしておく必要がありますけどね。
これはそれ専用の作るのが良いと思います。
別のプログラムでも使えますし。
こんな感じで(プロシージャ名は自由にどうぞ。日本語もおk)↓
Sub SheetSet()
Set WH1 = Worksheets("シート名")
End Sub
こうしておけばたとえば
Sub AAA ()
SheetSet(←これで呼び出し
WH1.Range("A1").Value = "hhh"
End Sub
てな感じでいけます。ちなみにこうした場合は必ず最初に
SheetSetを呼び出さないと「そんなの知らん」って怒られます。
○描写の停止等々
さてマクロを実行する時にそのまま実行させると画面が高速で
変わっていきます。これは平気な人は放っておいていいと思いますが
正直目に来ますよね。
そんな貴方にお勧めはこちら(通販か
プロシージャの
Sub DontLook()
'画面の移動を見せない
Application.ScreenUpdating = False
'確認メッセージを出さない
Application.DisplayAlerts = False
'マクロの動作が起因するイベント発生を抑制
Application.EnableEvents = False
End Sub
このマクロを入れておくだけで画像のちらつきがなくなります。
ちなみにこの反対はこちら
Sub OKLook()
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub
最後に見えるようにしておきましょう。やらなくても問題ないことの方が
多いですがやっておいた方が心配はないかと。
書き方はこんな感じですかね。
Sub BBB ()
DontLook
(作業)
OKLook
End Sub
これでひとまとまり。
※下手にオープン時の処理の時とかに使うと挙動がおかしくなるので
ご注意ください。
○オープン時とクローズ時に作業
せっかく「オープン時」とか言ったのでそれについても触れてみます。
流れなんて気にしない。
オープン時、というのは、Excelを開いた時のことです。
たとえば「Excelを開いたらこのシートをクリアしたい」とかが
あった時に使います。
書き方はこう。
Sub auto_open()
(作業)
End Sub
で、クローズ時はその逆でExcelを閉じた時のことです。
たとえば「このExcelを自動的に保存したい」など。
書き方はこうなります。
Sub auto_close()
(作業)
End Sub
※注意※
他のプロシージャと違って開閉時のプログラムの名前は必ず
「Auto_Open」と「Auto_Close」にしましょう。
これはこう書くと自動的に開閉時の処理として認識されるからです。
他の書き方もあるかもしれませんが若槻は知らないので
「こう書きましょう」と言いきります。
○保存
一応書いておきましょう。一番楽なのはこうですね。
「 ThisWorkbook.Save 」
ぶっちゃけ名前指定するとブック名変えた時とかコピーの方を
触った時に面倒なんです。
……ふむ。長くなってきたので今日はこの辺りにします。
また後日システム内のお話とツールバーについてを
お話したいと思います。
特にツールバーは文字表示の方法を語りたい!
だってググってもアイコンVerしか出てこないですよ(調べ方が悪いとか言わないw)
なのでここで語りたい頑張って見つけ出したやり方をw!
ではまた後日ノノ
VBA知らない人にはあまりに退屈な記事でしたかねー(´∀`;)
[1回]
PR