質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

5回答

1750閲覧

Excel VBA 数式を利用した条件付き書式

Yoshikun_0945

総合スコア224

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/03/03 06:57

編集2020/03/03 07:41

前提・実現したいこと

Excel VBAにて数式を利用した条件付き書式を記述しています。
演算結果を表示するR列の値が0の場合、当該行の背景色を消去して、1以上の場合は、背景色を表示するという形です。

発生している問題・エラーメッセージ

プロシージャの呼び出しが不正といわれてしまいました。
どこがおかしいのでしょうか?

該当のソースコード

VBA

1Dim fc As FormatCondition 2Dim MRow As Long 3Dim MCol As Integer 4Dim Ws As Worksheet 5Private Sub shiwake1() 6Set Ws = Worksheets(3) 7MRow = Ws.Cells(Rows.Count, 3).End(xlUp).Row '最終行番号を取得する 8MCol = Ws.Cells(2, 2).End(xlToRight).Column '右端列番号を取得する 9For i = 3 To MRow '各行に数式を追加する 10 Ws.Cells(i, 11).Value = "-": Ws.Cells(i, 13).Value = "-": Ws.Cells(i, 15).Value = "-" 11 Ws.Cells(i, MCol - 1).Value = "=" '減算記号と等号を出力する 12 Ws.Cells(i, 12).Value = "0": Ws.Cells(i, 14).Value = "0": Ws.Cells(i, 16).Value = "0" '数値の初期値を出力する 13 Ws.Cells(i, MCol).Value = "=J" & i & "-(L" & i & "+N" & i & "+P" & i & ")" '数式を出力する 14 15 Set fc = Range(Ws.Cells(i, 3), Ws.Cells(i, MCol)).FormatConditions.Add(xlExpression, , "=$R" & "$" & i & " = " & "0") 16 Set fc = Range(Ws.Cells(i, 3), Ws.Cells(i, MCol)).FormatConditions(1) ' 1 つ目の条件付き書式を取得 17 fc.Interior.ColorIndex = xlNone '条件式に一致する場合、『背景色を消去』する 18 For j = 12 To 16 Step 2 '数値の間処理をする 19 Ws.Cells(i, j).NumberFormatLocal = "G/標準" 'セルの表示形式を設定する 20 Next 21 合計(CInt(Ws.Cells(i, 6).Value)) = 合計(CInt(Ws.Cells(i, 6).Value)) + CInt(Ws.Cells(i, 10).Value) 22 Next 23 24End Sub

set fc …という数式を指定する行で止まってしまいます。
デスクトップPCでコードを記述して、ノートPCで処理を実行する方式を採用しており、コードを記述したデスクトップPCでは条件付き書式が設定できたのですが、実行するノートPCにファイルをコピーして実行してみたところ、数式を利用した条件付き書式設定がプロシージャの不正となってしまいました。Excelのバージョン等で利用不可であれば諦めます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

何をやりたいのかよくわからないので、エラーの対処法のみ。

VBA

1 Set fc = Range(Ws.Cells(i, 3), Ws.Cells(i, MCol)).FormatConditions.Add(xlExpression, , "=$R" & "$" & i & " = " & "0") 2 Set fc = Range(Ws.Cells(i, 3), Ws.Cells(i, MCol)).FormatConditions(1) ' 1 つ目の条件付き書式を取得 3

この2行ではRangeの範囲にWsシートのセルを指定しますが、Range自体がアクティブシートを対象にしています。
マクロの置き場所がWorksheet(3)ではない場合、対象のRangeが一致しないためエラーになっていると思われます。
Worksheet(3)を対象に処理してよいのであれば、次のようにWsを指定してください。

VBA

1 Set fc = Ws.Range(Ws.Cells(i, 3), Ws.Cells(i, MCol)).FormatConditions.Add(xlExpression, , "=$R" & "$" & i & " = " & "0") 2 Set fc = Ws.Range(Ws.Cells(i, 3), Ws.Cells(i, MCol)).FormatConditions(1) ' 1 つ目の条件付き書式を取得 3

投稿2020/03/03 08:30

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

諦めることにしました

投稿2020/03/03 08:29

Yoshikun_0945

総合スコア224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2020/03/03 10:28

回答しましたよ? スルーですか?
guest

0

ExcelVBA

1Option Explicit 2 3Sub test() 4 With Worksheets(3).UsedRange 5 With .Columns(.Columns.Count).FormatConditions 6 .Delete 7 .Add Type:=xlExpression, Formula1:="=R3=0" 8 .Item(1).Interior.ColorIndex = xlNone 9 End With 10 End With 11End Sub

なんでそんなコードになっているか前提条件が分かりませんが、特にエラーはなさそうです。
ただ、先に色を付けておいて、0なら色を消すみたいな遠回りなやりかたや(考え方?)、
各セルをループして設定する等、なんだかよくわからないなぁ。。。と、、、、
あと、マクロを実行するたびに設定が際限なく増えるのも問題あり?
毎度毎度クリアしてから設定し直ししてはいかがでしょ?
列が増えたら色を塗りたいのかなぁ。。。

投稿2020/03/03 08:20

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

頭に Sub hogehoge()
最終行に End Sub と記載して下さい。

質問者さんの末尾のEnd Subがend subと小文字に表示されているところが
変に思います。

私も 頭と終わりに 関数の宣言を行い実行しましたが
エラー終了は起こりませんでした

投稿2020/03/03 07:18

nanami12

総合スコア1015

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yoshikun_0945

2020/03/03 07:31

失礼いたしました。コードを確認したら、Subは大文字で記載してありました。 再度実行してみましたが、エラーが直りませんでした。 Excelのバージョン的に使用できないということでしょうか?
nanami12

2020/03/03 07:44

私が変だなと思ったのは、末端の End Sub で 質問者んのコードではend sub となっている部分です EとSが大文字です
nanami12

2020/03/03 07:46

当方、office 365 office 2013 で実施しましたが、エラーは出力されませんでした
nanami12

2020/03/03 07:49

蛇足ですがPOSされているコードの一番最初に 関数の宣言がなく、End Sub だけではいけませんよ 頭に関数宣言しないと、例えばSub hogehoge() を一番頭にかくという意味です
guest

0

サブルーチンが記述されていないからでは?

試しに
Sub hogehoge()

End Sub
の間に目的のコードを書いたら正常終了しましたよ。

投稿2020/03/03 07:05

DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yoshikun_0945

2020/03/03 07:11

Subで囲んでいますが、set fc の行でプロシージャの不正といわれてしまいました。
DreamTheater

2020/03/03 07:25

[ツール]→[参照設定]で以下のライブラリが未チェックということはないですか? Visual Basic For Applications Microsoft Excel 16.0 Object Library
Yoshikun_0945

2020/03/03 07:36

コメントありがとうございます。 参照設定を確認させていただきましたが、チェック入っていました。 別のパソコンで実行できたので、ノートパソコンにファイルを保存して、実行してみたところ、プロシージャの不正と言われてしまいました。 Excelのバージョン等で数式の条件付き書式を利用できないのであれば諦めます。
DreamTheater

2020/03/03 07:48

当方はOffice365のExcelです。 ちなみに、 ・[ツール]→[コンパイル]でも同様のエラーが出ますか? ・上記以外にVBAで記述されたコードはないですか?  →例えば、Rangeという名前の変数を定義している等 ※本日帰宅してしまうのでここまでです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問