いつもお世話になります。
WIN7 EXCELL2010です。
B9 : AF154 の範囲のセルに背景色を付けコマンドボタンをクリックすると参照図のように「B5 : AF8」にカウントされます。
例えば C10 青が C5に1とカウントされるようマクロをしています。
幾人かの人で入力することからこの「B5 : AF8」の範囲を間違いない扱いを防ぐために
B5 : AF8
セルの書式 保護 ロック(チェックしたまま) を設定
B9 : AF154
セルの書式 保護 ロック(チェックを外す) を設定
シートの保護 をしてC10 青にしてコマンドボタンをクリックすると
丸の中に×で 400 とでます。
これを解決する方法はありますか。
もしいい方法があればご指導いただけないでしょうか。
よろしくお願いします。
下記のマクロで参考に
Sub 色付きセル()
Dim i As Long, j As Long, k As Long, endRow As Long, endCol As Long
endRow = ActiveSheet.UsedRange.Rows.Count
endCol = Cells(5, Columns.Count).End(xlToLeft).Column
Range("B5:AF8").ClearContents
For j = 2 To endCol
For i = 5 To 8
For k = 9 To 147
If Cells(k, j).Interior.Color = Cells(i, "A").Interior.Color Then
Cells(i, j) = Cells(i, j) + 1
End If
Next k
Next i
Next j
End Sub
No.5ベストアンサー
- 回答日時:
>シートの保護の解除のテキストボックスが出ます。
パスワード付きで保護をかけているということですね。
回答No1の修正は「せず」に、
(1)Alt+F11で「Microsoft Visual Basic」を開く
(2)左上のペインで「VBAProject(開かれているブック名)」内にある「ThisWorkbook」をダブルクリック
(3)右上のペインに以下のコードを張り付け
Private Sub Workbook_Open()
ActiveSheet.Unprotect Password:="設定したパスワード"
ActiveSheet.Protect UserInterfaceOnly:=True, Password:="設定したパスワード"
ActiveWindow.ScrollRow = 1
End Sub
(4)(3)のコードの中で「設定したパスワード」のとこをご自身の設定されたパスへ変更
(5)(1)で開いた「Microsoft Visual Basic」を閉じて、上書き保存
(6)ブックを開き直す
以降、「UserInterfaceOnly:=True」設定でシートがパスワード保護されて開くようになります。
この状態でボタンに登録した「色付きセル」マクロが実行できると思います。
■コード内に記述したパスワードが読み取られることを防ぐ方法
上記説明の(2)でダブルクリックした「ThisWorkbook」を右クリックして「VBAProjectのプロパティ」
「保護」タブ内の「プロジェクトを非表示用にロックする」にチェックを入れて、
パスワードを設定後上書きして開き直すと、コードの閲覧時にパスワードが要求されるようになります。
No.4
- 回答日時:
訂正
=GetColorMatchCount($A5,B$6:B$1000)
は
=GetColorMatchCount($A5,B$9:B$1000)
の間違いでした。
なお「セルの値をDELキーで消すと背景色無しに、セルに1~4の値を入力すると背景色に対応した色が付く」と言う方式にすると、5~8行目の式は
5行目
=COUNTIF(B$9:B$1000,"=1")
6行目
=COUNTIF(B$9:B$1000,"=2")
7行目
=COUNTIF(B$9:B$1000,"=3")
8行目
=COUNTIF(B$9:B$1000,"=4")
と言う式で済んでしまいます。
先ほどの回答の、背景色が付いているセルの数を数えて返す関数は、エクセルの仕様の問題で「値の更新がワンテンポ遅れてしまう」と言う問題が起きますが、COUNTIF関数で「セルの値が指定の値になっている個数を調べる」と言う方式なら、値の更新が遅れる事はありません。
このCOUNTIFを用いた方法だと「DELキーで値を消すか、1~4を入力すれば、瞬時に個数が反映される」ので、コマンドボタンもマクロも不要です。
No.3
- 回答日時:
因みに。
標準モジュールに、以下の関数を作成して、
Function GetColorMatchCount(ByRef MatchRange As Range, ByRef TargetRange As Range) As Variant
Dim count As Integer
count = 0
For Each r In TargetRange
If MatchRange.Item(1).Interior.Color = r.Interior.Color Then
count = count + 1
End If
Next
If count <> 0 Then
GetColorMatchCount = count
Else
GetColorMatchCount = ""
End If
End Function
B5セルに
=GetColorMatchCount($A5,B$6:B$1000)
と言う式を書いて、B6~AF8にコピー、ペーストしてあげると、「色付きセル」マクロを呼ばなくて済むので、コマンドボタンが要らなくなります(セルに色付けした直後にそのセルでDELキーを押せば式の値が反映されます)
B5~AF8セルに条件付書式で、条件1に「1以上なら背景色を付ける」、条件2に「空白なら背景色なしにする」としておくのをお忘れなく。
もうちょっと工夫すると「セルの値をDELキーで消すと背景色無しに、セルに1~4の値を入力すると背景色に対応した色が付く」と言うのも可能になります。
こうすると「書式⇒セル⇒パターン⇒色を選ぶ⇒OKボタン」と言う手間をかけずに済みます。
No.2
- 回答日時:
Sub 色付きセル()
Dim i As Long, j As Long, k As Long, endRow As Long, endCol As Long
ActiveSheet.Unprotect
endRow = ActiveSheet.UsedRange.Rows.Count
endCol = Cells(5, Columns.Count).End(xlToLeft).Column
Range("B5:AF8").ClearContents
For j = 2 To endCol
For i = 5 To 8
For k = 9 To 147
If Cells(k, j).Interior.Color = Cells(i, "A").Interior.Color Then
Cells(i, j) = Cells(i, j) + 1
End If
Next k
Next i
Next j
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
No.1
- 回答日時:
ロックされた箇所の値を削除しようとしてるからでしょう。
Range("B5:AF8").ClearContents
の上に
ActiveSheet.Protect UserInterfaceOnly:=True
を入れてみてください。
この回答への補足
早速の御指導ありがとうございます
次のように
B5 : AF8
セルの書式 保護 ロック(チェックしたまま) を設定
B9 : AF154
セルの書式 保護 ロック(チェックを外す) を設定
しシートの保護をしてセルに色をつけコマンドボタンをクリックすると
シートの保護の解除のテキストボックスが出ます。
シートの保護がされたままでセルに色付けされたのをカウントさせたいのです
再度ご指導いたたけませんか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) Sheet2からオートフィルターで売上日を抽出した件数をカウントし、その件数をSheet1のセルB1 2 2023/01/12 12:24
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
F9キーについて。
-
Excel 小さくなったスクロール...
-
Excel関数について教えてくださ...
-
計算能力
-
Excelセルを跨いで合計を出す方法
-
Excelに詳しい方! B列が「日...
-
エクセルでファイルの最終更新...
-
Excelのピボットグラフの作り方...
-
Excelファイルが開けません
-
Excel 2019 [オプション]の[リボンのユ...
-
【EXCEL】画像の黄色部分の抽出...
-
スプレッドシートの関数につい...
-
エクセルで 自動的に◯や数字を...
-
excel2013 MonthDays 関数が使...
-
シフト表をエクセルで作るとき...
-
EXCELの散布図で日付が1900年に...
-
特定の文字列を含む、住所を抽...
-
Excel分数の表示について
-
エクセルの関数について教えて...
-
マイクロソフトのPADを使ってい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
半角カタカナをヘボン式ローマ...
-
(マクロ)vlookupの元データを同...
-
エクセルで上位バイトのセルと...
-
exselの質問です
-
Excel 大小比較演算子による「...
-
Excel VBについての質問です。
-
エクセルの問題です。絶対値の...
-
非表示列の再表示に失敗
-
職場の人から聞かれており、こ...
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
ユーザー定義関数をアドイン登...
-
【マクロ】for next構文について
-
エクセルの日付を編集する
-
【マクロ】VLOOKUPにて参照元に...
-
exselで最小数で並び替える関数
-
libre 表計算ソフトの計算がう...
-
エクセルで表
-
エクセルの表で1年間の曜日を...
-
西暦和暦
おすすめ情報