痔になりやすい生活習慣とは?

スプレッドシートを使っているのですが、文字の色を判定したいのです。
例えば「A1」のセルに入力されている文字が、赤なら「1」黒なら「2」などの判定ができるような関数を作る事はできますでしょうか? 別に判定結果は「1」や「2」でなくても構いません。
何をしたいかというと、IF関数を使って文字の色の判定結果によって別のセルの内容を「表示させる」か「表示させないか」の振り分けをしたいのです。
関数名を例えば「FontColor」などにして、「A2」に =IF(FontColor(A1)=1,"",何かしらの関数)のようにできないものかと思っております。
宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

基本的にマクロなどを活用して「ユーザー定義関数」を利用することになりますが、もうちょっと具体的に、ご利用のスプレッドシートの「ソフト名」と「バージョン」によって、できるものもあれば出来ないものもあります。




またしばしば問題になるのは
>赤

あなたが実際に使っているスプレッドシートによって「赤」だったり「なんちゃって赤」が使われてたりすると、これはお手上げになりますね。


もひとつ、これはエクセルの場合に固有の問題として、
>文字の色を判定したい

マクロを使い、文字色を取得するユーザー定義関数を利用する方法は、ちょっと調べれば簡単にヒットします。
(今現在のマクロを使う方法と、古いマクロを使う方法と2つが見つかりますので探してみて下さい)

ただいずれの方法にしても、通常の関数とは違って「文字色を塗り替えた」だけでは関数は反応しないという、絶対の制限があります。これを回避する方法はありません。

エクセルの場合では、色を変更した(たとえば文字色を赤くした)あと、(具体的なマクロに応じて適切な方法で)明示的に再計算を走らせないと、正しい結果を得られません。


以上のような状況を踏まえて、具体的な状況と何をしたいのかを添えて、改めてご相談を投稿し直してみて下さい。ちょこちょこっと「補足」で書き足してもダメですから。
    • good
    • 0
この回答へのお礼

ありがとうございました。
別の方法を考えてみます。

お礼日時:2013/11/02 08:17

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【Excel】 セルの色での判断はできますか?

使用環境:Office2003

条件付書式を使用して、セルの値がxxならばセルを着色する・フォントを変える、というのは可能ですが、

逆に

セルの色がxx(例えば赤等)ならば、隣のセルに1を代入する

ということは可能でしょうか?
※VBAを使わなければそれにこしたことはないですが、
 必要ならばコーディングも教えてください

よろしくお願いします。

Aベストアンサー

過去の質問を検索していただくと、たくさんの事例がありますが、結論から言うとVBAを使用しないとセルの色は取得できません

>セルの色がxx(例えば赤等)ならば、隣のセルに1を代入する
VBAを使用すればもちろんできますが、これは「例えば」の質問であって、このコードを書いても意味はないのでは?

ですから汎用的に使えるユーザ定義関数にしました。以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。
ワークシート画面に戻って、適当なセルに
=CellColor(A1)
と入力してみて下さい。A1セルの色番号が表示されます。(背景色なしの場合は0が返ります)
この戻り値判定して、関数などでセルに値をセットすればよいでしょう

Function CellColor(ByVal rng As Range)
With rng.Cells(1, 1).Interior
If .ColorIndex = xlNone Then
CellColor = 0
Else
CellColor = .ColorIndex
End If
End With
End Function

ただしセルの背景色を後から変えても、ユーザ定義関数の戻り値は自動的には変わりません。式を入力した後で背景色を変更した場合は
 ALT+Ctlr+F9
で強制再計算させる必要があります。

過去の質問を検索していただくと、たくさんの事例がありますが、結論から言うとVBAを使用しないとセルの色は取得できません

>セルの色がxx(例えば赤等)ならば、隣のセルに1を代入する
VBAを使用すればもちろんできますが、これは「例えば」の質問であって、このコードを書いても意味はないのでは?

