• ベストアンサー

EXCELでセルの内容を関数名にできないでしょうか?

EXCEL2000を使用していますが、たとえばA1セルにSUMと入力されているとします。B1~B5まで数値があるとします。 たとえばB列の数値のB6に合計を出すときは、=sum(b1:b5)となりますが、このSUMの部分をA1セルの内容が利用できないものかと悩んでいます。 たとえば、平均を出したいときにA1にAVERAGEと入力すればB6に平均が・・最大値を表示したいならばA1にMAXをという具合にならないものでしょうか? 質問の内容が煩雑で申し訳有りませんが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

myCalcというユーザー定義関数を作ってみました。関数名myCalcは勝手に付けた関数名です。 Evaluateを使っています。subtotalと似た関数になってしまいました。 A1に『SUM』、『AVERAGE』、『MAX』、『MIN』を入力して確認しました。  =myCalc(A1,B1:B5)、  =myCalc("SUM",B1:B5)  =myCalc(A1,B1:B5,D2:D5,Z3)  のようにして使います。  =myCalc(使いたい関数を書いたセル番地,関数で計算するセル範囲1,セル範囲2,セル範囲3・・・)  です。本当のSUM関数のセル指定と同じようにしているつもりです。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入します。 出てきたコードウインドウに下記マクロをコピーして貼り付けます。 ここから ↓ Public Function myCalc(fnc As String, ParamArray Area())   Dim calcArea As Range '計算範囲   Dim L As Integer 'カウンタ   '計算範囲のアドレスを求める   For L = LBound(Area()) To UBound(Area())     If L = LBound(Area) Then       Set calcArea = Area(L)     Else       Set calcArea = Union(calcArea, Area(L))     End If   Next   '実際の計算を行う   myCalc = Evaluate(fnc & "(" & calcArea.Address & ")") End Function

kazh
質問者

お礼

すっ!すご~い!ユーザー定義関数って聞いたことはありましたが、このように使うのですね。奥が深すぎます。あまり内容はわからないままやってみましたが、ばっちりできてしまいました。(きっと普通のことなんでしょうね) 感激です。 このように自在に使えるように精進したいと思います。今後ともよろしくお願いします。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

それに近いことが出来ます。私製版関数を作るのです。 (1)A1にsかmかaかを入力します。 (2)B1からB5に数を入れます。(例1,2,3,4,5)。 (3)Sheet1の画面で、 ALTキーを左手で押したまま、F11キーついでIのキー 次いでMのキーを少し間をおいて押します。VBEのModule1の画面になります。 (4)そこに下記をコピーし、Module1の画面に貼りつけてください。 Function keisan() Dim c As String c = Worksheets("sheet1").Range("a1") Select Case c Case "s" keisan = WorksheetFunction.Sum(Range("b1:b5")) Case "m" keisan = WorksheetFunction.Min(Range("b1:b5")) Case "a" keisan = WorksheetFunction.Average(Range("b1:b5")) End Select End Function (注)上記3箇所の("b1:b5"))は直ぐ上の行の最後にくっ付けてください。 (5)Sheet1の画面のB10セルに「=keisan()」と 入力してください。「()」は省かないように。 (6)A1がsのとき,合計の15    A1がmのとき,最小の1    A1がaのとき,平均の3がセットされます。 もっとs,m,aのほかにメニューを増やすことは可能です。 sをsumのように表現を変えたいとき、上記のどこを変えるかの方法もお判りになるでしょう。 s、m、aを一旦設定後に変えたときのB10セルへの反映は上記では対応出来ていません。お許し下さい。 (7)ただエクセルには、シート枠の外の下部分の「NUM」 と出ている(「コマンド」行)の左辺りに「合計=15」などと出ています。これはこの行で右クリックすると、合計や平均や最小等を1つ選べます。 これでB1からB5等範囲指定すれば、その範囲の合計等が 即座に表示されています。これは使えませんか。

kazh
質問者

お礼

ありがとうございました。すごく参考になりました。 (7)の方法は結果を利用できないのですよね。できるのかな?計算結果を利用してグラフなどに反映し、簡単なシュミレーション(ってほどすごいものじゃないのですが・・・?)を行いたかったので、結果が利用できる方がベストでした。 ユーザー関数についてはもっと勉強してみたいと思います。本当にありがとうございました。

  • comv
  • ベストアンサー率52% (322/612)
回答No.3

こんにちは! SUBTOTAL()関数を使うとそれに近い手法が使えます 例えばA1に1~11の番号を入力  結果を出したいセルに  =IF(AND(A1>0,A1<12),SUBTOTAL(A1,計算範囲),"")  とすれば番号によって各機能計算されます。    (リスト範囲) 番号 同等機能関数  1  AVERAGE  2  COUNT  3  COUNTA  4  MAX  5  MIN  6  PRODUCT  7  STDEV  8  STDEVP  9  SUM 10  VAR 11  VARP 上記のような表を作成して A1にリストで選択させ  =IF(A1="","",SUBTOTAL(MATCH(A1,リスト範囲,0),計算範囲)) としてもよろしいかもしれませんね!

kazh
質問者

お礼

SUBTOTAL関数って初めて見る関数です。かなり、自分のやりたいことに近づいています。ありがとうございました。感謝感謝!です。 今後ともよろしくお願いします。

  • oresama
  • ベストアンサー率25% (45/179)
回答No.2

コンボボックスで関数名を選択できるようにして、 リンクした数によって、VLOOKUPで参照する数式の結果(セル)を引き当てるようにしたらいかがでしょうか? 一枚間にはさむ感じになりますが。。。 最小値、最大値、平均値位だったら VLOOKUPを使わずIFだけでも対応可能ですね。

kazh
質問者

お礼

なるほど!って感じです。 どうもありがとうございました。挑戦してみます。

  • jein
  • ベストアンサー率49% (2799/5705)
回答No.1

数式のほうをセルの文字列から参照するINDIRECT関数は 知っていますが、関数名自体を文字列からひろうことは 聞いたことがありません。できない気がします。 関数名はアルファベットですが文字列とは違いますしね。 INDIRECT関数について http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/JP402/6/53.asp

参考URL:
http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/JP402/6/53.asp
kazh
質問者

お礼

どうもありがとうございました。 まだまだ、エクセル初心者ですので、おまえもっと勉強しろ!というような 質問をするかもしれませんが、末永く&温かく見守ってやってください。