vbaについて詳しくないのですが、ご相談させてください。
条件付き書式をvbaにて設定しようとして、その適用先(適用範囲)がずれてしまっているのですが、現在のマクロの記述のどこが原因なのでしょうか。
Excelにてプライベートの出納帳を作成しており、支払方法(プルダウンリストから選択)によって、同じ行の関連項目のセルをまとめて色付けしようとしています。(条件付き書式は手動でもできますが、勉強と手抜きを兼ねてvbaで設定しようとしています。)
出納帳には各日付ごとに「支払方法」、「品名」、「金額」のセルがあり、
これが1日~31日まで続いています。
(支払方法で「クレカ①」を設定すれば、同じ行にある同じ日付のこれら3列分の項目のテキストが色付けされる。)
R列(18列目)~T列(20列目) ⇒1日
U列(21列目)~W列(23列目) ⇒2日
:
DA列(105列目)~DC列(107列目) ⇒30日
DD列(108列目)~DF列(110列目) ⇒31日
これを同じ日付では一つの条件付き書式を設定したい(=18列目から3列ごとに条件付き書式を設定し、各書式の設定範囲は3列分としたい)のですが、適用先が上手く反映されません。
このマクロの実行後の条件付き書式の設定を確認すると、「適用先」が思うようになっていません。
「ルール」の$R8,$U8,$X8,…は自分が設定したかったルールになっているのですが、
「適用先」はそれぞれ自分が設定したかった=$R$8:$T$49,=$U$8:$W$49,=$X$8:$Z$49,という適用先からずれてしまっています。
コードは以下の通りです。自分なりにwebで調べた中で継ぎ接ぎしたものですが、「適用先」の修正ができれば、自分がやりたいことはできると考えています。
駄文ですが、お詳しい方がいらっしゃいましたら、お力添えいただけないでしょうか。
Sub 条件付き書式_支払方法()
Dim Row_Start As Long
Dim Row_Last As Long
Dim Line_Start As Long
Dim i As Long
Row_Start = 8
Line_Start = 18
For i = 0 To 108 Step 3
Row_Last = Cells(Rows.Count, 8).End(xlUp).Row
If Range(Cells(Row_Start, Line_Start + i), Cells(Row_Last, LineStart + i + 2)).FormatConditions.Count <> 0 Then
Range(Cells(Row_Start, Line_Start + i), Cells(Row_Last, LineStart + i + 2)).FormatConditions.Delete
End If
Dim exp As String
exp = Cells(Row_Start, Line_Start + i).Address(0, 1)
With Range(Cells(Row_Start, Line_Start + i), Cells(Row_Last, LineStart + i + 2)).FormatConditions.Add(Type:=xlExpression, Formula1:="=" & exp & "=""クレカ①""")
.Font.ThemeColor = xlThemeColorAccent5
.StopIfTrue = False
End With
Next
End Sub
No.1ベストアンサー
- 回答日時:
こんばんは
レイアウトが3列ずつでセットになっていて、
その1列目(R列、U列・・)の値が「クレカ①」だったら、その行の3列分に書式を適用したいということと解釈しました。
>という適用先からずれてしまっています
原因はご提示のコードで(多分)変数の記述ミスが数か所あることだと思います。
例えば、
>Range(Cells(Row_Start, Line_Start + i), Cells(Row_Last, LineStart + i + 2))
後半のCellの列数の変数がみな LineStart となっていますが、間違えでは?
なお、ご質問には直接関係ありませんが・・
>For i = 0 To 108 Step 3
ご説明文だと、設定対象はDF列(=120列)まででよいはずですが、上記だと128列目まで設定されます。
(多分、条件がTRUEにはならないので、余分に設定したからと言って問題はないのでしょうけれど)
また、ループの中で
>Row_Last = Cells(Rows.Count, 8).End(xlUp).Row
を繰り返していますが、値は変わらないので、ループ外で一度計算しておけば済みます。
あるいは、各列の最終行を都度求めようとしているのであれば、列が変数になっていないとおかしいです。
上記で、多分修正可能と思いますけれど、少し発想を変えてまとめて処理してしまう例を、ご参考までに記載しておきます。
※ 設定する行の範囲が49で固定なのか可変なのかよくわかりませんけれど、使いそうな行までまとめて設定しても構わなければ固定値で大きめの値にしておけばよさそうに思います。
Sub Sample()
Const f = "=OFFSET(R8,,-MOD(COLUMN(),3))=""クレカ①"""
Const n = 49 ' ←使用想定最大行番号(可変にするなら計算で求める)
With Range("R8:DF8").Resize(n - 7).FormatConditions
.Delete
.Add Type:=xlExpression, Formula1:=f
.Item(1).Font.ThemeColor = xlThemeColorAccent5
.Item(1).StopIfTrue = False
End With
End Sub
ご指摘いただいた箇所の修正で、思うような書式設定にできました。
Sub 修正_条件付き書式_支払方法()
Dim Row_Start As Long
Dim Row_Last As Long
Dim Line_Start As Long
Dim i As Long
Row_Start = 8
Line_Start = 18
Row_Last = Cells(Rows.Count, 8).End(xlUp).Row
For i = 0 To 90 Step 3
If Range(Cells(Row_Start, Line_Start + i), Cells(Row_Last, Line_Start + i + 2)).FormatConditions.Count <> 0 Then
Range(Cells(Row_Start, Line_Start + i), Cells(Row_Last, Line_Start + i + 2)).FormatConditions.Delete
End If
Dim exp As String
exp = Cells(Row_Start, Line_Start + i).Address(0, 1)
With Range(Cells(Row_Start, Line_Start + i), Cells(Row_Last, Line_Start + i + 2)).FormatConditions.Add(Type:=xlExpression, Formula1:="=" & exp & "=""クレカ①""")
.Font.ThemeColor = xlThemeColorAccent5
.StopIfTrue = False
End With
Next
End Sub
ただ、参考例の方が条件付き書式も1個で済みますね。
modを上手く使うんですね。
行数は可変・固定どちらでも構わないのですが、今回は参考例を使おうと思います。
どうもありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 1 2022/04/29 02:36
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
いけず言葉しりとり
はんなりと心にダメージを与える「いけず言葉」でしりとりをしましょう。 「あ」あら〜しゃれた服着てはりますな 遠くからでもわかりましたわ
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
条件付き書式の適用先が変更されるようにしたい
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
-
4
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
5
値を入力後、自動的にアクティブセルが移動するマクロ
Excel(エクセル)
-
6
エクセルでマクロを作成してますが、バックスラッシュが入力出来ません。 設定方法等教えて頂けないでしょ
Excel(エクセル)
-
7
VBA 何かしら文字が入っていたら
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA Application.Matchについて...
-
VBAで特定の文字が入った行をコ...
-
Excel マクロについて詳しい方...
-
VBAのエラー表示の対処法について
-
VBA 別ブックからコピペしたい...
-
[VB.net] ボタン(Flat)のEnable...
-
Excelのマクロについて教えてく...
-
配列のペースト出力結果の書式...
-
【VBA】 結合セルに複数画像と...
-
【VBA】スペースが入っていない...
-
Excelのマクロについて教えてく...
-
VBA 2次元配列の出力
-
WindowsのOutlook を VBA から...
-
VBAでセルの書式を変えずに文字...
-
【VBA】値を変更しながら連続で...
-
VBA ユーザーフォーム ボタンク...
-
Excelのマクロについて教えてく...
-
Visualbasicの現状について教え...
-
エクセルのVBAコードについて教...
-
エクセルvbaの対象セルに色をつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】5万行以上のデー...
-
【ExcelVBA】dictionaryの重複...
-
VBAでセルの書式を変えずに文字...
-
[Excel VBA]特定の条件で文字を...
-
【VBA】 結合セルに複数画像と...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAのブックを開く方法...
-
WindowsのOutlook を VBA から...
-
エクセルでCDOを使ったメール送...
-
エクセルvbaの対象セルに色をつ...
-
【ExcelVBA】インデックスが有...
-
Excelのマクロについて教えてく...
-
エクセルVBAで特定のセルの値を...
-
エクセルのVBAコードについて教...
-
【VBA】値を変更しながら連続で...
-
Outlookの「受信日時」「件名」...
-
VBA 2次元配列の出力
-
Excel 範囲指定スクショについ...
-
VBA 別ブックから条件に合うも...
-
Web画面の文字をVB6で取得したい
おすすめ情報