「教えて!ピックアップ」リリース!

題名の通りですが、
セルの結果によって、それぞれ違うマクロを実行する事が出来ますでしょうか?
=if(A1=a,macro1,if(A1=b,macro2,if(A1=c,macro3,false)))のようなイメージなのですが。。。

解りにくければ、補足させて頂きますので宜しくご教授ください。御願い致します。

A 回答 (3件)

ちょっとマクロの説明をしておきます。



まず、マクロを使用するにはボタンを押した時に
色をつけたり計算をさせたりするよく質問されている
マクロと今回のケースのように関数として使用
するマクロがあります。

前者のケースではマクロの定義は
例)
Sub test()
・・・
End Sub
となりますが、関数として使用する後者では

例)
Function test() as String
・・・
End Function
と定義するようになります。
※as Stringは固定定義ではありません。

ここで、SubとFunctionの違いですが簡単には
戻り値があるかないかと言うことです。

rikamiさんは数式の関数としてマクロを使用したいと言う
ことなのでFunctionで定義して使用するようになります。

-------------------------------------------------

補足の「"macro1 - Test"の部分が・・・」ですが前回
回答した例題は、戻り値をStringとしているので戻り値
のサンプルとしてを"macro1 - Test"と定義しています。
ですのでここは変更してもらって構いません。

>…それともその中身に計算を入れていくのでしょうか?
はい、そのようになります。

ですが、ここで注意点です。Functionの中ではセルを
指定して値の入力はする事が出来ません。
例)
….Cells(1.1).Formula = "B1 + C1"
※このような定義は出来ません。

ですので、実際の計算をFunction内で済ませておいて
結果を返すようになります。

それを含めて再度サンプルを記述させていただきます。

○サンプルの説明
セル(A1)に"a"を入力すると、セル(D1)の結果は、7
セル(A1)に"b"を入力すると、セル(D1)の結果は、3
セル(A1)に"c"を入力すると、セル(D1)の結果は、10
セル(A1)に上記以外を入力すると、セル(D1)の結果は、"FALSE"
となります。

○サンプル
以下のような表があるとします。

・表
  A   B   C   D
1  a   5   2   (*A)

※*Aは、以下の数式を使用します。
=IF(A1="a",macro1(),IF(A1="b",macro2(),IF(A1="c",macro3(),FALSE)))

・マクロの定義
Function macro1() As Single
  'セル(B1)とセル(C1)の和
  macro1 = Cells(1, 2) + Cells(1, 3)
End Function

Function macro2() As Single
  'セル(B1)とセル(C1)の差
macro2 = Cells(1, 2) - Cells(1, 3)
End Function

Function macro3() As Single
  'セル(B1)とセル(C1)の積
macro3 = Cells(1, 2) * Cells(1, 3)
End Function

※今回は、文字ではなく数値(整数,負数,少数を含む)を返す
のでmacro1,macro2,macro3はas Singleと定義しています。


いろいろと長くなったので、わかりづらくなったかも
しれませんが、一度サンプルを動作させて見てください。
なんとなくでも、流れがわかるかもしれませんので。

ではでは。
    • good
    • 0

まず、セルの中の記述は以下のように



=if(A1=a,macro1(),if(A1=b,macro2(),if(A1=c,macro3(),false)))

マクロは以下のように記述すれば出来ます。

Function macro1() As String
macro1 = "macro1 - Test"
End Function

Function macro2() As String
macro2 = "macro2 - Test"
End Function

Function macro3() As String
macro3 = "macro3 - Test"
End Function

望んでいる程度がわからないのでこの程度しか
回答できないです。

この回答への補足

投稿ありがとうございます。
行いたい事は、エクセルのシート上で、trueのある位置によって、"A""B""C"と返すようになっていて、その"A""B""C"の値によって、それより下のセルの計算方法が違ってくる。と言うものです。

"macro1 - Test"の部分が良く解らないのですが、私のマクロ内に記述しても大丈夫なのでしょうか?それともその中身に計算を入れていくのでしょうか?

よろしく御願い致します。

補足日時:2003/04/02 20:39
    • good
    • 2

Function bunki()


If Range("A1") = "a" Then
Call macro1
ElseIf Range("A1") = "b" Then
Call macro2
ElseIf Range("A1") = "c" Then
Call macro3
End If
End Function

自信ありませんがどうでしょうか?
    • good
    • 3

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング