プロが教えるわが家の防犯対策術!

いつもお世話になっています
エクセル2016で文字の配置によって文字の色を変えたいのですがいい方法はないでしょうか
例えば
文字が中央なら黒、右揃えなら赤、左揃えなら青って感じです
もしかしてマクロじゃないと難しいかと思いますが
私の知識ですとあるマクロをちょっと手を加えて使えるくらいです

質問者からの補足コメント

  • cell関数よさそうですね!
    でも数字だと配置に関わらず空白になってしまいます
    なにかいい方法はないでしょうか

      補足日時:2021/01/15 17:19

A 回答 (4件)

No.3です。


前回回答でCELL関数と条件付き書式を使用した「文字の横位置」によって、フォントの色を変える方法を回答しました。

しかし、ご質問者から
>でも数字だと配置に関わらず空白になってしまいます
>なにかいい方法はないでしょうか
とのコメントが示されました。

そもそも、CELL関数のinfo_type値"prefix"では、対象セルの "文字位置" に対応する文字列定数を返しますので、セルに文字以外(数値や数式)が入力されている場合空白が返ります。
ご質問者の当初のご質問は

>文字の配置によって文字の色を変えたい
というご説明だったのですが、数値の場合もあるということのようです。

だとすると、CELL関数での判別は困難です。代替案としては、No.2さんの回答のように、VBAを使用する方法も考えられます。
ここでは、VBAといっても「ユーザー定義関数」を使う方法を考えてみました。
まず、VBEを起動し、標準モジュールに以下のVBAを記述します。

Option Explicit
Function prefix_info(ByVal Target As Range) As String
Dim kekka As String
Dim hrizn As Variant
kekka = "^"
hrizn = Target.HorizontalAlignment
If hrizn = xlLeft Then kekka = "'"
If hrizn = xlRight Then kekka = """"
prefix_info = kekka
End Function

加えて、「横位置配置」によって、フォントの色を変えようとしているシートのシートモジュールに以下のVBAを記述します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Calculate
End Sub

さらに、前回回答でお示しした、関数の結果によりフォントの色を変える「条件付き書式」を設定しでフォントの色を変更します。
添付画像を参照してください。

これで、数値が入力されていても、「横位置配置」(指定無しの場合を除く)に沿ったフォント色で表示されます(指定なしの場合は標準色での表示となります)。
「エクセル2016 文字の配置によって文字」の回答画像4
    • good
    • 0

>文字が中央なら黒、右揃えなら赤、左揃えなら青って感じです



ご質問者が例として示されたものを実現する方法として「条件付き書式」を活用した手段を考えてみました。

No.1さんがお示しになったCELL関数を使用します。

文字をを入力する範囲を指定してその範囲に対し、「次の数式を満たす場合に値を書式設定」に、
=CELL("prefix",a1)=""""という数式を記述し、フォント色を赤
=CELL("prefix",a1)="'"という数式を記述し、フォント色を青
=CELL("prefix",a1)="^"という数式を記述し、フォント色を黒
という条件を設定します。

これで、文字を左揃えにすると青、中央揃えにすると黒、右揃えにすると赤という条件付き書式が設定されます。
添付画像を参照してください。

この条件付き書式を設定した上で、セルに入力した文字を左揃え、中央揃え、右揃えと配置を変更してみて、フォントの色が自動的に変更されるかどうか確認してください。
「エクセル2016 文字の配置によって文字」の回答画像3
    • good
    • 0
この回答へのお礼

マクロありがとうございます
いろいろ説明不足で申し訳ありませんでした
いろいろ参考になりました

お礼日時:2021/01/19 09:19

こんばんは、


VBAマクロの場合
>文字の配置によって文字の色を変えたいのです
解釈によっては、難しくなります。
①すんなり解釈して、入力時にそのセルの書式設定で色を変える
②現在の書式設定で色を付ける
③書式設定を変えると文字の色が変わる

①は、Worksheet_Changeイベントに処理を書けばさほど難しくはないと
②も、普通にプロシージャを実行すれば良いはずです。
③は、困ります。書式変更時に実行されるイベントがありません。
すぐに思いつくのは、Worksheet_SelectionChangeを工夫するとかですが
果たして、、、です。

>あるマクロをちょっと手を加えて使える
Worksheet_Changeイベントに改造する事も出来ると思いますので
べたですが②のサンプルを書きます。(一例)
'参考
'xlGeneral 1 標準
'xlLeft -4131 左詰め
'xlCenter -4108 中央揃え
'xlRight -4152 右詰め
'xlFill 5 繰り返し
'xlJustify -4130 両端揃え
'xlDistributed -4117 均等割り付け

Sub aa()
Dim r As Range
Dim rc As Integer
If Selection.Count > 2000 Then
rc = MsgBox("選択範囲が広いので処理に時間がかかります。処理を行いますか?", vbYesNo + vbQuestion, "確認")
If rc = vbNo Then Exit Sub
End If
For Each r In Selection
With r
Select Case .HorizontalAlignment
Case xlLeft
.Font.Color = RGB(255, 0, 0)
Case xlRight
.Font.Color = RGB(0, 0, 255)
Case xlCenter
.Font.Color = RGB(0, 0, 0)
Case xlJustify
.Font.Color = RGB(0, 0, 0)
Case xlDistributed
.Font.Color = RGB(0, 0, 0)
Case Else
.Font.Color = RGB(0, 0, 0)
End Select
End With
DoEvents
Next r
End Sub

選択範囲が大きいとスタックの可能性もあるかと思います。
途中で止められるようにDoEventsを入れてあります。
Selectionを範囲指定したり、Changeイベントでは、ループをせず
With Targetなどとすれば良さそうです。
調べて手を加えてください。
    • good
    • 0
この回答へのお礼

マクロありがとうございます
いろいろ勉強になりました

お礼日時:2021/01/19 09:38

マクロじゃないと難しい……じゃなくて、自動で行うならマクロじゃないと無理。



自分なら、マクロ組むの面倒だからCELL関数で文字配置を調べて、
フィルタで同じ文字配列のセルを選択し、まとめて色を付けるかな。
要は手作業。

 =CELL("prefix",A1)
これでA1セルの文字配置が分かる。
 左詰め  一重引用符(')
 右詰め  二重引用符(")
 中央配置 キャレット(^)
 均等配置 円記号(\)
 これ以外 空白
です。
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2021/01/19 09:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!