Archive for '実技'
エラーについて
Posted on 5 月 27, 2009, under 実技.
プログラム実行時に何らかの原因があってエラーが発生してしまい、プログラムが途中で止まってしまうということは経験おありでしょうか?そのエラーの原因にはプログラムミスもあるのですが、
「Excelの表に想定していないデータが入っていたとか、ユーザーが予期しない操作をした」
などといった理由などで、エラーが発生してしまたという場合があるのです。完全にエラーを無くすのは正直難しいでしょう。
そこで、「プログラム実行中にエラーが発生してしまった!!」という場合には、どのような処理を実行すればいいのか、そしてあらかじめきちんとプログラミングしておくことで、エラーで止まってしまう事を回避できると思います。
そこでエラー処理のステートメントを自分なりにまとめてみました。
【ステートメント】 【内容】
On Error GoTo 0 上記のエラー処理を解除する
On Error Resume Next エラーを無視して実行
Resume エラーが発生した行へもどる
Resume Next エラーが発生した次の行へもどる
On Error GoTo ラベル(又は行番号) エラーが発生した場合 ラベル(又は行番号) 以下ステートメントを実行する
発生したエラーいろいろに、それぞれのエラーの内容とエラー番号が割り当てられていて、エラーの要因が分かるようになっています。エラー番号はErrオブジェクトのNumberプロパティのことで、エラー内容というのはDescription プロパティで知ることができるのです。
たとえばエラー番号が7だと「メモリー不足」、58だと「すでに同名のファイルが存在している」ということになります。
表にしておいたりするとエラーの際に役立つかも知れませんね!
エクセルマクロの使用例2
エクセルのセルを結合するときに、列だけ結合して行は結合したくない!ってときないですか?
たとえばA1からE10のセルを選択したときに、横のセルならびだけ結合して、列は結合したくない!
そんな機能エクセルにはないんですよね。
普通にA1からE10を結合すると一個のセルになってしまいます。
エクセルでリストとか作ってるときどうしてやりたいですよね。
そこで作っちゃいました。選択したセル内で列だけ結合してくれるマクロ。
ソースはこんな感じです。
———————————————
Dim startCellC As Integer
Dim startCellR As Integer
Dim endCellR As Integer
Dim endCellC As Integer
Dim intCnt As Integer
startCellC = ActiveCell.Column
endCellC = Selection.Columns.Count + Selection.Column - 1
startCellR = ActiveCell.Row
endCellR = Selection.Rows.Count + Selection.Row - 1
For intCnt = startCellR To endCellR
Range(Cells(intCnt, startCellC), Cells(intCnt, endCellC)).Merge
With Range(Cells(intCnt, startCellC), Cells(intCnt, endCellC))
.HorizontalAlignment = xlLeft ‘左ぞろえ
.VerticalAlignment = xlTop ‘文字位置-中央
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = True
End With
Next
——————————————-
動作保障はできませんが、興味があればあなたのマクロに追加してやってください。
マクロのプログラムソースを加工する
マクロのプログラムソースを加工してみましょう。
「Sub Macro1」~「End Sub」までを以下の内容で塗り替えてみてください。
——————————————————
Sub Macro1()
Range(”A1″).Select
ActiveCell.FormulaR1C1 = Date
Range(”A1″).Select
End Sub
——————————————————-
保存したら、前回までと同じ要領で「Macro1」を実行してみてください。
どうですか?
A1のセルに必ず今日の日付がセットされ、A1のセルにカーソルが戻ってきませんか?
これはカーソルがどこにあろうと同じ動きをするはずです。
これであなたはひとつのプログラムを作ったことになります。
マクロは複雑なことはできませんが、プログラムソースを自分で書くことでより複雑な動きを実現することができます。
あとは自分が何をやりたいか。
これを明確にすればPCでいろんなことができます。
マクロのプログラムソースを覗いてみる
前回までに保存したエクセルファイルを開いてください。

メニューバーより「ツール」→「マクロ」→「マクロ」をクリックしてください。

「編集」ボタンをクリック。

上記のようなウィンドウが表示されましたか?
右の枠内がプログラムソースになります。
緑色になっているところは「コメント」といってプログラムにはまったく関係ありません。
なので削除しても大丈夫。
ではコメント以外のところから説明していきます。
一行目「Sub Macro1()」最終行「End Sub」
これはマクロ名「Macro1」を実行するときにこの範囲内を実行します。
二行目「ActiveCell.FormulaR1C1 = “08/09/2008″」
これは「アクティブなセル(カーソルがあるセル)に2008/08/09という文字列をセットする」という命令です。
三行目「Range(”A2″).Select」
これは「A2のセル(2行目の一番左のセル)を選択する」という命令です。
マクロを実行してみる
やっとマクロを実行できます。
マクロを保存したエクセルファイルを開いたら、前回のマクロの登録作業がファイルに残っているはずです。
A1のセル(左上隅のセル)に前回ファイルを保存した日付が表示されています。
このままでも問題ありませんが、マクロが実行されたかどうかよりわかりやすくするため、日付を消してセルを空っぽにしてください。

メニューバーより「ツール」→「ツール」→「マクロ」をクリック

マクロ名は前回何も意識しなかった場合は「Macro1」になっているはずです。
「実行」ボタンをクリック。
どうですか??前回記録した作業と同じ結果になりませんでしたか?
A1のセル(左上隅のセル)にはマクロを作成した日付が入っているはずです。
次回はこのマクロのプログラムソースをカスタマイズしてみましょう。
VBAの記録したマクロを実行する(セキュリティの変更)
昨日はマクロを作ったとこまで。では実際にマクロを実行してみましょう。
昨日保存したエクセルファイルを開いてください。

上記のようなメッセージが表示された場合はマクロが実行できないため、セキュリティレベルを変更する必要があります。

メニューバーより「ツール」→「マクロ」→「セキュリティ」をクリックしてください。
すると以下の設定画面が現れます。

セキュリティレベル「中」を選び「OK」ボタンをクリックしてください。
これでマクロを実行することが可能になります。
エクセルファイルをいったんとじ、再度開いてください。今度は以下のメッセージが表示されるはずです。

「マクロを有効にする」をクリック。
これでやっとマクロを実行する環境が整いました。
VBAでマクロを作る
VBAってなんだ?って人。とりあえず試してみましょう。
まずエクセルを開いてください。
私はexcel2002ですが、2000でも2003でも2007でもクリック対象の名称に違いはないのでなんとか同じ名称のボタンをクリックして同じ作業をしてみてください。

メニューバーより「ツール」→「マクロ」→「新しいマクロの記録」をクリック

「OK」ボタンをクリック

<記録する作業の開始>
セルの一行目の一番左のセルをアクティブにする。(カーソルをA1の位置におく)
ショートカットキーでCtrlキーと;キーを同時に押す。(当日の日付が自動ではいります)
エンターキーを押す。
<記録する作業の終了>
記録終了ボタンをクリック
これでマクロがひとつできました。マクロってプログラムなのでプログラム言語をいっさいつかわずに、あなたはひとつのプログラムを作ったことになります。
このままエクセルファイルに名前をつけて保存しておきましょう。
次回はこのプログラムを実際に使ってみましょう。