
下記条件にてソースを書いていますが
簡略化したく
現状明細1行毎(16条件毎)に置換して追加する形で書いていますが
外部データ(CSV)からの取込で
データの順序が結構な間隔で変更されます。
その都度書き換えるとミスが発生しやすく
どうすれば良いかわかりません
Doを使っても上手く行きません
A B C D
1 01a 111 *** 001 A1白
2 02a 222 *** 002 A2ピンク
3 03a 333 *** 003 A3赤
4 01b 111 *** 001 A4白
5 02b 222 *** 002 A5ピンク
6 03b 333 *** 003 A6赤
全て文字列のデータです。
条件が12
データの行数が16行あります。
D1が001ならA1を白
D1が002ならA1をピンク
D1が003ならA1を赤
D2が001ならA2を白
D2が002ならA2をピンク
D2が003ならA2を赤
メインプログラムより抜粋
'条件付き書式セット
'シートプロテクト解除
ActiveSheet.Unprotect
'条件付き書式を削除 (指定範囲のみ)
Range("A1:D6").FormatConditions.Delete
'サブルーチン コール
Call ZAI '条件付き書式_材質識別用
↓↓
Sub ZAI()
'条件付き書式 材質判別用
'宣言
Dim Con
Dim font1 As Font
'1行目
'001
Set Con = Range("$A$1").FormatConditions.Add(Type:=xlExpression, Formula1:="=$D$1=""001""")
Con.Interior.Color = RGB(255, 255, 255)
Con.Font.Color = RGB(0, 0, 0)
Con.StopIfTrue = False
'002
Set Con = Range("$D$1").FormatConditions.Add(Type:=xlExpression, Formula1:="=$D$1=""002""")
Con.Interior.Color = RGB(255, 192, 203)
Con.Font.Color = RGB(0, 0, 0)
Con.StopIfTrue = False
'003
Set Con = Range("$D$1").FormatConditions.Add(Type:=xlExpression, Formula1:="=$D$1=""003""")
Con.Interior.Color = RGB(255, 0, 0)
Con.Font.Color = RGB(0, 0, 0)
Con.StopIfTrue = False
........続く
'2行目
'001
Set Con = Range("$A$2").FormatConditions.Add(Type:=xlExpression, Formula1:="=$D$2=""001""")
Con.Interior.Color = RGB(255, 255, 255)
Con.Font.Color = RGB(0, 0, 0)
Con.StopIfTrue = False
'002
Set Con = Range("$D$2").FormatConditions.Add(Type:=xlExpression, Formula1:="=$D$2=""002""")
Con.Interior.Color = RGB(255, 192, 203)
Con.Font.Color = RGB(0, 0, 0)
Con.StopIfTrue = False
'003
Set Con = Range("$D$2").FormatConditions.Add(Type:=xlExpression, Formula1:="=$D$2=""003""")
Con.Interior.Color = RGB(255, 0, 0)
Con.Font.Color = RGB(0, 0, 0)
Con.StopIfTrue = False
..........続く
End SUB
No.1ベストアンサー
- 回答日時:
こんばんは
ご提示のコードではD列に書式を設定してるみたいだし、内容も説明文とは違うので何だかよくわかりません。
>条件が12
説明されている条件は3種類だけのように見えます。
さっぱりわからないけれど、「条件付き書式」にする必要があるのでしょうか?
どうせマクロを実行して終わりなら、直接セルの色を塗り替えても同じではないかと・・
よくわかりませんが、以下と仮定しました。
・D列の値に応じて、その行のA列の背景色を変える
・001の場合は白、002の場合はピンク、003の場合は赤
・それ以外が記されていませんが、色なしとする
・D列は必ず文字列に設定されている
以上の仮定で、直接A列の背景色を設定する例です。
Sub Sample()
Dim rw As Long, c As String
Range("A:A").Interior.Color = xlNone
For rw = 1 To Cells(Rows.Count, 4).End(xlUp).Row
c = Cells(rw, 4).Text
If c = "001" Then Cells(rw, 1).Interior.Color = rgbWhite
If c = "002" Then Cells(rw, 1).Interior.Color = rgbPink
If c = "003" Then Cells(rw, 1).Interior.Color = rgbRed
Next rw
End Sub
No.2
- 回答日時:
こんにちは。
#1と同感ですが、条件付き書式ならこんな感じ。
絶対参照と相対参照に気をつけて。
後はまとめて Excel まかせちゃって OK かと。
条件式は Excel が適切にやってくれます☆
Sub testProc()
Dim fc As FormatCondition
Dim target As Range
Set target = ActiveSheet.Range("A1:D16")
' ↑D列だけなら次行のように
Set target = ActiveSheet.Range("D1:D16")
' 一度条件付き書式をクリアします
target.FormatConditions.Delete
Set fc = target.FormatConditions.Add(Type:=xlExpression, _
Formula1:="=$D1=""001""")
fc.Interior.Color = RGB(255, 255, 255)
Set fc = target.FormatConditions.Add(Type:=xlExpression, _
Formula1:="=$D1=""002""")
fc.Interior.Color = RGB(255, 192, 203)
Set fc = target.FormatConditions.Add(Type:=xlExpression, _
Formula1:="=$D1=""003""")
fc.Interior.Color = RGB(255, 0, 0)
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) ダブルクリックでセルの色を変える 1 2022/12/24 15:52
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- 据え置き型ゲーム機 【Nintendo Switch】私は主に Joy-Conグリップ にJoy-Conを挿しています。 1 2022/04/03 11:42
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Ruby パイソンエラーについて 1 2022/12/24 14:07
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】並び替えの範囲が、...
-
エクセルのVBAコードと数式につ...
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
【VBA】 結合セルに複数画像と...
-
vbsでのwebフォームへの入力制限?
-
算術演算子「¥」の意味について
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
Vba セルの4辺について罫線が有...
-
vb.net(vs2022)のtextboxのデザ...
-
ダブルクリックで貼り付けた画...
-
VBAの「To」という語句について
-
VBAでユーザーフォームを指定回...
-
VBAでCOPYを繰り返すと、処理が...
-
【マクロ】変数を使った、文字...
-
エクセルのVBAコードについて教...
-
ワードの図形にマクロを登録で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報
fujillin様
KenKen_SP様
ご親切にご回答頂きありがとうございました。
添付したソースが間違っており
混乱させてしまった事お詫び申し上げます。
ちなみ 元データ(別シート)3000~5000行から
指定した条件で最大16行摘出して処理していました。
お陰様で無事処理でしました。