[[20181122165013]] 『セル内の文字色で決まった値を返す。』(ちほ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セル内の文字色で決まった値を返す。』(ちほ)

セル内に文字色で決まった値を返すことが関数で出来ますか?

   A    B
1  25(赤) ×
2  32(黒) 〇
3  27(黒) 〇
4  45(赤) ×
※()内は文字色です。

どなたか教えて下さい。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


補足:例では数値だけですが、実際は数値・文字などあります。

(ちほ) 2018/11/22(木) 17:04


Bが✕の時にAが赤
Bが○の時にAが黒 という状態にしたいのであれば
条件付き書式で出来る
(無) 2018/11/22(木) 17:14

それはわかりますが、やりたい事と違います。
(ちほ) 2018/11/22(木) 17:20

 VBAですが。。。Sheet1 対象
Option Explicit
Sub main()
    Dim i As Long, r As Range
    Worksheets("Sheet1").Copy
    With ActiveSheet
         .Range("B:B").Clear
         For Each r In .Range("A1").CurrentRegion
             i = i + 1
             .Cells(i, 2) = .Cells(i, 1).Font.Color
         Next
    End With
End Sub
(隠居じーさん) 2018/11/22(木) 17:48

赤色を条件付き書式ではなく手塗りしているのであれば、以下のようにユーザー定義関数を使うとか。
 【標準モジュール】
 Function aaa(R As Range) As String
    aaa = IIf(R.Font.Color = RGB(255, 0, 0), "○", "×")
 End Function

 【シート上の式】
 B1: =aaa(A1)
(???) 2018/11/22(木) 17:51

おっと、赤なら×でしたね。○×を逆にしてください。
(???) 2018/11/22(木) 17:58

隠居じーさん様
???様
有難うございます。

条件付きで書式を赤に変更しています。
隠居じーさん様
シートのコードにコピペすればいいのですか?

(ちほ) 2018/11/22(木) 18:05


 いえ
標準モジュールです。
???さん
のコードのほうがよりお望みのものに近いかと思います。
私のは色コードをそのまま返しているだけなので、
○×の対応は出来ていません。

(隠居じーさん) 2018/11/22(木) 18:15


隠居じーさん様
有難うございます。
???様の方でやってみますが、条件付き書式で赤文字でも大丈夫なのでしょうか?
コードにコピペして、
【標準モジュール】
 Function aaa(R As Range) As String
    aaa = IIf(R.Font.Color = RGB(255, 0, 0), "○", "×")
 End Function

セルにコピペ

 【シート上の式】
 B1: =aaa(A1)

すれば良いのでしょうか?
(ちほ) 2018/11/22(木) 18:28


すみません ^^; 条件付き書式のカラーは
FormatConditions
とか
使わないとダメっぽいです。
一寸調べてみますね。。。
良くご存知の方の回答をお待ちください
m(_ _)m
(隠居じーさん) 2018/11/22(木) 19:00

>条件付きで書式を赤に変更しています

どういう条件を設定しているのでしょうか

(マナ) 2018/11/22(木) 20:51


 標準モジュールへコピペ ("Sheet1")が対象でお試しを 
 外していましたらお許しを ^^;

 Option Explicit
Private Sub mo_01()
    Dim i As Long, rr As Range
    Worksheets("Sheet1").Copy
    With ActiveSheet
         For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
             If .Cells(i, 1).DisplayFormat.Font.ColorIndex = 3 Then
                 .Cells(i, 2) = "×"
             Else
                 .Cells(i, 2) = "○"
             End If
         Next
    End With
End Sub
(隠居じーさん) 2018/11/22(木) 23:44

 A列を条件付き書式で色を付けているのなら、その条件を使って◯×を判断すれば数式で出来ます。

 マクロの回答はついてるので、マクロでも良いと言う事なら良いですけど、元々関数希望との事なので、
 数式の回答を希望されるなら、条件付き書式に使用している条件を提示して下さい。

(sy) 2018/11/23(金) 07:21


(sy)様
条件付き書式は以下の条件が入っています。

・=セル1>=セル2+40
・>=80 
・特定の文字から始まる『あ』

などが入っています。
(ちほ) 2018/11/26(月) 12:27


隠居じーさん様
VBAをコピペしても変わりません。
何か設定ありますか?
(ちほ) 2018/11/26(月) 12:29

とりあえず 貼り付けたコードの中に
カーソルを移動して、F5を押してみてください。

(隠居じーさん) 2018/11/26(月) 12:38


隠居じーさん様
全てコピペ出来ていませんでした。
F5押すと違うファイルが立ち上がり
〇×表示されます。
(ちほ) 2018/11/26(月) 13:33

 それでよければ
下記コードに書き換えて(前の全て消して今回の分をコピペ)
エクセルのリボンの開発タブ マクロ で
マクロの一覧表が出ますので
sample_01
を選択して実行してください。シート名 Sheet1 が対象です。
(注意※ 元には戻せませんのでご注意ください。バックアップ取ると良いですね)
このままで、ユーザー定義関数にすると何故かエラーになる使用だそうです。^^;

 関数は詳しい方の回答をお待ちください。
でわ
m(_ _)m

 Option Explicit
Sub sample_01()
    Dim i As Long, rr As Range
    With Worksheets("Sheet1")
         For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
             If .Cells(i, 1).DisplayFormat.Font.ColorIndex = 3 Then
                 .Cells(i, 2) = "×"
             Else
                 .Cells(i, 2) = "○"
             End If
         Next
    End With
End Sub
(隠居じーさん) 2018/11/26(月) 13:58

(sy)様
教えて下さい。
(ちほ) 2018/11/29(木) 10:28

抽象的な式で書かれても直しようがないので、具体的な式を書くべきです。

が、条件付き書式で着色しているならば、適用先にB列も加えるだけじゃないでしょうか? 例えば「A1:A100」を「A1:B100」にして、式のほうは「A1」等で比較している部分を「$A1」のように列固定に変えるだけです。(とっくに気づいて解決しているものと思ってましたよ…)
(???) 2018/11/29(木) 10:44


そうか、同じ色を付けても、また色判定することになるから、適用先を変えても駄目なのですね?

そうすると、式で同じ条件を書くのが目的に適ってそうですね。 たとえば「=IF(AND(A1>=B1+40,LEFT(C1,1)="あ"),"○","×")」こんな感じで書けそうですが、具体的な条件を書けないようならば、これを元に考えてみてください。

(???) 2018/11/29(木) 11:04


 今体調不良で回答が満足に出来ないのですいません。

 いくつか???な部分があるんですが、

 >・>=80  
 >・特定の文字から始まる『あ』

 >=80 としてるので、80以上の数値は当然ですが、「あ」でも「い」でも文字は全て80以上に該当するので、
 これだと下の「あ」から始まるに関係なく、文字は全て赤字になってませんか?

 セル1、セル2、はA列以外のセルの事ですか?

 何かお互い相反する条件があるので、セルごとに条件が違うと言う事でしょうか?

 今のご提示いただいてる内容では的確な回答は出来ないですけど、
 返事をいただいても直ぐには回答出来ないので、いくつか憶測で回答例を提示しておきます。

 まずはご提示頂いてる条件がそれぞれバラバラの場合の単独の式
 =IF(セル1>=セル2+40,"×","〇")
 =IF(A1>=80,"×","〇")

 指定の文字から始まるは、1文字だけなら
 =IF(RIGHT(A1,1)="あ","×","〇")

 指定の文字が1文字で、検索候補が他にも複数ある場合などは
 =IF(OR(RIGHT(A1,1)={"あ","い","う"}),"×","〇")

 文字数が決まってなく、大文字小文字の区別をしなくて良いなら
 =IF(COUNTIF(A1,"あ*"),"×","〇")

 此方も検索候補が他にも複数なら
 =IF(OR(COUNTIF(A1,{"あ*","いう*","えおか*"})),"×","〇")
 または
 =IF(SUM(COUNTIF(A1,{"あ*","いう*","えおか*"})),"×","〇")

 大文字小文字を区別するなら
 =IF(IFERROR(FIND("あ",A1)=1,0),"×","〇")

 此方の複数候補の場合
 =IF(OR(INDEX(IFERROR(FIND({"あ","いう","えおか"},A1)=1,0),0)),"×","〇") 

 3つの条件のどれかに該当すれば良いと言う場合は、
 大文字小文字の区別が無ければ、
 =IF(OR(セル1>=セル2+40,A1>=80,COUNTIF(A1,{"あ*","いう*","えおか*"})),"×","〇")

 大文字小文字を区別する場合は、
 =IF(OR(セル1>=セル2+40,A1>=80,INDEX(IFERROR(FIND({"あ","いう","えおか"},A1)=1,0),0)),"×","〇")

(sy) 2018/11/29(木) 17:08


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.