[[20030618234153]] 『セル内で数値と式を判別する関数は?』(jun53) ページの最後に飛ぶ

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

 

『セル内で数値と式を判別する関数は?』(jun53)

 初めまして。 1ヶ月程前より Lotus123 から Excel2000 に移行中ですが、

 Lotusにある @CELL("type3",範囲)  数値 計算式 等の属性を返す 

 に相当する関数が無く困ってます。(移行前に互換性が無いことは確認してましたが)

 ユーザー関数を作成、と思いましたが、マクロのほうは

 自動作成と、それに若干の修正を加えるくらいしか知識が無くお手上げです。
 

	     A		          B
 
       1    8                  数値(v)

       2    =3+5               計算式(fv)

       3      =sum(3,5)          計算式(fv)

 の様に A列セル内が 数値なのか計算式なのかB列で知りたいのですが

 (参照がA列、それを調べる関数がB列とは限りませんが)

 このような関数作成は可能でしょうか、

 皆様のお知恵をお借りしたいのですが、よろしくお願いします。

 追記: 上記と同じく 色文字、色背景を返す関数が

 Excelには無く、過去ログ検索で発見しました。

  kazuさん、はじめ多数の方々有りがとうございます。

 特に GET.CELL関数 の項は大変参考になりましたB


 ほめていただくと、がんばらないと。
 こんな感じでしょうか?
 (kazu)

 Option Explicit
 Function cellinfo(adr)
 cellinfo = ""
 If InStr(1, adr.FormulaR1C1Local, "=") = 1 Then
     cellinfo = "fv"
  ElseIf WorksheetFunction.IsNumber(adr.Value) = True Then
     cellinfo = "v"
 End If
 End Function

こんばんは。                                                @                               
4.0マクロ関数のGET.CELL関数で何とかできます。(通常の関数ではないですね)                                                  
提示された例で行くと、B1セルを選択して、                                                                  
CTRL+F3、「名前の定義」ボックスが出てきますので、                                                          @  
名前 SIKI (適当な名前でいいです)                                                                   
範囲 =GET.CELL(6,A1)            @                                                              
として、OK                                                                                 
B1セルに、=IF(ISERROR(FIND("=",SIKI,1),"数値","式")                                                           
とすれば、何とか判別できます                     @      
                                           
ただ、数値を =6 とかで入力されていると "式" に、なりますが。                                                                              (TORI)

 おはようございます。 kazuさん、早々の回答ありがとうございます。

 早速試してみましたが、希望通りの結果で大感激です。

 せっかくですから、関数名に HN を使わせてもらい add-in しました。

  TORIさん、ありがとうございます。 先頭の "=" を認識させようと、

 =IF をあれこれひねり回したのですが、 GET.CELL を使うのですね。

 ご指導通りの手順で作業したのですが、GET.CELL は 私の環境では

 今ひとつうまくいかず、使えないようなのです。

 前回 興味を持ったので、色々やってみたんですが認識してくれず

 私の操作ミスだろうと思い後回しになり未だそのままです。

 今後の研究にしたいと思います。

 前述したとおり、Excel2000 に移行途中なので(全体の3分の1程度)

 今後もご迷惑をおかけするかもしれませんが、

 皆様 よろしくお願いします。 有り難うございました。 (jun53)


 TORIさん、出来ましたー。環境のせいではなかったです。

 =IF(ISERROR(FIND("=",SIKI,1)),"数値","式")   ISERROR の ) カッコが

 一つ抜けてました。 GET.CELL いろんなところで使えそうですね。

 VBA を勉強していつかは、回答者としてレス出来ることを目指し・・・・・

 TORIさん、ありがとうございます。  (jun53)


 こんばんは。 埋もれかけてるトピを引っ張り出してすみません。

 =if 文に =cell と kazuさん作 =cellinfo(adr) を組み合わせて属性を返していますが

 どうせなら一つにまとめて 数値、式、文字列の判定をと思い

 =cellinfo(adr) に4行足してみました。

 (SearchString は、今日半日かけてようやく探しましたが)

 別の方法もあるのでしょうか?
 
  = "b" は、ブランクを認識させたいと思いましたが、#VALUE! が返ってきました。

 あきらめてこの部分は削除しますが、もう少しスマートな方法がありましたら

 ご教授願いたいと思います。 よろしくお願いします。  (jun53)

  Function cellinfo2(adr)

     cellinfo2 = ""
  If InStr(1, adr.FormulaR1C1Local, "=") = 1 Then
     cellinfo2 = "fv"
   ElseIf WorksheetFunction.IsNumber(adr.Value) = True Then
     cellinfo2 = "v"
   ElseIf InStr(1, adr.FormulaR1C1Local, SearchString) = 1 Then
    cellinfo2 = "l"
   ElseIf InStr(1, adr.FormulaR1C1Local, "") = 1 Then
     cellinfo2 = "b"
      End If
  End Function

 たしかにWorksheetFunction.IsBlank を使うと#VALUEになりますね。
 かっこよくはありませんが、とりあえず代案を。
 (kazu)

 Function cellinfo2(adr)
 cellinfo2 = ""
 If InStr(1, adr.FormulaR1C1Loca2, "=") = 1 Then '<-- adr.FormulaR1C1Local
         cellinfo1 = "fv"    ' <-- cellinfo2 が正しい
     ElseIf WorksheetFunction.IsNumber(adr.Value) = True Then
         cellinfo2 = "v"
     ElseIf Len(adr.FormulaR1C1Local) = 0 Then
         cellinfo2 = "b"
     ElseIf WorksheetFunction.IsText(adr.Value) = True Then
         cellinfo2 = "s"
 End If
 End Function

  kazuさん、ありがとうございます。

 一度寝付いたんですが気になって今布団からはい出してきました。

 朝一番で試してみます。 おやすみなさい。


 そうなのです、このWiki掲示板は麻薬性があります。

 気になって何度も何度も見に来てしまいます。

 体を壊さないようにほどほどに活用してください。
