69本目 ダブルクリックでセル結合を解除

VBA100本ノック

VBA100本ノック 69本目を動画で解説しています。Excelの神髄さんの模範解答はコチラ


問題

#VBA100本ノック69本目
全シートを対象として、結合セルをダブルクリックしたらセル結合を解除して全てのセルに元の値を入れてください。
セル結合を解除した場合はダブルクリックによるセル編集状態にならないようにしてください。
ただし、結合セル以外の場合は通常の動作のままにしてください。

解答

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If Target.MergeCells Then
        Target.MergeCells = False
        Target = Target.Cells(1, 1).Value
        Cancel = True
    End If
End Sub

■考え方・流れ
0:00 冒頭・問題確認
1:50 ダブルクリックイベントの作り方(復習)
4:05 ダブルクリックされたセルが結合セルかどうか判定する
5:39 セル結合を解除して元の値を入れる

新人君
新人君

イベントが使えると
楽しいですよね!

ブチョ
ブチョ

俺もよく行ってたよ!
乃木坂のイベント!

新人君
新人君

そのイベントとちゃう…

ダブルクリックイベントの作り方

さて!じゃあまずは…
イベントの作り方の復習からだ!!

特定のシートに対してイベントを設定したい時は、「シートモジュール」
ブックに対して設定したい時は、「ブックモジュール」に書いていこう!

今回は「全てのシート」って指定があるから…
ブック自体にイベントを設定だ!
つまり、ブックモジュールに書いていくぞ!!!

ブックモジュールの上の、Generalのところを変更してくれ!!

そうすると…自動でOpenイベントが入ればOKだ!

だけど今回はOpenじゃなく、シートがダブルクリックされたときだから…
右上のところから自分で探す必要があるぞ!

Workbook_SheetBeforeDoubleClockイベントを選んだらOKだ!
分からんかったらググったらさすがに出てくるぞ!

ダブルクリックされたセルが結合セルかどうか判定する

よし!そしたらお次!
ダブルクリックされたセルが、結合されているかどうか判定するぞ!

今回は…2つ目の「処理する」方法で解いていこうかな!

これはIFステートメントさんを使って、
引数のTargetの中身を判定すればOK!!

結合かどうかは”MergeCells“プロパティを使って判定!

ま、これはこんな感じで良いだろう!

セル結合を解除して元の値を入れる

よし!最後だ!!
セル結合を解除しつつ、解除後の全てのセルに元の値を入れていくぞ!

まずは解除!!↓

続いて…全てのセルに元の値を入れたいんだけど…
結合されてるってことは…左上だけに値が入ってるってことだったよな!!

つまりまりまり!!
こういうこった! 

だけどこのままだと…
従来の「セルをダブルクリックする」って操作が実行されてしまう!!

そういう場合は…
CancelをTrueにしてあげればOKだ!!

実行結果↓

お疲れさまでした!

ブチョ
ブチョ

お疲れさままままま!

新人君
新人君

お疲れさまでした!

あとがたり

おはこんばんちは。uぷ主です。
69本目、ダブルクリックイベントでセル結合を解除する問題でした…

懐かしい…54本目でも同じようなことをやってたらしい…
もう一ミリも覚えてないww

復習するのも大事やな~って、このブログ作りながらしみじみ思います。

問題解いて、動画まで作ったはずやのに…
全然覚えてないんですよねww
記憶力どないなってんねん…ww

そういや最近、昔の夢をよく見ます。

小学校の頃のあいつ何してんのかな~とか、中学校のころのあいつは~とかw

なんやろう…年を感じる…ww

まだまだ若い気でいたんですけどねw
記憶力もやし…感じることもやし…

老いって怖いですわ…

コメント

タイトルとURLをコピーしました