A 回答 (3件)
- 最新から表示
- 回答順に表示
No.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と定義しています。
いろいろと長くなったので、わかりづらくなったかも
しれませんが、一度サンプルを動作させて見てください。
なんとなくでも、流れがわかるかもしれませんので。
ではでは。
No.2
- 回答日時:
まず、セルの中の記述は以下のように
=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"の部分が良く解らないのですが、私のマクロ内に記述しても大丈夫なのでしょうか?それともその中身に計算を入れていくのでしょうか?
よろしく御願い致します。
No.1
- 回答日時:
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
自信ありませんがどうでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- Excel(エクセル) エクセルのセル値に対応してマクロを実行する方法を教えてください セルA1が「1」の時にマクロ名「マク 2 2022/06/19 18:45
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) エクセル関数についてお教えください 3 2023/07/24 12:33
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) Excel_マクロ_現在開いているシートにマクロを実行したいです 1 2023/02/14 23:54
- Excel(エクセル) エクセルの自動更新のタイミングについて 1 2022/07/20 16:12
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
エクセルのマクロをセルの値に応じて自動起動したい
Visual Basic(VBA)
-
EXCEL あるセルに数字が入力されれば既存マクロ実行させたい
Excel(エクセル)
-
IF関数を使ってマクロを実行させるには?
Excel(エクセル)
-
-
4
エクセル マクロの実行について
Excel(エクセル)
-
5
セルの値が変ると自動でマクロが実行される。
その他(Microsoft Office)
-
6
”戻り値”が変化したときに、マクロを実行したい
Visual Basic(VBA)
-
7
マクロ 実行ボタンを押さずに常に実行
Excel(エクセル)
-
8
VBAで「セルに何か入っている場合」
Windows Me・NT・2000
-
9
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
10
エクセルでセルに文字が入力されたらマクロを実行
Excel(エクセル)
-
11
EXCELでセルの値が変化したときだけにマクロ実行
Excel(エクセル)
-
12
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
13
【vba】指定範囲の中に任意の文字があるときの条件分岐
Excel(エクセル)
-
14
Enterキーでマクロを起動さす。
その他(ソフトウェア)
-
15
Excelの入力規則で2列表示したい
Excel(エクセル)
-
16
EXCELでワークシートを開いたらマクロを自動実行したい
Excel(エクセル)
-
17
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
18
Excelで、「特定のセルの値が変わったらマクロを実行する」という設定はできないでしょうか。
Excel(エクセル)
-
19
条件に一致したときに画像を表示したいのですが・・。
Excel(エクセル)
-
20
複数の文字列のいずれかが含まれていたらTRUEを返す関数について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelのハイパーリンクにマクロ...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
DataGridViewのセル編集完了後...
-
【Excel VBA】指定行以降をクリ...
-
EXCELで変数をペーストしたい
-
Excel vbaで特定の文字以外が入...
-
【VBA】指定したセルと同じ値で...
-
特定行の色を変えたい(FlexGrid)
-
VBAでセルをクリックする回...
-
EXCELのVBA-フィルタ抽出後の...
-
スプレッドシートの数値列に対...
-
VBAの計算で@が出てしまう件
-
セル色なしの行一括削除
-
3桁または4桁の数値を時刻に...
-
”戻り値”が変化したときに、マ...
-
TODAY()で設定したセルの日付...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
DataGridViewの各セル幅を自由...
-
Sub 要具ライフ() ActiveSheet....
-
【EXCEL VBA】Range("A:A").Fi...
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
おすすめ情報