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

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

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

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

Q&A

解決済

2回答

1715閲覧

エクセルVBAの質問です

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

0グッド

0クリップ

投稿2016/03/07 02:11

VBA初心者です。よろしくお願いします。
以下のコードを記述しています。

Dim Rng1 As Range
Dim Rng2 As Range
Dim c As Range
Dim myColor As Long

Set Rng1 = Range("M6:BU108")
If Intersect(Target, Rng1) Is Nothing Then Exit Sub

For Each c In Intersect(Target, Rng1)
With c
Select Case .Value
Case "文字1"
myColor = 6
Case "文字2"
myColor = 4
Case "文字3"
myColor = 8
Case "文字4"
myColor = 10
Case "文字5"
myColor = 10
Case "文字6"
myColor = 6
Case "文字7"
myColor = 8
Case Else
myColor = xlColorIndexNone
End Select
c.Interior.ColorIndex = myColor
End With
Next
End Sub

色が変わる範囲は
Set Rng1 = Range("M6:BU108")
ですが、実際にはM6から3つ飛びで指定したいです。
皆様の知恵をお借りしたいと思います。
よろしくお願いします。

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

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

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

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

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

unau

2016/03/07 02:18

コードの部分はコードブロックで書いたほうが読みやすくていいと思います。VBA の場合は ```vbnet ~ ``` とかで代用ですかね。よくわかりませんが。
unau

2016/03/07 02:26

「M6 から3つ飛び」の意味がわからなかったのですが、「M列、Q列、T列、 ... に色付けをしたい」という意味でしょうか。
退会済みユーザー

退会済みユーザー

2016/03/07 02:33

すみません・・・言葉不足でした。 M6:BU6 M9:BU9 M12:BU12 ・ ・ ・ M109:BU109 という意味です
guest

回答2

0

ベストアンサー

「M6 から3つ飛び」の意味がわからなかったのですが、「M列、Q列、T列、 ... に色付けをしたい」という意だったとしたら、

vbnet

1 For Each c In Intersect(Target, Rng1) 2 With c 3 If .Cells.Column Mod 3 == 2 Then 4 Select Case .Value 5```とかして列番号が 3 で割ったときの余りで処理をわけるといいのではないでしょうか。今、ちょっと実行環境が用意できていないので未検証ですが。 6 7あと、`Select Case` などの条件分岐が多岐にわたる場合は、私は連想配列の導入を検討します。このケースではそこまで必要かどうか微妙なラインですが。 8```vb.net 9Set colorTable = CreateObject("Scripting.Dictionary") 10colorTable.Add "文字1", 6 11colorTable.Add "文字2", 4 12```としておいて、 13```vb.net 14myColor = colorTable(.Value) 15```とする、みたいな。

投稿2016/03/07 02:39

unau

総合スコア2468

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

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

0

VBA

1 Sub Sub_do_something_else() 2 Dim Rng1 As Range 3 Dim Rng2 As Range 4 Dim c As Range 5 Dim myColor As Long 6 7 Dim Counter As Long ' カウンタ変数宣言 8 9 Set Rng1 = Range("M6:BU108") 10 If Intersect(Target, Rng1) Is Nothing Then Exit Sub 11 12 Counter = 0 ' カウンタ変数初期化 13 For Each c In Intersect(Target, Rng1) 14 If Counter Mod 3 = 0 Then ' Counterを3で割ってあまりが0の場合だけ色付け 15 With c 16 Select Case .Value 17 Case "文字1", "文字6" 18 myColor = 6 19 Case "文字2" 20 myColor = 4 21 Case "文字3", "文字7" 22 myColor = 8 23 Case "文字4", "文字5" 24 myColor = 10 25 Case Else 26 myColor = xlColorIndexNone 27 End Select 28 c.Interior.ColorIndex = myColor 29 End With 30 End If ' If文分岐終了 31 Counter = Counter + 1 ' カウンタインクリメント(1ずつ加算) 32 Next 33 End Sub 34

Case はカンマでつなげることで複数を記載できます。
可読性と拡張性(後々、やっぱり別の処理にしたい)を天秤にかけてください。

以上、
参考になりますでしょうか?

投稿2016/03/07 02:37

Aeona

総合スコア396

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

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

退会済みユーザー

退会済みユーザー

2016/03/09 09:02

参考になりました! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問