[[20040831112254]] 『数式で計算された値か手打ちかで色を変えたい』(ひで) ページの最後に飛ぶ

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

 

『数式で計算された値か手打ちかで色を変えたい』(ひで)

[数式により計算された値か、手打ちした値かで色を変えたい]

はじめまして、ひでです。あらかじめセルのP列すべてに数式(関数)を入力し、答えを表示するようにしてますが、作業上、何カ所か数式(関数)を削除して手入力する事があります。後で画面を見た時にセルのP列に表示された値が数式により計算されたものか、又は手入力なのかを一目で見分けるために、例えば手入力された場合は数値を赤にするとか、できますか?


たとえば

Range("C5").Formula

ってやると C5 数式が入っていた場合数式を

値の場合はその値を人ってくれます。

拾ってきた値を数式か判断させて色をかえてみるとか どうですか?

(Null)


 数式が入力されている所を手入力で上書きするという事は、
 手入力した値と数式で求められる値が違うからだと考えられると思います。

 条件付き書式で、
【セルの値が】 【次の値に等しくない】 【セルに入力されている数式と同じ数式】
                                          ※例えばセルの数式が =SUM(A1:A10) なら
                                            同じように =SUM(A1:A10) と入力
 として、書式で文字を赤に設定。

 このような方法でも良いかもしれません。ただし、この方法の場合は数式の値と
 手入力の値が一致してしまうと赤文字にできません。(Yosh!)


 必ず数式でなくてはいけませんでしょうか。
 あとで一括で書式を変えるだけで目的が果たせるのであれば、
 編集−ジャンプ−セル選択−定数で、数値だけにチェックを残してOK
 これで手打ちした数値だけ選択できますが・・・
 (川野鮎太郎)


http://www.h6.dion.ne.jp/~nisimoro/siki.xls

にサンプルを作りました参考になるかわかりませんが、試してみてください。

説明

Private Sub CommandButton1_Click()
Dim c
Set c = Range("B3") '値はB3から始まり 下に続きます
Do Until c.Value = "" 
'B列で空白を発見したら処理を終了します
'B列は処理が終わってほしい場所まで
'空白のセルがあるとだめです。

    If Left(c.Formula, 1) = "=" Then 
    '左端にイコールがある場合数式と判断します
            c.Interior.ColorIndex = 15 'ここで色を変えています
    End If
    Set c = c.Offset(1) '参照セルを下にひとつずらして 処理を続けます
Loop
End Sub

(Null)


 A1を選択して【←重要】
メニューの「挿入」>「名前」>「定義」で

名前
数式?
参照範囲
=AND(Sheet1!A1<>"",LEFT(GET.FORMULA(Sheet1!A1),1)&REPT("",NOW()*0)<>"=")

 次に設定するセル範囲を選択して
条件付書式を「数式が」「=数式?」とし、セルの書式を設定します。
ただし、「=」だけ入力されると反応しませんが。
(KAMIYA)


 横から失礼します。KAMIYAさん、相変わらずのあざやかなご提案ですが、
 これだけ複雑な処理しなければならないということは、セルに入力されている数式を
 文字列として返す方法(マクロ以外で)は無いということでしょうか?(純丸)

 少なくともワークシート関数では「セルの中身が数式かどうか」を
判別するものがありません。ほとんどが「セルに入力されたものの
結果がどうか」を扱うものばかりです。ニーズが少ないせいもある
のでしょう。
CELL関数なんかにこの機能があってもよさそうなんですけどね。
 
運用上からいえば、今回の件はシートを使いまわしていて、
手入力された部分に計算式をもどしたりする必要があるから
なんでしょうが、
計算式を入力するセルのほかに手入力するセルを設けて
IF関数で計算の切替を行ってもよいのではないかと思います。
A列に計算式、B列へ手入力させるとすると、
=IF(B1<>0,B1,SUM(C1:G1))
B列に入力があれば、B列の値を優先。
リセット時はB列の値をクリアすればよい、とか。
(KAMIYA)

 KAMIYAさん同様。エクセル4.0マクロを使って、
 P1を選択。
 挿入→名前→定義
 名前を仮にaaa
 参照範囲に
 =GET.CELL(48,Sheet1!P1)
 としておいて、
 P列の範囲(仮にP1:P10)として、
 P1:P10を選択。
 書式→条件付書式→数式で
 条件式に、
 =AND(aaa=FALSE,P1<>"")
 と記入し、フォントあるいは、パターンを設定すると、
 数式でないものに色が付きます。

 名前の定義で、aaa
= AND(Sheet1!P1<>"",GET.CELL(48,Sheet1!P1)=FALSE)
 としておけば、 条件式は、
 =aaa
 で済みます。
 (kkk)


 KAMIYAさん、ありがとうございました。自分もこの質問を見てからいろいろと関数を
 あたってみたのですが見つからなかったので質問させていただきました。(純丸)

 横から失礼します。
 入力する都度っちゅうことやったらチェンジイベントが適しとるかも
 P列しか反映せんように組んでみました。
 1)当該Sheetタブを右クリック
 2)そのシートモジュールに下のコードをコピペ

 後はP列に式なり定数なり打ち込んでみてくだはい。
     (弥太郎)
 '-------------------------------
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim data

    If Target.Count > 1 Then End
    If Target.Column <> 16 Then End
    data = Left(Target.Formula, 1)
    If data <> "=" And IsNumeric(Target) Then
        Target.Font.ColorIndex = 3
    Else
        Target.Font.ColorIndex = 1
    End If
 End Sub


川野鮎太郎さんの応用です
(逆を言ってるだけなので、応用って程でもないです)

沢山の数式セルの中に手打ちの値が混ざって困ってしまった場合、

 編集−ジャンプ−セル選択−数式で、

ジャンプすれば、

数式だけ灰色(選択された状態)になります。

手打ちした数値は白抜きになりますので、判別しやすいと思います。

(yata)


コメント返信:

[ 一覧(最新更新順) ]


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