いつもお世話になります。
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ランキング
-
エクセルのクイックアクセスツ...
-
エクセルでCtrl+Tでテーブルの...
-
DATE関数で現在の年齢を出した...
-
Excelで表を作ったところに文字...
-
エクセルのクイックアクセスツ...
-
在庫管理表に使うエクセルの関...
-
ユーザー定義関数をアドイン登...
-
職場の人から聞かれており、こ...
-
REGEXREPLACE関数について、
-
エクセルでバーコード作成し使...
-
下記マクロでMsgBox "空白です...
-
Excel関数-文字列で自動作成さ...
-
エクセルで表
-
【マクロ】for next構文について
-
エクセルの関数について教えて...
-
Excelデータをコピペして、ペー...
-
エクセルで特定の範囲内から小...
-
PDFの請求明細をエクセルにしたい
-
Excelで50個のセルに同じ文字を...
-
エクセルで会社の従業員のデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA、別ブックへ転記す...
-
エクセルでの作業計算方法について
-
時間によってファイル名が変わ...
-
【関数】適切な文字数の数字を...
-
Excelについて教えてください
-
エクセル初心者です 関数の入れ...
-
【マクロ】ファイル名の変更に...
-
UNIQUE関数が使えないバージョ...
-
エクセルの計算
-
【関数】先頭だけにある、半角...
-
Excelで、決まった行を繰り返し...
-
Excelでセルの値が同じか...
-
LOOKUP関数を使えばいいのでし...
-
Excel
-
はがきについて。
-
エクセルの条件付き書式につい...
-
エクセルのデーターが2か月前の...
-
エクセル②
-
エクセルで「-0.0」と表示さ...
-
Microsoft1Officeの互換ソフト...
おすすめ情報