【VBA】Excelで必要なセルを選択する方法
2014/10/18
久しぶりに、Excelマクロをチョコチョコとイジってたのですが、今更ながら便利なメソッド見つけたので、まとめとく。
やりたかったのは、散乱して入力されているセルの情報を取得して、他のシートに別の形式で貼り付ける。
今回は、別シートに「コメント」として表示させることが目的。
情報が入力されているセルを探すにに、手動じゃ辛くね?
「Ctrl」+「クリック」で、目視してひたすら選択・・・
そして、間違った個所クリックしてやり直し・・・
なんて、悲しい経験ありませんか?w
じゃ、マクロで・・・と、全部のセルを舐めてセルの属性調べて対象セルのアドレスを取得・・・
おおお。そんな事やってたら、スペック高いPCでも処理追いつかんわw
一瞬で選択出来ないの?と調べた結果とサンプルです。
(Google先生、ありがとう!)
○特性セルの選択メソッド
Selection.SpecialCells([定数]).Select
上記メソッドでセルを舐め回さなくても、一発で選択してくれる。
選択してくれる種類(定数)は、以下のとおり。
○定数の種類
・表示形式が設定されているセル
xlCellTypeAllFormatConditions
・条件の設定が含まれているセル
xlCellTypeAllValidation
・空の文字列
xlCellTypeBlanks
・コメントが含まれているセル
xlCellTypeComments
・定数が含まれているセル
xlCellTypeConstants
・数式が含まれているセル
xlCellTypeFormulas
・使われたセル範囲内の最後のセル
xlCellTypeLastCell
・同じ表示形式が設定されているセル
xlCellTypeSameFormatConditions
・同じ条件の設定が含まれているセル
xlCellTypeSameValidation
・すべての可視セル
xlCellTypeVisible
上記で「Ctrl」+「クリック」した感じに、対象セルを選択状態にしてくれる。
あとは、選択されたセルの情報を1つずつ処理していけば良い。
以下は、選択したセルを、他ブックの同一セルのコメントとして表示する例。
'値が設定されているセルだけを選択 Selection.SpecialCells(xlCellTypeConstants).Select '選択されたセル単位に処理 For Each cel In Selection '処理を描く '選択されているセルの情報を変数に取得 val = Range(cel.Address).Value '他のブックの同一セルのコメントに値を突っ込む Windows(fileName).Activate Worksheets(sheetName).Range(cel.Address).AddComment val 'コメント常に表示に設定 Worksheets(sheetName).Range(cel.Address).comment.Visible = True '見栄え悪いからコメントサイズを入力文字で自動調整 Worksheets(sheetName).Range(cel.Address).comment.Shape.TextFrame.AutoSize = True Next |
ちなみに、突っ込む先のセルに、すでにコメントが設定されてる場合は落ちますw
あくまでも、上記はサンプルってことでw
もし、Exception的な処理を入れたいのなら、以下の通り。
if文で分岐 if Worksheets(sheetName).Range(cel.Address).comment Nothing Then 'コメントが設定されてない場合のみ処理 MsgBox "コメントは設定されてないよ!" End If '---------------- ※コメント挿入部分の前後にエラートラップ設定 On Error GoTo COMMENT_ERROR Worksheets(sheetName).Range(cel.Address).AddComment val On Error GoTo 0 '---------------- '※メソッド最終行に以下のエラートラップに引っかかった場合の処理を記載 COMMENT_ERROR: 'コメントがある場合は文字列変更 Range(cnsRANGE).Comment.Text strTEXT ' エラー発生の次行に戻る Resume Next End Sub |
後者は、やらない方がいい。
Basic時代からの「構造化PGではGOTO文ご法度」に触発するので・・・
(追記)
あとから考えたら、GOTO使わず、オブジェクトにぶっこんで、そのオブジェクトの設定内容で分岐させればいいだけでした。
頭回ってないなーw
たまーに、チョコチョコと作るマクロ。
こういうの調べて、チョロチョロツール作る時間は楽しくって仕方がないw