- ベストアンサー
EXCELでセルの内容を関数名にできないでしょうか?
EXCEL2000を使用していますが、たとえばA1セルにSUMと入力されているとします。B1~B5まで数値があるとします。 たとえばB列の数値のB6に合計を出すときは、=sum(b1:b5)となりますが、このSUMの部分をA1セルの内容が利用できないものかと悩んでいます。 たとえば、平均を出したいときにA1にAVERAGEと入力すればB6に平均が・・最大値を表示したいならばA1にMAXをという具合にならないものでしょうか? 質問の内容が煩雑で申し訳有りませんが、よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
それに近いことが出来ます。私製版関数を作るのです。 (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等範囲指定すれば、その範囲の合計等が 即座に表示されています。これは使えませんか。
お礼
ありがとうございました。すごく参考になりました。 (7)の方法は結果を利用できないのですよね。できるのかな?計算結果を利用してグラフなどに反映し、簡単なシュミレーション(ってほどすごいものじゃないのですが・・・?)を行いたかったので、結果が利用できる方がベストでした。 ユーザー関数についてはもっと勉強してみたいと思います。本当にありがとうございました。
- comv
- ベストアンサー率52% (322/612)
こんにちは! 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),計算範囲)) としてもよろしいかもしれませんね!
お礼
SUBTOTAL関数って初めて見る関数です。かなり、自分のやりたいことに近づいています。ありがとうございました。感謝感謝!です。 今後ともよろしくお願いします。
- oresama
- ベストアンサー率25% (45/179)
コンボボックスで関数名を選択できるようにして、 リンクした数によって、VLOOKUPで参照する数式の結果(セル)を引き当てるようにしたらいかがでしょうか? 一枚間にはさむ感じになりますが。。。 最小値、最大値、平均値位だったら VLOOKUPを使わずIFだけでも対応可能ですね。
お礼
なるほど!って感じです。 どうもありがとうございました。挑戦してみます。
- jein
- ベストアンサー率49% (2799/5705)
数式のほうをセルの文字列から参照するINDIRECT関数は 知っていますが、関数名自体を文字列からひろうことは 聞いたことがありません。できない気がします。 関数名はアルファベットですが文字列とは違いますしね。 INDIRECT関数について http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/JP402/6/53.asp
お礼
どうもありがとうございました。 まだまだ、エクセル初心者ですので、おまえもっと勉強しろ!というような 質問をするかもしれませんが、末永く&温かく見守ってやってください。
お礼
すっ!すご~い!ユーザー定義関数って聞いたことはありましたが、このように使うのですね。奥が深すぎます。あまり内容はわからないままやってみましたが、ばっちりできてしまいました。(きっと普通のことなんでしょうね) 感激です。 このように自在に使えるように精進したいと思います。今後ともよろしくお願いします。