ですから汎用的に使えるユーザ定義関数にしました。以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて...続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QGoogleスプレッドシートでセルの文字数の関数

こんにちは。
エクセル系にあまり詳しくないもので教えてください。

現在Googleスプレッドシートを使っているのですが、
セルに入力した文字の「文字数」を表示したいです。

例えばA1セルに500文字日本語を入力していると、
A2セルに「500」と出るようにしたいのですが、
この場合どのような関数を書けばよいでしょうか?

詳しい方ご伝授いただけると助かります。
宜しくお願い致します。

Aベストアンサー

=len(セルの番号)でできませんか?

Qエクセル・・色の着いたセルの個数を数える関数はある?

エクセルの表内で塗りつぶしされているセルだけを数える様な関数はありますか?
セルには文字や数値は入力されておらず、塗りつぶしているだけです。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

ユーザー定義関数で作ってみました。Ver4 マクロ関数で十分だと私は思いますが、Ver 4 マクロ関数ではケシカランというような方?は、以下のようなVBAでの解決方法が便利かなって思います。

VB Editor の標準モジュールに貼り付けてください。(挿入-標準モジュール)

なお、一般のブックの標準モジュールのユーザー定義関数に、Public キーワードをつけたところで、グローバル関数になるわけではありませんので、もしその点に不安のある方は、マニュアル等で、確認されたほうがよいかもしれませんね。

なお、以下は、引数のインデックスに0を入れると、配列出力するようにしてあります。

'------------------------------------
Function ColorCellCount(範囲 As Range, Optional インデックス As Integer = 1, Optional パターン As Integer = 0)
  Dim myRng As Range
  Dim myIndex As Integer
  Dim myPattern As Integer
  Dim myColor() As Integer
  Dim Ret() As Double
  Dim c As Range
  Dim i As Long
  Dim j As Long
  Set myRng = 範囲
  myIndex = インデックス
  myPattern = パターン
For Each c In myRng
   On Error Resume Next
   If myPattern = 0 Then
     i = WorksheetFunction.Match(c.Interior.ColorIndex, myColor, 0)
   Else
     i = WorksheetFunction.Match(c.Font.ColorIndex, myColor, 0)
   End If
   If i = 0 Then
     ReDim Preserve myColor(j)
     ReDim Preserve Ret(j)
      If myPattern = 0 Then
       myColor(j) = c.Interior.ColorIndex
      Else
       myColor(j) = c.Font.ColorIndex
      End If
      Ret(j) = 1
     j = j + 1
     On Error GoTo 0
     Else
      Ret(i - 1) = Ret(i - 1) + 1
   End If
  Next
  If myIndex <= 0 Then
   ColorCellCount = Ret()
  ElseIf myIndex > UBound(Ret) + 1 Then
   ColorCellCount = Ret(UBound(Ret()))
   Else
   ColorCellCount = Ret(myIndex - 1)
  End If
  Set myRng = Nothing
End Function

ワークシート上での使い方は、

A列
色付き
色なし
色なし
色付き
色付き

=ColorCellCount(A1:A5, 1 )

とすれば、上から数えて、1番目の色のセルの数が出ます。

=ColorCellCount(A1:A5, 2 )
を入れれば、色なしのセルの数が出ます。

=SUMPRODUCT(ColorCellCount(A1:A5, 0 ))

とすれば、全部の合計が出ます。

なお、
=ColorCellCount(A1:A5,1,1)

とすれば、文字の色を数えます。

こんにちは。

ユーザー定義関数で作ってみました。Ver4 マクロ関数で十分だと私は思いますが、Ver 4 マクロ関数ではケシカランというような方?は、以下のようなVBAでの解決方法が便利かなって思います。

VB Editor の標準モジュールに貼り付けてください。(挿入-標準モジュール)

なお、一般のブックの標準モジュールのユーザー定義関数に、Public キーワードをつけたところで、グローバル関数になるわけではありませんので、もしその点に不安のある方は、マニュアル等で、確認されたほうがよいかもし...続きを読む