(kazu)

 覚醒いたしました(笑)

 3行目を 1字 修正しまして "fv" "v" "s" を認識できましたが、

  "b" は空白のままで返してくれませんでした。

 #VALUE! が出るよりは良いのでこのまま使用させてもらい、

 何とか工夫してみます。 ありがとうございます。  (jun53)


 > 3行目を 1字 修正しまして "fv" "v" "s" を認識できましたが、
 失礼しました。あとで書き直すときにcellinfo2を間違えていました。

 > "b" は空白のままで返してくれませんでした。
 これは考えにくいのですが。

 (kazu)

 私もちょっとやってみました。
 テーマは '(シングルクォーテーション)が検出できるか? です。

 コピペしたら、数式はドラッグしなおしてください。

 > "b" は空白のままで返してくれませんでした。
 なんらかの条件でIFやElseIfがすべて処理されなかった場合、
 cellinfo2="" と初期化しているので、空白はありえると思いますが、
 条件的には必ずどれかにマッチしそうですよね(汗)。
 数式をコピペした後、勝手に再計算されませんので、
 ドラッグしなおすだけで直ったりしません?

 (ramrun)昼休み〜

 Function cellinfo2(adr)
    If IsEmpty(adr.Value) Then
        cellinfo2 = "b"
    ElseIf Left(adr.FormulaLocal, 1) = "=" Then
        cellinfo2 = "fv"
    ElseIf IsNumeric(adr.Value) Then
        cellinfo2 = "v"
    Else
        cellinfo2 = "l"
    End If
 End Function

 kazuさん、大変失礼をしました。 IF条件文で "" にしてました(恥)

 はっきりと  "b" も認識できます。 おっちょこちょいで ごめんなさい。

  ramrunさん、そうなんです。私が目指したのは IF文の "" と

  '(シングルクォーテーション)の空白?と まっさらの空白の見分けがつくか?

 ということだったんですが、これはもう私にとって 夏に雪が降るより不可能だったのです。

 ramrunさんの作もありがたく頂き、使い分けたいと思います。

 Lotus123 から Excel は、しきたり、家風の違う家柄に嫁いだ嫁 の気分で

 あのやり方は違う、この手順はこうだ と注意を頻繁に受け

 本当に怒らすと 口も聞いてくれませんが、何とかなだめて頑張っていきます。

 ありがとうございました。 (jun53)


 とりあえず、うまく収まりましたので、タイトルを少し変えました。
 (kazu)


コメント返信:

[ 一覧(最新更新順) ]


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