
お世話になります。いつも助けていただいています。表題の件につきまして,教えていただければと思います。
Range(Worksheets("sheet1").Cells(1, 2), Worksheets("sheet1").Cells(101, 14)).FormatConditions.Add(Type:=xlExpression, Formula1:="=CELL(""ROW"")=ROW()").Interior.Color = rgbPowderBlue
をVBAから書き込んでいますが,書き込む方法によって挙動がちがうようですので,アドバイスいただければと思います。その都度,条件付き書式設定の「ルールの管理」で確かめてみると,書き込みは行われているようです。
this workbook に
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Worksheets("sheet1").Cells.FormatConditions.Delete
Range(Worksheets("sheet1").Cells(1, 2), Worksheets("受付名簿").Cells(101, 14)).FormatConditions.Add(Type:=xlExpression, Formula1:="=CELL(""ROW"")=ROW()").Interior.Color = rgbPowderBlue
End Sub
のように記載した時だけ思った動作になります。
これを,sub にして,標準モジュールに記載し,
sub きょうちょう()
Worksheets("sheet1").Cells.FormatConditions.Delete
Range(Worksheets("sheet1").Cells(1, 2), Worksheets("受付名簿").Cells(101, 14)).FormatConditions.Add(Type:=xlExpression, Formula1:="=CELL(""ROW"")=ROW()").Interior.Color = rgbPowderBlue
end sub
this workbook から下記のように
Private Sub Workbook_Open()
call きょうちょう
End Sub
呼び出すと,条件付き書式に書き込みはあるようですが,思った動作になりません。
該当のSheet1には,
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.ScreenUpdating = True
End Sub
の記述いづれもしてあります。アドバイスいただけるとたすかります。
No.1ベストアンサー
- 回答日時:
>該当のSheet1には,
>Private Sub Workbook_SheetSelectionChange(ByVal Sh ~
これは、Sheet1のシートモジュールに、Workbook_SheetSelectionChangeイベントプロシジャを記述しているってことですか?
そもそもWorkbook_SheetSelectionChangeイベントプロシジャは、ThisWorkbookモジュールに記述するものなので、シートモジュールに書いても動かないような気がする。
質問の記載ミスでしょうか?
No.2
- 回答日時:
こんばんは
なさりたいことが記述されていないので目的がよくわかりませんけれど、選択セルの行を色付けしたいってことでしょうか?
古い記事だと、CELL関数で第二引数を省略すると
CELL("row")=row()
で、選択セルの行がTRUEになるようなことがかかれていますが、当方の環境ではそうはなりませんね。
最後に計算が発生した際のActiveCellが計算の対象となるようです。
一方で、Changeイベントで再設定しようとしているようですが、その方法を取るのなら
>ScreenUpdating
ではなく、対象範囲に対して、
Range.Calculate
を行えば、ActiveCellに対して再計算してくれるようになり、(多分)ご希望の動作になるのではないかと思います。
(ご希望が何なのかわからないので、推測ですけれど・・)
さらに言うなら、どうせChangeイベントで処理するのなら、条件付き書式などは使わずに、イベント内で対象セルに色付けをすれば済む話ではないでしょうか?
ただし、もともと色付けされているセルがあるような場合には、色付けをキャンセルする際に元の色に戻す必要が出てくるので少々厄介ですが、色付けセルがなければ一番簡単な方法と思います。
既存で色付けセル等が存在する場合には、当該セル範囲の書式を記録しておいて元に戻すという方法も考えられますが、少々面倒です。
当該行にだけ条件付き書式で色付けをするという方法も考えられますが、他に条件付き書式が設定されている場合にはキャンセルする際に設定した条件だけを削除しなければならないので、こちらもやや面倒です。
(ご提示のように、全部キャンセルしても良いのなら、面倒もなく簡単ですが)
作業セルを使っても良ければ、非表示の作業セルを空きセルに用意しておいて、事前に条件付き書式で
Row()=作業セル
を設定しておき、Changeイベントで「作業セルにActiveCellの行番号を記入する」ようにしておけば、条件付き書式をいじる必要がなくなるので簡単になります。
なお、仮に条件付き書式を利用するにしても、ご提示のように
>Private Sub Workbook_Open()
>call きょうちょう
>End Sub
のようなことを行うと、そのシートでは別の条件付き書式を設定してもキャンセルされてしまうことになりますけれど・・・
(実質的に、他の条件付き書式を利用できなくなる)
ちなみに、以下は、他のセルは色付けをキャンセルしても良いと想定した場合の一例です。
(シートのSelectionChangeイベントに設定します。)
(ご提示の条件付き書式は邪魔をするので、削除してください。)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Const Carea = "E1:H10" ' ←色付けの対象セル範囲
Range(Carea).Interior.Color = xlNone
If Not Intersect(ActiveCell, Range(Carea)) Is Nothing Then _
Intersect(ActiveCell.EntireRow, Range(Carea)).Interior.Color = rgbPowderBlue
End Sub
早速のご回答ありがとうございます。
やりたかったのは,何よりも,VBAより条件付き書式を設定することです。
その過程でいろいろやりましたが,大きな勘違いで,おかしな動作をするのは当たり前でした。
worksheet と 記述 すべきところを workbookと記述していまして。
これで大きな疑問が解消です。
条件付き書式設定では,アクティブセルを含む行(列)を強調視することです。アドバイスの通り,条件付き書式を使わないと,アクティブセルの記憶,もとのアクティブセルの色を戻す,等と,処理ば煩雑になるので,条件付き書式をえらんだところです。
お騒がせしましたが,自己解決しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) エクセル VBA実行中のApplication.ScreenUpdatingについて 3 2023/07/13 21:06
- Excel(エクセル) 3つのマクロを連続実行の中で、1つ目のマクロ要件を満たさなかったら、マクロ2・3を実行しない為には 1 2023/10/15 13:42
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 【マクロ】1つのマクロの中に、ブック指定とシート指定が混在しても良いのですか? 2 2024/05/16 07:13
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
このQ&Aを見た人はこんなQ&Aも見ています
-
Excel VBAについて。こんな動作をさせるためにはどう書けばよいでしょうか。
Visual Basic(VBA)
-
VBAのエラー表示の対処法について
Visual Basic(VBA)
-
エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
-
-
4
VBA 2次元配列の出力
Visual Basic(VBA)
-
5
不要項目の行削除方法について
Visual Basic(VBA)
-
6
vbaマクロについて
Visual Basic(VBA)
-
7
VBAの「To」という語句について
Visual Basic(VBA)
-
8
[Excel VBA]特定の条件で文字を削除&残す処理をするファイルを作成したいです
Visual Basic(VBA)
-
9
エクセルVBAのブックを開く方法 例えば [20241001] [20241002] [202410
Visual Basic(VBA)
-
10
【ExcelVBA】dictionaryの重複判断の基準(セル結合だと違う値として認識される)
Visual Basic(VBA)
-
11
【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
-
12
エクセルvbaの対象セルに色をつける 例えば a日付 b種類 c値段 dその他 にんじん 50 ぴー
Visual Basic(VBA)
-
13
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
14
VBA Application.Matchについての質問です
Visual Basic(VBA)
-
15
VBAで特定の文字が入った行をコピーして貼り付けたい
Visual Basic(VBA)
-
16
excelVBAについて。
Excel(エクセル)
-
17
VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
18
VBAでエクセルのテキストデータをクリップボードに格納したい。
Visual Basic(VBA)
-
19
VBA 最終行の取得がうまくいかず上書きされてしまいます。
Visual Basic(VBA)
-
20
VBAでユーザーフォームを指定回数繰り返して入力を行う方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでCOPYを繰り返すと、処理が...
-
【マクロ】並び替えの範囲が、...
-
Vba Array関数について教えてく...
-
Vba 型が一致しません(エラー1...
-
【ExcelVBA】値を変更しながら...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
【ExcelVBA】5万行以上のデー...
-
VBAでセルの書式を変えずに文字...
-
【マクロ】開いているブックの...
-
Vba セルの4辺について罫線が有...
-
vb.net(vs2022)のtextboxのデザ...
-
Excel VBA 選択範囲の罫線色の...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
エクセルの改行について
-
VBAで特定の文字が入った行をコ...
-
WindowsのOutlook を VBA から...
-
Excel 範囲指定スクショについ...
-
【マクロ】シートの変数へ入れ...
-
エクセルのVBAコードと数式につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報
お騒がせいたしました。
大きな勘違いをしていました。
Workbook_SheetSelectionChange は,Worksheet_SheetSelectionChange の間違いでした。
思い込みで,細かい部分に目がいきませんでした。
この変更で,思った動作になりました。