[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セル内で数値と式を判別する関数は?』(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
早速試してみましたが、希望通りの結果で大感激です。
せっかくですから、関数名に HN を使わせてもらい add-in しました。
TORIさん、ありがとうございます。 先頭の "=" を認識させようと、
=IF をあれこれひねり回したのですが、 GET.CELL を使うのですね。
ご指導通りの手順で作業したのですが、GET.CELL は 私の環境では
今ひとつうまくいかず、使えないようなのです。
前回 興味を持ったので、色々やってみたんですが認識してくれず
私の操作ミスだろうと思い後回しになり未だそのままです。
今後の研究にしたいと思います。
前述したとおり、Excel2000 に移行途中なので(全体の3分の1程度)
今後もご迷惑をおかけするかもしれませんが、
皆様 よろしくお願いします。 有り難うございました。 (jun53)
=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
一度寝付いたんですが気になって今布団からはい出してきました。
朝一番で試してみます。 おやすみなさい。
そうなのです、この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
はっきりと "b" も認識できます。 おっちょこちょいで ごめんなさい。
ramrunさん、そうなんです。私が目指したのは IF文の "" と
'(シングルクォーテーション)の空白?と まっさらの空白の見分けがつくか?
ということだったんですが、これはもう私にとって 夏に雪が降るより不可能だったのです。
ramrunさんの作もありがたく頂き、使い分けたいと思います。
Lotus123 から Excel は、しきたり、家風の違う家柄に嫁いだ嫁 の気分で
あのやり方は違う、この手順はこうだ と注意を頻繁に受け
本当に怒らすと 口も聞いてくれませんが、何とかなだめて頑張っていきます。
ありがとうございました。 (jun53)
とりあえず、うまく収まりましたので、タイトルを少し変えました。 (kazu)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.