No.7ベストアンサー
- 回答日時:
>エラーメッセージは「アプリケーション定義またはオブジェクト定義エラーです」なぜでしょうか。
これは、同一名称の変数が定義されている為に出るエラーです。
#1と#4を見比べてもらうとわかると思うのですが、
Public変数(svRow)は、Sheet1からModule1へ移動しています。
たぶん、まだSheet1に定義が残っていませんか?
それを削除してもらえば、エラー無く動作すると思います。
急な変更で、わかりづらくしてしまって申し訳ないです。
※#4の記述は、#1を上書きしてくださいね。(Sheet1)
Sheet1
'************************************************************
Option Explicit
Public svRow As Integer ← ※この行は、Module1に移動してます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim actCol As Integer
Dim actRow As Integer
・
・
・
たびたび、ありがとうございます。
Public svRow As Integer を Sheet1 から削除してうまく動作しました。
一度ブックを閉じて、再度開いても前回の選択行の塗りつぶしが消えました。書式も変更されることもありません。
★★★完璧です。どうもありがとうございました。
No.6
- 回答日時:
#2のものです。
Okwebでの強制改行を考えて継続行にしたのが仇になったようです。
コピーした後、下記のように修正してください。
私がやったら、上手く動きます。
-----
ツール-マクロ-VBA
ProjectのSheet1をダブルクリック
(General)側をSheet1,(Declaration)側をSelectionChangeを選ぶ
Private Subの外にDim maerowを置く
Private SubからEndSubまでコピー
-----但しOKWEBで改行されるかも知れぬので
If maerow <> "" Then --このままOK
ActiveSheet.Range("a1:m100").Rows --次ぎの行が
右に続く
(maerow).ClearFormats ----上の行の右につけて
1行にする。
End If ----このまま
ActiveSheet.Range("a1:m100").Rows--次ぎの行が右
に続く
(Target.Row).Interior.ColorIndex = 8 --上の行の 右につけて1行にする。
maerow = Target.Row ---このままOK
全体で5行です。(Sub とEnd Subを含め7行。
Private Subも含め8行。
手数ですがよろしく。
何度もありがとうございます。
今度はうまくいきました。スペース_ を改行と気がつかない私の落ち度でした。申し訳ありません。
#1,#3,#4,#5 と何度もご回答いただいた方のご見解を承った後、締め切りたいと思います。
No.5
- 回答日時:
#1と#4の違いです。
#1では、EXCELを使っているのには何の問題もありません。
しかし、一度EXCELを再起動して現在と別な行をクリックすると
保存していた時の行の塗りつぶしが消えないのです。
これを消えるように修正したのが#4です。
>No.4は if ~ Then と End If は要らないのでしょうか。勝手に・・・
有っても無くても、動作上は問題ないですが無駄になるので消しました。
結論
塗りつぶしされたままで、保存しEXCELを再起動した時の処理の違いですので
EXCEL動作中には、何も違いは有りません。
この回答への補足
しつこくてすみません。No.4はうまく動作しません。
エラーメッセージは「アプリケーション定義またはオブジェクト定義エラーです」なぜでしょうか。
No.4
- 回答日時:
まだ、少しばかり甘い所があるので追加&修正します。
選択状態(塗りつぶし済)で、エクセルを終了し起動し直すと初回のみ
塗りつぶしを解除しないので、それも解除するようにしました。
よって、多少コーディングが変更されたので全てコピペし直してください。
Sheet1は、動作的にはほとんど変わりありません。
ThisWorkbookは、起動時に現在選択されているセルの行を保存しています。
Module1は、svRowがPublicで使用できるように定義しています。
まず、「挿入」→「標準モジュール」で標準モジュールを追加。
以下のソースをSheet1,ThisWorkbook,Module1(標準モジュール)にコピペして下さい。
Sheet1
'******************** ここから ********************
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim actCol As Integer
Dim actRow As Integer
actCol = Target.Column
actRow = Target.Row
'With Range(svRow & ":" & svRow).Interior '// 全列
With Range(Cells(svRow, 1), Cells(svRow, 13)).Interior '// 列範囲(A:M)
.ColorIndex = xlNone
End With
'With Range(actRow & ":" & actRow).Interior '// 全列
With Range(Cells(actRow, 1), Cells(actRow, 13)).Interior '// 列範囲(A:M)
.ColorIndex = 36
.Pattern = xlSolid
End With
svRow = actRow
End Sub
'******************** ここまで ********************
ThisWorkbook
'******************** ここから ********************
Private Sub Workbook_Open()
svRow = ActiveCell.Row
End Sub
'******************** ここまで ********************
Module1
'******************** ここから ********************
Option Explicit
Public svRow As Integer
'******************** ここまで ********************
この回答への補足
すみません。質問しておきながら所用で外出してしまいました。
No.3の解説で cvRow は現在選択した行を覚えておくための変数(入れ物)なんですね。少し分かったような気がします。
No.4は if ~ Then と End If は要らないのでしょうか。勝手に付け足して動作を試みましたが、No.1と違いが分かりませんでした。
No.3
- 回答日時:
質問のsvRowですがプログラムの最後に、以下の一行があります。
svRow = actRow
これは、現在選択した行を覚えておく為に現在の行を保存しています。
次回には、前回選択した行を覚えておく必要があるので。
エクセルを起動した直後は、プログラムが一度も動いてないのでsvRow=0となります。
というのは、前回選択した行が無いと言う事なのでここでは、塗りつぶし解除を
しなくてもいいので、svRow>0と言う風にしています。
解説がわかりずらくなったのでまとめます。
svRowは、前回選択されている行の塗りつぶし解除の為の行記憶変数。
svRow>0は、起動直後は塗りつぶし解除処理は必要ない為。
と言う事です。
No.2
- 回答日時:
例えばSheet1のSelectioChangeイベントに
下記を貼りつけてください。maerowと言うPublic
変数を使っています。
ColorIndex値は適当に淡い色を選んでください。
今はライトブルー。Range("a1:m100")は適当に
変えてしてください(2箇所)。
Dim maerow
'-----
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If maerow <> "" Then
ActiveSheet.Range("a1:m100").Rows _(maerow).ClearFormats
End If
ActiveSheet.Range("a1:m100").Rows _(Target.Row).Interior.ColorIndex = 8
maerow = Target.Row
End Sub
この回答への補足
ご回答ありがとうございます。
教えていただいたコードを Sheet1のSelectionChange イベントにコピペしましたがうまく動作しませんでした。構文エラーでした。コピペだけではダメなんでしょうか。もし、注意事項がありましたら教えてください。
No.1
- 回答日時:
>A:M 列の範囲のセルを塗りつぶせないかと
列範囲(A:M)で色をつけています。
※コメント化している部分に変更すれば、全列を色付け対象にします。
(1)Excelの「ツール」→「マクロ」→「Visual Basic Editor」を実行してVBEを起動する。
(2)VBE左上の「プロジェクトエクスプローラ」で「Sheet1」をダブルクリックする。
以下のソースをコピペで貼り付けてください。
'******************** ここから ********************
Option Explicit
Public svRow As Integer
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim actCol As Integer
Dim actRow As Integer
actCol = ActiveCell.Column
actRow = ActiveCell.Row
If svRow > 0 Then
'With Range(svRow & ":" & svRow).Interior '// 全列
With Range(Cells(svRow, 1), Cells(svRow, 13)).Interior '// 列範囲(A:M)
.ColorIndex = xlNone
End With
End If
'With Range(actRow & ":" & actRow).Interior '// 全列
With Range(Cells(actRow, 1), Cells(actRow, 13)).Interior '// 列範囲(A:M)
.ColorIndex = 36
.Pattern = xlSolid
End With
svRow = actRow
End Sub
'******************** ここまで ********************
この回答への補足
早速のご回答感謝いたします。
当方の意図したとおりです。完璧でした。ところで後学のために教えて欲しいのですが、svRow というのは何を指しているのでしょうか。svRow > 0 というのが良く分かりません。お手数をおかけしますがよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Excel(エクセル) エクセルの関数について 5 2023/04/30 17:24
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- その他(Microsoft Office) エクセル 表の移動 2 2023/04/05 20:29
- Excel(エクセル) 条件に合った数値の合計を表示させたい関数と条件指定の方法 3 2023/05/13 16:07
- Visual Basic(VBA) 【VBA】もし、値が0だったら左のセルと合わせて削除したい 3 2023/04/20 10:12
- Excel(エクセル) エクセルで教えて下さい。 2 2022/05/18 13:00
- CGI VBAで条件から範囲を指定して色を塗る方法を知りたいです 1 2022/06/30 16:05
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) エクセルのマクロを2つご指南ください 3 2023/01/02 12:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
エクセルで同じ名前ごとの合計...
-
エクセルで一部除外した数字を...
-
エクセルVBA Unionはなぜ遅い?
-
エクセルで列内の同じIDの商品...
-
エクセルで2列を検索し2列とも...
-
桁数が混在する並び替えの方法
-
EXCEL VBA 指定範囲内で特定の...
-
Excelで自動的に並べ替えなんて...
-
エクセル 2010 マクロ 残セル表...
-
excel関数について質問です。
-
オートフィルについて(急ぎ!)
-
セルの入力制限(半角数字と半...
-
EXCEL 指定した曜日に番号を振...
-
エクセルの関数についての質問...
-
エクセル VLOOKUPが反映されない
-
EXCELである列を上から順にチェ...
-
Excelで1列の数字の内、ある行...
-
エクセルの印刷範囲について
-
エクセルの関数SUBSTITUTEを、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
エクセルで同じ名前ごとの合計...
-
エクセルVBA Unionはなぜ遅い?
-
エクセルの関数SUBSTITUTEを、...
-
桁数が混在する並び替えの方法
-
エクセルで一部除外した数字を...
-
EXCEL VBA 指定範囲内で特定の...
-
エクセルで列内の同じIDの商品...
-
エクセルで2列を検索し2列とも...
-
EXCEL 指定した曜日に番号を振...
-
エクセル マクロで列を連続し...
-
EXCELである列を上から順にチェ...
-
Excelで自動的に並べ替えなんて...
-
エクセルvba 一つ上の行を指定...
-
エクセル VLOOKUPが反映されない
-
エクセルマクロでA欄に値があ...
-
(続き)Excel2013で正しくソート...
-
ExcelVBA:列方向の並び替え O...
-
エクセルのマクロ教えてください。
-
エクセル 並び替え
おすすめ情報