Qexcel 参照しているセルに色がついていたら、返すセルにも色もつける

excelの詳しい方、ぜひ教えてください!

Sheet1にあるデータを、計算式によってSheet2に参照させていますが、Sheet1のセルの色までは参照する事ができません。
計算式はいたって簡単で、例えばSheet1のA1を参照している時は、Sheet2のセルに
=Sheet1!$A$1
と計算式を入力しています。
条件付き書式や関数も考えたのですが、
”もし、参照しているセルに色がついていたら、返すセルにも色もつける”
をどうすれば出来るのかわかりません。

どうか、わかる方ぜひ教えてください。お願いします!!

Aベストアンサー

セルを色情報を得ることはできませんから、通常の関数では行うことは出来ません。

QGoogle Spreadsheetで他のシートから値を参照したい

Google Spreadsheetの使い方に関しての質問です。

シートを複数作成して、あるシートのセルの値を
別のシートのセルに反映させることはできるのでしょうか?
公式のヘルプなどで検索もしてみたのですが
期待する情報は得られませんでした。

もし可能なら詳しいやり方を教えてくだされば助かります。

Aベストアンサー

「=」をキー入力したあとに、別シートのタブをクリックして
シートを切り替えて、反映させたいセルをクリックして「Entet」
キーを押します。
これ、Excelなどと同じ操作です。

もし、ご質問の意味が違うようでしたら、補足してください。

Q複数の文字列のいずれかが含まれていたらTRUEを返す関数について

複数の文字列のいずれかが含まれていたらTRUEを返す関数について
エクセル2003を使用しています。
B列に例えば住所が入力されていて、「東京都北区」「千代田区」「東村山市」等いくつかの文字列のいずれかが含まれていたら、A列にTRUEを返すということをしたいのですが方法がわかりません。
単純なことのような気がするのですがどうしても思いつきません。よろしくお願いいたします。

Aベストアンサー

こうかなあ。。。
A2セル
=OR(SUBSTITUTE(B2,$D$2:$D$4,"",1)<>B2)
[Ctrl]+[Shft] +[Enter] で確定、配列数式です({}で囲まれる)
下へオートフィル

D2:D4に文字列を入力しておく

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m

Qエクセル2000で常に1つ上のセルを参照する。

出来るのでしたら教えてください。
質問はタイトルの通りです。
最初はA18のセルに=A17などしていましたが、
行の削除、コピーなどを行なうことがあり、
ちょっと困ってます。
どうか宜しくお願いします

Aベストアンサー

A18に入力する式を、=A17 の代わりに

 =OFFSET(A18,-1,0)

とすれば、セルA17を削除してもエラーは出ません。

こういう意味の質問だったでしょうか。

QEXCELで別のシートのデータを参照して返す方法

ちょっとしたことなのですが、うまく式が書けなくて悩んでいます。

作業用のシート1と参照用のシート2があり、
シート1のA列には
 あおき
 あべ
 いぐち
 いはら
などと文字列(名前)が入力されています。
こちらは今度の野球のスタメンだと思ってください。

シート2にはA列とB列があって、
わたなべ 55
いぐち  43
あおやま 67
いはら  41
などと、名前:背番号が羅列されています。こちらが参照用の全選手の背番号リストだと思ってください。

ここで、 シート1のB列に、A列の名前に対応した背番号を返したいのです。
なので、シート1のB列に
IF(シート1のA列の値=シート2のA列のいずれかの値)だったとき、
適合したシート2の行のB列の値を表示する
という式を入れたいのですが、どのように式を書けばよいでしょうか。

すみませんがどなたか教えてください。

Aベストアンサー

私もその場合はVLOOKUP関数を使用しています。

「B1」=VLOOKUP(A1,Sheet2!$A:$B,2,0)


人気Q&Aランキング