質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1136閲覧

メインプロシージャ、サブプロシージャについて

torororo

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/06/27 18:30

前提・実現したいこと

大学の授業課題でつまづいています。
メインプロシージャ、サブプロシージャの問題です。

3つの三角形の各辺長を測定したところ,下記の結果が得られた。
ワークシートから三角形の辺長を読み込み,ヘロンの公式
により三角形の面積Sを求めるファンクションプロシージャを
用いて,プログラムを完成させなさい。
メインのサブプロシージャは
値の読み込み,ファンクション
プロシージャとの値の受け渡し,
結果の出力を行い,
ファンクションプロシージャ
は,辺長の値を受け取り,
面積の計算を行い,
メインに戻す。

a b c
三角形A 3 4 5
三角形B 5 12 13
三角形C 13 14 15

このような問題です

発生している問題・エラーメッセージ

Sub ヘロンの公式()
'変数宣言
Dim S As Single
Dim a1 As Integer, a2 As Integer, a3 As Integer
Dim b1 As Integer, b2 As Integer, b3 As Integer
Dim c1 As Integer, c2 As Integer, c3 As Integer

a1 = Range("B2").Value
b1 = Range("B3").Value
c1 = Range("B4").Value
a2 = Range("C2").Value
b2 = Range("C3").Value
c2 = Range("C4").Value
a3 = Range("D2").Value
b3 = Range("D3").Value
c3 = Range("D4").Value

Range("E2").Value = S(a1, b1, c1)
Range("E3").Value = S(a2, b2, c2)
Range("E4").Value = S(a3, b3, c3)

End Sub

Function S(a As Integer, b As Integer, c As Integer, x As Integer) As Single

S = Sqr(x(x - a)(x - b)(x - c))
x = (a + b + c) / 2

End Function

該当のソースコード

試したこと

なんとなく形にしてみたのですが、「配列がありません」などとエラー表示が出てしまいます。

分かる方よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/27 23:11

https://teratail.com/help/avoid-asking > コードをください・デバッグしてください等の丸投げの質問 > 何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、 > 具体的にプログラミングで困っている質問ではないと考え、推奨していません。
guest

回答2

0

ベストアンサー

1.a-c取得時の行と列指定が逆
2.変数名とFunction名が同じ場合は変数の方が優先されるためFunctionを呼び出せない
3.Functionの引数を4つと定義しているのに3つしか渡していない
4.辺長の平均値を求める前に面積を計算しようとしている
5.掛け算の*は省略できない

VBA

1Sub ヘロンの公式() 2 '変数宣言 3 Dim S As Single ' 2.Function名と同じだった 4 '略 5 a1 = Range("B2").Value ' ↑ 6 b1 = Range("C2").Value ' ↑ 7 c1 = Range("D2").Value ' ↑ 8 a2 = Range("B3").Value ' ↑ 9 b2 = Range("C3").Value ' 1.取得時の行と列が逆 10 c2 = Range("D4").Value ' ↓ 11 a3 = Range("B4").Value ' ↓ 12 b3 = Range("C4").Value ' ↓ 13 c3 = Range("D4").Value ' ↓ 14 15 Range("E2").Value = Calc(a1, b1, c1) ' ↑ 16 Range("E3").Value = Calc(a2, b2, c2) ' 2.Function名変更 17 Range("E4").Value = Calc(a3, b3, c3) ' ↓ 18End Sub 19 20Function Calc(a As Integer, b As Integer, c As Integer) As Single ' 3.引数のxは要らない 21 Dim x As Single ' 3.代わりにこっちで宣言する 22 x = (a + b + c) / 2 ' 4.面積の計算前に辺長の平均値を求める必要がある 23 24 Calc = Sqr(x * (x - a) * (x - b) * (x - c)) ' 5.プログラムでは掛け算の*を省略できない 25End Function

投稿2021/06/27 19:12

neconekocat

総合スコア443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torororo

2021/06/27 19:29

ご丁寧な回答ありがとうございます! 助かります! 指示いただいた通りに直してみたところ、プログラムの実行はできたのですが、面積が0になってしまいます、、、 なにがダメなのでしょうか、、
y_waiwai

2021/06/27 21:08

VBAなら実行を止めて変数のナカミを見れるんでは。 それでおかしいところを探してみよう
neconekocat

2021/06/27 22:29

コードをコピペして0になるなら分かりません。 手作業でコード修正してるならそこでミスしてるとかじゃないですかね。 Calc内で面積計算前にxを計算していないとか、最後の"Calc = Sqr(…"の箇所を"S = Sqr(…"のままにしてるとか
guest

0

補足 
サブプロシージャではなくファンクションプロシージャです。
すみません。

投稿2021/06/27 18:35

torororo

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YT0014

2021/06/28 00:09

質問は編集できますので、回答への記述ではなく、質問を修正してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問