VBA100本ノック 76本目を動画で解説しています。Excelの神髄さんの模範解答はコチラ
なんかこのサムネの日本語おかしい…??
日本語弱いんで…すんませんww
問題
#VBA100本ノック76本目
フォームコントロールのボタンに登録するSubを作成。
ボタン表示文字を判定し下記パターン位置へ移動します。
・シート名!セル番地 → シートのセルへ
・シート名 → シートへ
・名前定義 → ブック範囲の名前定義へ
※名前定義よりシート名を優先
移動先なしはメッセージ表示

解答
Sub 呼び出されたボタンのテキストを取得して移動()
Dim B_text As String
B_text = ActiveSheet.Buttons(Application.Caller).Text
On Error Resume Next
If B_text Like "*!*" Then
Application.Goto Range(B_text) 'もしこれがエラーならErr.numは1004になってる
If Err.Number = 0 Then Exit Sub
End If
On Error Resume Next 'Err.numが0に戻る
Application.Goto Range(B_text & "!A1") 'もしこれがエラーならErr.numは1004になってる
If Err.Number = 0 Then Exit Sub
Err.Clear
On Error Resume Next 'Err.numが0に戻る
Application.Goto Range(B_text) 'もしこれがエラーならErr.numは1004になってる
If Err.Number = 0 Then Exit Sub
MsgBox "移動先なし"
End Sub
■考え方・流れ
0:00 冒頭・問題確認
2:20 指定のセルまで移動させる
4:15 押されたボタンのテキストを取得する
6:05 押されたボタンのセル範囲へ移動
8:17 押されたボタンのシート、名前に移動

押されたボタンの
情報を取得する問題ですね!

そんなもんなんだって
いいだろうが!

…
指定のセルまで移動させる
さて!じゃあまずは…
指定のセルまで移動させる方法を紹介するぞ!!
そんなもん有無を言わずSelectメソッド!!と言いたいところなんだが…
それだと、別シートだった時にちょっとめんどくさい…

そんな時は!!このAppication.Gotoメソッドさんを使ってくれ!!
別シートでも一括で移動できるし、スクロールも調整できるぞ!!

押されたボタンのテキストを取得する
よし!そしたらお次!
お次は、そのマクロを呼び出したボタンに、なんて文字が書いてあるかをを取得しちゃうぞ!!
結論、「Application.Callerプロパティ」というものを使えばOK!

使い方はこんな感じだ!!
ちょっとムズイねw

実行結果↓
同じマクロを登録したはずなのに…テキストによって結果が変わってるね!

押されたボタンのセル範囲へ移動
お次!!
セル範囲へ…Application.Gotoで移動すりゃOK!!と言いたいところなんだけど…
もし、テキストがテキトーな文字が入ってた場合、移動できないから…
その場合の分岐も考えよう!!

ちなみに今回の問題、優先順位があるから…
まず、ビックリマーク(!)が入ってる場合(※シートを参照する場合)の分岐から書きます。

エラーが発生した場合も考慮↓

ほんで、もし、このコードがちゃんと実行された場合(移動できた場合)は、
Subプロシージャを終わらせよう!!
そうじゃないと、これ以降、名前定義に移動するコードなどが実行されちゃうからね!(優先順位がぐっちゃぐちゃになる)

押されたボタンのシート、名前に移動
最後!!シートの場合と同じように、
セルや名前定義に移動するコードを追加していくんだけど…
ここで!!一旦、Err.Numberを元に戻してあげる必要があるね!!

エラーが起きてる場合(次に進んでる場合)はExit Subされずに、Err.Numberが0以外になってるから…
「Err.Clear」もしくは「On Error Resume Next」を入れてあげて、一旦Err.Numberを
リセットしてあげる必要があるね!

実行結果↓
※移動先がなかった場合

終わりです!!お疲れさまでした!

いっぱいOn Error Resume Nextが
並んでたのはそういう李裕だったのね!

そうゆうことっす!
あとがたり
おはこんばんちは。uぷ主です。
76本目、ボタンの表示名の位置へ移動する問題でした!!
ボタンの表示名へ移動するなんて発想なかった…
なんか面白いことに使えそう…!!
だけど具体的には思いつかない!!w
なんかあるんだろうな~これが活きるような場面が!!
意図がわからんくてちょっと悔しい!
あと…Application.Callerプロパティはマジで知らなかった…
損してる場面多そうw
もっと勉強しないとな~
ポケモンはほどほどにしないと…
コメント