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

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

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

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

Q&A

解決済

4回答

439閲覧

VBA: 決められた列の中のセルに入力した時に文字色の自動変更を行いたいです。

liltunechi

総合スコア13

VBA

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

0グッド

0クリップ

投稿2019/01/22 01:21

VBA初心者のためまだVBAを理解仕切れてないのでお手柔らかにお願い致します。

特定の列の中の適当なセル(B8,B13,B22など)に特定の文字(例えば“名前”)が入力された時に、入力されたセルと同じ行の文字色を赤色に一括変更させたいのですがどうすればいいのでしょうか?

条件付き書式ではなくVBAで行いたいです。

試したコードは以下ですが全く機能しませんでした。

Private Sub Worksheet_Change(Byval Target As Range) If Target.Value = “名前” Then Rows(Target.Row & “2:2” & Target.Row).Select With Selection.Interior .Pattern = 0 .PatternColorIndex = xlAutomatic .Color = -16776961 .TintAndShade = 0 .PatternTintAndShade = 0 End With End Sub

宜しくお願い致します。

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

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

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

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

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

guest

回答4

0

答えはukkari-ukachanさんの指摘通りか、(転記ミスで実際はそうでない場合ならば)ttyp03さんが書かれているとおりですが、そのほか注意点など書いてみます。

  • どうダメだったか書きましょう

https://teratail.com/help/question-tips
一口に機能しなかったと言っても、xxxエラーになった、意図しない場所が変更された、何も起こらなかったとかありますよね。

  • Interior.Colorはセルの背景色

文字色を変えたいならFont.Colorです。これはttyp03さんの提示されたコードからわかることですね。

  • 複数セルの同時変更時のWorkSheet_Changeイベント

呼ばれるのは一度だけです。各セル毎には呼ばれません。
このとき、引数のTargetには複数セルが含まれるため、Target.Valueなどの参照はエラーになります。
ですので、安全に対処するならば、For EachなどでTargetの要素ごとに処理したほうが良いかもしれません。

投稿2019/01/22 02:15

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

こんな感じでしょうか。

VBA

1If Target.Column = 2 And Target.Value = "名前" Then 2 Rows(Target.Row).Font.Color = vbRed 3End If

範囲の選択方法とRangeオブジェクトのプロパティについて学習しましょう。
Rangeオブジェクト

投稿2019/01/22 01:38

ttyp03

総合スコア16998

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

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

0

ベストアンサー

要修正箇所1

End Withの後ろにEnd If が必要です。
それでまずは一旦動作はしますが、望まれている動作はしないと思います。

要修正箇所2

Target.Rowで取得できるのはTarget(変更したセル)の行番号です。
その行番号に & "2:2" & Target.Rowを実施すると文字列連結されます。
1行目で実行すれば結果は "12:21" となり、
2行目で実行すれば、"22:22"、3行目では"32:23"となります。

その範囲に対してselectを実施しているので、
1行目の編集に対し、12行目から21行目を選択、
2行目の編集に対し、22行目だけを選択、
3行目の編集に対し、23行目から32行目を選択しています。
続く処理で書式設定がされています。

& "2:2" & & ":" &に変えれば編集した行全体を書式設定できます。

追加修正案

もし編集集するセル側の判断を絞りたい、例えば「B列に入力した場合だけ処理実施したい」といった場合、
Ifを使って条件付けを行う必要があります。

また、キーワードごとに色付けを変えたい場合なども同様に条件を付ける必要があるでしょう。

実現するサンプルを記載すると下記の様になります。

code sample

VBA

1Private Sub Worksheet_Change(ByVal Target As Range) 2 If Target.Cells.Column = 2 Then ' 列番号 2 = B列 3 If Target.Value = "名前" Or Target.Value = "住所" Then 4 5 Dim ColorNumber As Long 6 If Target.Value = "名前" Then 7 ColorNumber = -16776961 ' 赤 8 ElseIf Target.Value = "住所" Then 9 ColorNumber = 65535 ' 黄 10 End If 11 12 ' 文字色変更 13 With Rows(Target.Row & ":" & Target.Row) 14 .Font.Color = ColorNumber 15 End With 16 17 ' セル背景色変更 18 'With Rows(Target.Row & ":" & Target.Row).Interior 19 '冗長 'Rows(Target.Row & ":" & Target.Row).Select 20 '冗長 'With Selection.Interior 21 ' 不要'.Pattern = 0 22 ' 不要'.PatternColorIndex = xlAutomatic 23 '.Color = ColorNumber 24 ' 不要'.TintAndShade = 0 25 ' 不要'.PatternTintAndShade = 0 26 'End With 27 28 End If 29 End If 30 31End Sub

エラー処理やマジックナンバー(埋め込まれた固定値)対策など、
その他、必要な対応は別途ご自身でお願い致します。

投稿2019/01/22 02:15

編集2019/01/22 05:20
Aeona

総合スコア396

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

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

Aeona

2019/01/22 05:21 編集

セル色ではなく文字色だったんですね。 よく読んでいませんでした。 コード修正しました。
guest

0

まず、Ifが閉じられていないので正常に動かない状態です。
それを追記して動作しないというのであれば操作したいSheetじゃないSheetのModuleに書いてしまっているのではないでしょうか?

投稿2019/01/22 01:44

ukkari-ukachan

総合スコア50

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問