- ベストアンサー
コンパイルエラー「プロシージャが大きすぎます」とのエラーが出ます
セルに入力する値によって、重複した場合にセルの色が変化するようにVBAで記述しましたが、設定した行数が多すぎて、コンパイルエラー「プロシージャが大きすぎます」とのエラーが出ます。小さく記述するにはどの様に書いたらよいでしょうか?ご指導お願いいたします。 記述したVBAは下記とおりです。約35行ほどでエラーです。 Private Sub Worksheet_Change(ByVal Target As Range) Set myRng = Range("B2") '2行目の設定 For Each c In myRng If c.Value = "" Then c.Interior.ColorIndex = 2 'B2が空白ならばセルの色を白色 ElseIf c.Value = Range("I2") Then c.Interior.ColorIndex = 3 'B2=I2ならばセルの色を赤色 ElseIf c.Value = Range("J2") Then c.Interior.ColorIndex = 6 'B2=J2ならばセルの色を黄色 ElseIf c.Value = Range("K2") Then c.Interior.ColorIndex = 6 'B2=K2ならばセルの色を黄色 ElseIf c.Value = Range("L2") Then c.Interior.ColorIndex = 8 'B2=L2ならばセルの色を青色 ElseIf c.Value = Range("M2") Then c.Interior.ColorIndex = 8 'B2=M2ならばセルの色を青色 Else c.Interior.ColorIndex = xINone End If Next c Set myRng = Range("C2") '2行目の設定 For Each c In myRng If c.Value = "" Then c.Interior.ColorIndex = 2 'C2が空白ならばセルの色を白色 ElseIf c.Value = Range("I2") Then c.Interior.ColorIndex = 6 'C2=I2ならばセルの色を黄色 ElseIf c.Value = Range("J2") Then c.Interior.ColorIndex = 6 'C2=J2ならばセルの色を黄色 ElseIf c.Value = Range("K2") Then c.Interior.ColorIndex = 6 'C2=K2ならばセルの色を黄色 ElseIf c.Value = Range("L2") Then c.Interior.ColorIndex = 8 'C2=L2ならばセルの色を青色 ElseIf c.Value = Range("M2") Then c.Interior.ColorIndex = 8 'C2=M2ならばセルの色を青色 Else c.Interior.ColorIndex = xINone End If Next c Set myRng = Range("D2") '2行目の設定 For Each c In myRng If c.Value = "" Then c.Interior.ColorIndex = 2 'D2が空白ならばセルの色を白色 ElseIf c.Value = Range("I2") Then c.Interior.ColorIndex = 6 'D2=I2ならばセルの色を黄色 ElseIf c.Value = Range("J2") Then c.Interior.ColorIndex = 6 'D2=J2ならばセルの色を黄色 ElseIf c.Value = Range("K2") Then c.Interior.ColorIndex = 6 'D2=K2ならばセルの色を黄色 ElseIf c.Value = Range("L2") Then c.Interior.ColorIndex = 8 'D2=L2ならばセルの色を青色 ElseIf c.Value = Range("M2") Then c.Interior.ColorIndex = 8 'D2=M2ならばセルの色を青色 Else c.Interior.ColorIndex = xINone End If Next c ・ ・ End Sub
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (9)
- Wendy02
- ベストアンサー率57% (3570/6232)
- n-jun
- ベストアンサー率33% (959/2873)
- n-jun
- ベストアンサー率33% (959/2873)
- n-jun
- ベストアンサー率33% (959/2873)
- Wendy02
- ベストアンサー率57% (3570/6232)
- n-jun
- ベストアンサー率33% (959/2873)
- xls88
- ベストアンサー率56% (669/1189)
- singlecat
- ベストアンサー率33% (139/418)
- n-jun
- ベストアンサー率33% (959/2873)
関連するQ&A
- 値によってセル塗りつぶし
初心者です。 データの中から、セルC5からC88の中で数値が300以上はセルを赤に塗りつぶし、250以上300未満は青、200以上250未満は黄色、などとやりたいのですが、if...then...elseステートメントを組んでやってみると「型が一致しません。」となってしまいます。 Sub 選択範囲処理() Range("c5:c88").Select If Range("c5:C88") >= 300 Then Interior.ColorIndex = 3 ElseIf Range("c5:c88") <= 300 And Range("c5:C88") >= 250 Then Interior.ColorIndex = 5 ElseIf Range("c5:c88") <= 250 And Range("c5:c88") >= 200 Then Interior.ColorIndex = 6 ElseIf Range("c5:c88") <= 200 And Range("c5:c88") >= 150 Then Interior.ColorIndex = 20 Else Interior.ColorIndex = 10 End If End Sub ご教示頂けると大変助かります。 よろしくお願い致します。
- ベストアンサー
- Visual Basic
- エクセル VBA セルの色をSheet1とSheet2の両方を変えたいのですが・・・
最近困っているところが表題の通りなのですが Sheet1のB2を右クリックするとB2のセルの色を変えて Sheet2のB2のセルも色を変えたいというものです。 現状で Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim Rng As Range, myRng As Range Dim RngA As Range, myRngA As Range Set Rng = Range("B3:W3,b7:w8,b12:w12,d13:w13,d17:w18,d22:w23") Set myRng = Intersect(Target, Rng) If myRng.Interior.ColorIndex = xlColorIndexNone Then myRng.Interior.ColorIndex = 37 Else If myRng.Interior.ColorIndex = 37 Then myRng.Interior.ColorIndex = 45 Else myRng.Interior.ColorIndex = xlColorIndexNone End If End If Cancel = True End Sub とここまではあるのですが、これをどう改造すればSheet2の同じセルの色もかわるのでしょうか? 宜しくお願いいたします
- ベストアンサー
- オフィス系ソフト
- VBAでの計算後のセルに2重線で囲む
まだPC・VBA不慣れな為、実行できないので、教えてください。 c16セルに休日を入力すると無理つぶしは成功しましたが、c16セルに祭日を入力すると赤の2重線で囲みたいのですが、できませんので、方法をお願いします。 もう1点がCELLS・RANGEを使った2種類の方法をお願いします。 よろしくお願いします。 Sub 練習44() Dim kyuyo As Currency If Range("c16").Value = "祭日" Then Worksheets("練習1If~Then").Cells(16, 3).xlDouble.ColorIndex = 3 ElseIf Range("c16").Value = "休日" Then Worksheets("練習1If~Then").Cells(16, 3).Interior.ColorIndex = 5 Else Worksheets("練習1If~Then").Cells(16, 3).Interior.ColorIndex = 10 End If End Sub
- ベストアンサー
- Visual Basic
- マクロの簡素化
下記マクロです。 Range("AE6:AE1005").Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone If Range("AD6").Value > 5 Then Range("AE6") = "*" Range("AE6").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD7").Value > 5 Then Range("AE7") = "*" Range("AE7").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD8").Value > 5 Then Range("AE8") = "*" Range("AE8").Select With Selection.Interior .ColorIndex = 3 End With Else End If 中略(セルを一個づつ指定しています) If Range("AD1004").Value > 5 Then Range("AE1004") = "*" Range("AE1004").Select With Selection.Interior .ColorIndex = 3 End With End If If Range("AD1005").Value > 5 Then Range("AE1005") = "*" Range("AE1005").Select With Selection.Interior .ColorIndex = 3 End With Else End If Range("AE3").Select 有るセルを参照しその値が5以上だったら別のセルに*マークとセルに色を付けるマクロですが、一個づつセル指定をしていますが、何とか短く出来ないでしょうか? お分かりになる方宜しくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- 【VBA】クリックする毎にセル色が変わる
Excelのセルをクリックするたびに、「色なし→赤→青→黄→黒→色なし」などのように色を順番に変更する方法があれば教えてください。 下記のSelectionChangeコードで、「色なし→黄→色なし」にできるのですが、複数の色を順番に表示させたいと思っております。 お手数お掛けいたしますが、よろしくお願い致します。 ================================================= Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim 各セル As Range Set Target = Intersect(Target, Range("A1:A5")) If Target Is Nothing Then Exit Sub For Each 各セル In Target With 各セル If .Value = 1 Then .ClearContents .Interior.Pattern = xlPatternNone Else .Value = 1 .Font.ColorIndex = 6 .Interior.ColorIndex = 6 End If End With Next End Sub =================================================
- ベストアンサー
- Excel(エクセル)
- worksheetchangeイベント
Private Sub Worksheet_Change(ByVal Target As Range) Dim myRng As Range Set myRng = Application.Intersect(Target, Range("A1:D2,A4:D6")) If myRng Is Nothing Then Exit Sub If WorksheetFunction.CountA(myRng) = 0 Then myRng.Value = "-" ElseIf Intersect(Target, Range("A1")).Value = "139.8" Then Range("B1:D1").Value = "-" End If End Sub A1:D2範囲とA4:D6範囲内で、アクティブセルでDELETEキーを押した場合、"-"がセルに挿入されるようにコードを書きました。 さらに、A1セルの値がドロップダウンリストで139.8に変更された場合、B1、C1、D1に"-"を入力するようにしました。 A1セルの値を変更した場合の処理がうまくいかず四苦八苦しています。 ElseIf Intersect(Target, Range("A1")).Value = "139.8" Then ここを、 Range("A1").value = "139.8" Then にしてしまうとA1の値が139.8の状態ではB1、C1、D1へ数値を入力しても"-"となってしまいます。 A1からD1まで連動したリストがリアルタイムで動作するようにコードを書きたいのですが・・・なんとか教えていただけませんでしょうか・・
- ベストアンサー
- オフィス系ソフト
- 【ExcelVBA】セルに入力された値によって書式を変更する
こんにちは。いつもお世話になっております。 標題の件で質問させて下さい。 セルに入力された値によって塗りつぶす色を変えるマクロを作成しています。 条件付き書式では、条件を3つしか指定できなかったので、マクロにて制御しようと思いました。 値の判定を行い、入力した各文字列の色で塗りつぶされるところは正常に動作しているのですが、 値が入っていてもいなくても、複数のセルを選択し、「Delete」キーを押下すると、背景色がグレーになってしまうのです。 初歩的な質問で申し訳ありませんが、どなたか上記のような動作をする理由をご教授頂けないでしょうか。 以下にソースを載せておきます。 宜しくお願い致します。 --- Private Sub Worksheet_Change(ByVal target As Range) On Error Resume Next If (target.Cells.Value = "グレー") Then target.Cells.Interior.ColorIndex = 15 ElseIf (target.Cells.Value = "イエロー") Then target.Cells.Interior.ColorIndex = 6 ElseIf (target.Cells.Value = "スカイブルー") Then target.Cells.Interior.ColorIndex = 33 ElseIf (target.Cells.Value = "ピンク") Then target.Cells.Interior.ColorIndex = 7 Else target.Cells.Interior.ColorIndex = 0 End If End Sub
- ベストアンサー
- その他(プログラミング・開発)
- マクロのコーディング
すいません、下のコード(マクロなんですが)同じ処理を4回も繰り返しているので、(入りきらないので、2回にしました)ひとつにまとめたいです。どうすればいいでしょうか?教えて下さい。 '●業務番号チェック 'エラー時は青 If Range("H39:I39").Select <> "" Then If .Cells(43, 5).Value = "" Then Total_Check_Flg = True '色付の範囲の設定 Range("A43:B43").Select 'セルの色の設定(青) With Selection.Interior .ColorIndex = 41 End With Err_Kazu_4 = Err_Kazu_4 + 1 End If End If If Range("K39:L39").Select <> "" Then If .Cells(44, 5).Value = "" Then Total_Check_Flg = True '色付の範囲の設定 Range("A44:B44").Select 'セルの色の設定(青) With Selection.Interior .ColorIndex = 41 End With Err_Kazu_4 = Err_Kazu_4 + 1 End If
- ベストアンサー
- その他(プログラミング・開発)
- ダブルクリックイベントで良いのかどうか?
お世話になります。 ダブルクリックイベントで、そのセルを赤く色を塗り、尚且つ、 そのセルをダブルクリックした事により、別のワークブックを開き、 また、開いたワークブックのシートの中からある単語を検索して その属性を現在アクティブにしている、ブックのシートに記入しよう としていますが、 まず、下記の様に、ダブルクリックイベントで、セルを赤く塗るまではうまくいったのですが、別のブックを開く事がうまく出来ません。 記述が悪いのか、または標準モジュールに記述するべきなのか分からなく困っています。 どなたかご教授頂きたく宜しくお願い申し上げます。 記 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim Rng As Range, myRng As Range Set Rng = Range("c2:d2,f2") Set myRng = Intersect(Target, Rng) If myRng Is Nothing Then Exit Sub Rng.Interior.ColorIndex = xlColorIndexNone myRng.Interior.ColorIndex = 3 Cancel = True If Intersect(Target, Range("c2")) Then Workbooks.Open Filename:="C:\Documents and Settings\Owner\デスクトップ\台帳.xls" End If End Sub
- ベストアンサー
- Visual Basic
- エクセル VBAで
変動する数値が、セル A1に入る状況で、 該当シートに Private Sub Worksheet_Change(ByVal Target As Range) If Range("A1").Value = 1 Then Range("C62").Value = "○" ElseIf Range("A1").Value = 2 Then Range("C62:C63").Value = "○" ElseIf Range("A1").Value = 3 Then Range("C62:C64").Value = "○" ElseIf Range("A1").Value = 4 Then Range("C62:C65").Value = "○" ElseIf Range("A1").Value = 5 Then Range("C62:C66").Value = "○" ElseIf Range("A1").Value = 6 Then Range("C62:C67").Value = "○" ElseIf Range("A1").Value = 7 Then Range("C62:C68").Value = "○" ElseIf Range("A1").Value = 8 Then Range("C62:C69").Value = "○" ElseIf Range("A1").Value = 9 Then Range("C62:C70").Value = "○" ElseIf Range("A1").Value = 10 Then Range("C62:C71").Value = "○" ElseIf Range("A1").Value = 11 Then Range("C62:C72").Value = "○" ElseIf Range("A1").Value = 12 Then Range("C62:C73").Value = "○" ElseIf Range("A1").Value = 13 Then Range("C62:C74").Value = "○" ElseIf Range("A1").Value = 14 Then Range("C62:C75").Value = "○" ElseIf Range("A1").Value = 15 Then Range("C62:C76").Value = "○" End If End Sub と言ったマクロを記述しましたが、 動作がどうにも重くて困っています。 一度、プレビューをした後は特に遅くなります。 何か良い解決方法はありますでしょうか?
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございます。 思い通りのVBAです。早速使わせていただきます。