ExcelVBAにおいて、非表示にしている列のみを選択できないようにしたいのですが、
どうすればよいのでしょうか? (Excel2007,Excel2010)
よく非表示列(セル)をコピーしないように、手動で「可視セル」指定することはできますが、
そうではなく、シートの保護や非表示設定をVBA内でプログラムするように、
シートの選択の可不可も、プログラム内で行いたいのですが。
シートの保護で行うと、全ての列(セル)が選択不可になってしまい、困ります。
具体的には、VBA以下のことをします。
1.特定列を非表示にする。(この時、選択不可にしたい)
2.1の列を表示にする。(この時、選択可能にしたい)
よろしくお願いします。 m(_ _)m
No.2ベストアンサー
- 回答日時:
> シートの保護で行うと、全ての列(セル)が選択不可になってしまい、困ります。
ご希望としては、『手動で「可視セル」指定』と同じ動作を
VBAで実行したい、ということでよろしいでしょうか。
上記の理解でよろしければ、以下の方法で可能です。
(なお、ワークシート全体を選択したときの「オーバーフロー」
エラーの回避策がわからなかったので(汗)、エラー処理で
逃げています。そのため、他の箇所で同一エラーが出た
際に問題とならないよう、ワークシートへの直接記述では
なく、ワークシートから呼び出す関数として作成しました)
1)当該ワークブックに標準モジュールを新規追加
2)下記コードを貼付:
Public Function SelectVisibleCells(Target As Range) As Boolean
'エラー発生時は「エラー処理」の行に飛ばす
On Error GoTo エラー処理
Dim Rsl As Boolean, Rng As Range
Const PrcName As String = "SelectVisibleCells"
'戻り値の初期値
Rsl = True
'選択範囲に不可視セルが確実にない場合はそのまま終了
If Target.Cells.Count <= 1 Then GoTo 終了処理
'手動で「可視セル」を選択するのと同じ動作を実行
Set Rng = Target.SpecialCells(xlCellTypeVisible)
Rng.Select
終了処理:
'戻り値を設定&メモリを明示的に解放して終了
SelectVisibleCells = Rsl
Set Rng = Nothing
Exit Function
エラー処理:
Select Case Err.Number
Case 6 'シート選択時のCount確認による「オーバーフロー」エラーへの対処
Resume Next
Case Else
MsgBox Err.Number & ":" & Err.Description, vbCritical, PrcName
End Select
Rsl = False
Resume 終了処理
End Function
3)当該ワークシートの「SelectionChange」イベントで、
以下のように呼出コードを記述:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
SelectVisibleCells(Target)
'他にコードを記述する場合は、例えば以下のようにします:
'If SelectVisibleCells(Target) = False Then Exit Sub
End Sub
・・・以上です。
No.1
- 回答日時:
手元にエクセルが無いので、想像でになりますが。
列の表示非表示でWorksheet_Changeが実行されるのであれば、下記のような処理
■Worksheet_Change使用案■
概要:非表示列の情報を取得し、セルをロック
(1)Worksheet_Changeで取得するTargetオブジェクトから非表示の列情報(何列目が操作されたか)を取得
(2)列.RockdeプロパティをTrueにする
もし、Worksheet_Changeでイベントを引き起こせなかった場合、下記のような処理
■標準モジュール使用案■
概要:ボタン等を設置し、表示、非表示を行った後、ボタンクリックで非表示列の情報を取得し、セルをロック
(1)ボタン等により標準モジュールに書いた表示非表示処理を呼び出す
※標準モジュールに下記処理を記述
(2)繰り返し処理(For文あたり)で、列.hiddenプロパティがTrueになっている列を取得
(3)対象の列に対して列.RockdeプロパティをTrueにする
このどちらかで、(たぶん)実装できると思います
実装に使えそうな感じがしたサイト↓
VBAの基礎知識
http://excelvba.pc-users.net/
hiddenプロパティの基本的な考え方
http://www.moug.net/tech/exvba/0050108.html
Rockdeプロパティの基本的な考え方
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/06/10 11:06
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 3 2022/06/10 09:24
- Excel(エクセル) excelで可視セルのみ置換 3 2022/08/04 11:02
- Excel(エクセル) エクセルでセルの日付を和暦表示設定にしたらおかしなことに? 3 2022/05/25 11:47
- Excel(エクセル) エクセルでシート保護のかかり方の違いとセルの非保護の設定 3 2022/08/09 10:02
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
vba 2つの条件が一致したら...
-
B列の最終行までA列をオート...
-
【VBA】2つのシートの値を比較...
-
Excelで、あるセルの値に応じて...
-
VBAを使って検索したセルをコピ...
-
rowsとcolsの意味
-
データグリッドビューの一番最...
-
エクセルVBAにて =A1=B1とすれ...
-
URLのリンク切れをマクロを使っ...
-
VBAで、特定の文字より後を削除...
-
マクロ 最終列をコピーして最終...
-
マクロ 関数を使った抽出でエラ...
-
EXCEL VBAマクロについて質問です
-
VBAコンボボックスで選択した値...
-
エクセルVBAでデータをカウント...
-
エクセルVBA シートモジュール...
-
VBAでのリスト不一致抽出について
-
最終列の右へSUM関数を作成する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報