![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.4ベストアンサー
- 回答日時:
こんばんは!
すでに回答は出ていますので、参考程度で・・・
Sub Sample1()
Dim i As Long, cnt As Long, myVal As Variant
For i = 5 To 1000 Step 5
cnt = cnt + 1
myVal = myVal + i
Next i
MsgBox "合計:" & myVal & vbCrLf & "平均:" & myVal / cnt
End Sub
こんな感じでも大丈夫だと思います。m(_ _)m
No.7
- 回答日時:
こんにちは。
私からも、少しアドバイスをさせていただきます。もううんざりしているかもしれませんが。
学校の宿題か何かでしょうか。そして、これは、高校でしょうか、大学でしょうか。
質問の直接の回答なら、
>MsgBox a And x
これを、a & " " & b
とでもすればよい、ということと、Sub の後のプロシージャー名が抜けているということです。
VBEの中で実際に動かせば、分かることです。
だから、こうすればよいわけです。
'---------------
Sub MacroTest1()
For i = 5 To 1000 Step 5
a = a + i
cnt = cnt + 1
Next
x = a / cnt
MsgBox a & " /" & x
End Sub
'-----------------
この書き方は、VBAでなくてもVBScript上でも結果が出るようになっています。
これ以上、何か要求すべきものがあるのか、VBAの習熟度や学習進度によって変わってきます。ただ、私自身は、前回と同じように、If i Mod 5 =0 Then のほうが適しているような気がします。
これは、数学でいう「等差数列」です。
ですから、2の倍数・5の倍数、平均値を出すなど、一応、数学の設問にも答えられるだけのコードが出来ればベストですが、そこまではなかなか行きません。日本では、アメリカの一部の大学のように入門者に高いレベルを要求しません。
それで、ちょっと気になっていたのは、いわゆる「VBAのお作法」のことです。「VBAのお作法」などいらない、という人もいれば、それは大事だという人もいますが、いずれにしても、各人各様で発言し始めると、なし崩しになってしまいます。つまり、全体には直接影響がないけれども、ある程度の経験者がそれを触れないでいると「みっともない」と値踏みされてしまいます。
私が気になった用語。(たぶん、ご質問者さんには、直接関わりのない部分だと思っています。)
「サブルーチン」、「初期化」、「Currency 変数」、「Public ステートメント」
確かに、「サブルーチン」では、「初期化」は必要なんですが……。
どれ一つとっても、昨日・今日覚えた人が必要な「VBAのお作法」ではないと思います。
なお、「等差数列の和」の公式に当てはめると、このようになるかと思います。
まだ、十分な検証をしていませんが、Excelで作られる関数などは、全部、こうした数学で成り立っているとも言えます。
'標準モジュール
Private Function 等差数列(初項 As Long, Optional 末項 As Long, Optional 項数 As Long, Optional 公差 As Long)
Const Opt As Boolean = True '初項を含める(True), 含めない(False)
'項目がないものには、0か、ブランクにする。ただし、初項がないと成り立たない
If 初項 Mod 公差 <> 0 And Opt = False Then
初項 = Int((初項 + 公差) / 公差) * 公差
End If
If 公差 = 0 Then
公差 = (末項 - 初項) / (項数 - 1)
End If
If 末項 = 0 Then
末項 = 初項 + (項数 - 1) * 公差
End If
If 項数 = 0 Then
項数 = (末項 - 初項) / 公差 + 1
End If
等差数列 = 1 / 2 * 項数 * (2 * 初項 + (項数 - 1) * 公差)
End Function
No.6
- 回答日時:
No.2です。
> aの初期化とはどういうことですか?
forループに入る前に a = 0 を行うことを指します。
変数を定義すると自動的に0となりますが、プログラムとしては明示的に初期値を代入しておくことは大切な事です。
ループに使用する変数iはfor文で初期値5を明示的に指定していますので問題無いです。
あ!aに加算した数値の個数を保持する変数を設けた場合はその初期化も忘れずに行うようにして下さい。
参考まで。
No.5
- 回答日時:
後だしジャンケンのようで申し訳ありませんが・・・
>Public Sub ()
サブルーチンの名前が必要です。
(No.3さん が暗黙で指摘)
変数( i や a)の最初に定義しておくこと
(No.3さん が暗黙で指摘)
初期値は0になるが、初期化(初期値を代入しておく)は忘れないこと。
(No.2さん が指摘)
>MsgBox a And x
たぶんこれでは、VBAが理解できない。
っというか、 「And」 は論理和などに使用される別の関数
皆さんが指摘されているように、人間が見てもわかる形式で表示するように、正しく命令する必要あります。
ついでに、No.1さんとNo.3が使用している「&」は、「文字列を足しなさい(つなぎなさい)」という、「and」とは別の意味です。
>5から1000までの5の倍数の合計と平均値を求め
題意から厳密に考えるならば、やはり「For...Next」が基本
「5の倍数」は、If分を使いたいかな?
for......
if i mod 5 = 0 then '5で割ったあまりが0ならば(=5の倍数)
a=a+i ’i を足して
count=count+1 ’足した回数を数えておく(No.1さんとNo.2さん指摘)
end if
next
No.3さんが指摘しているような手抜き(←失礼っ!!)して、コンピュータに楽をさせてやることも必要ですが、
次に「13から987までの7の倍数」とかになると、大変ですよ!
質問者さんも「Step 5」を使用して、ちょっと手抜きしていますが、最初の倍数を探す必要が出てきます。
No.3のようなベテランになると
「出発点の5は最初の倍数、最後の1000も5の倍数だから、手抜きしちゃえーっ」
と考えてもいいですが、まだ早いかな?
>Dim total As Long
【Integer型じゃ足りない。Longで十分かっ!】
>Dim average As Currency
【平均だから、小数点以下が必要だぞっ】
※【】内はかってに代弁しています。
と、わかるぐらいになってからにした方がいいと思います。
それでは、VBAの勉強頑張ってください。
No.3
- 回答日時:
for文するまでもないです。
【値の取得】
5~1000までのうち、5と1000、10と995・・・と1005の数字になる組合せは1000 / 2 / 5 = 100回あります。
よって、値の取得は
(5 + 1000) * (1000 / 2 / 5) = 100500
で導き出されます。
【平均の取得】
5~1000までのうち、step 5である回数は1000 / 5 = 200回あります。
よって、平均の取得は
100500 / (1000 / 5) = 502.5
で導き出されます。
【実装してみる】
Public Sub test()
Const STEP_NUMBER As Long = 5
Const MAX_NUMBER As Long = 1000
Dim total As Long
total = (STEP_NUMBER + MAX_NUMBER) * (MAX_NUMBER / 2 / STEP_NUMBER)
Dim average As Currency
average = total / (MAX_NUMBER / STEP_NUMBER)
MsgBox "合計=" & CStr(total) & ", 平均=" & CStr(average)
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ExcelVBAの、Index matchについて 2 2023/04/18 16:57
- Visual Basic(VBA) VBA*セルに値があればシート名に反映 2 2023/02/21 14:52
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAコードのインデント表示
-
【ExcelVBA】値を変更しながら...
-
時間短縮のために、テキストフ...
-
VBA 別ブックから条件に合うも...
-
Outlookの「受信日時」「件名」...
-
Excel VBA 選択範囲の罫線色の...
-
A列に記載されているフォルダ...
-
Excel 範囲指定スクショについ...
-
VB.net(VB)で、フォームにExcel...
-
Excel VBA 定義されたプロージ...
-
ExcelVBA シート名を複数セルか...
-
エクセルファイルのデータ転記...
-
エクセルのVBAコードについて教...
-
ExcelVBA修正のお願い
-
Excelのマクロについて教えてく...
-
Excelのマクロについて教えてく...
-
VBA ユーザーフォーム ボタンク...
-
VB.netのADOってなんですか?
-
【ExcelVBA】インデックスが有...
-
VBA 別ブックからコピペしたい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザ時間とシステム時間の違...
-
定期的にTomcatを再起動...
-
オープン系、汎用系とは?
-
カルノー図による簡単化
-
論理パレット システムパレ...
-
FLASH8basicでのグラデーション...
-
車載ソフトウェアのプログラム...
-
VBAについての質問です
-
英語での記入の際のNoneとN/Aの...
-
おとなしめ
-
古文 「旅をしぞ思う」の品詞分解
-
古典文法
-
文法
-
「0 < x ≦ y ≦ zである整数x, y...
-
古典の質問です。
-
英語長文を読む際、先に選択肢...
-
古典について 「見」という語の...
-
品詞分解
-
逆関数を持つための条件につい...
-
盗みせむって 盗みすという動詞...
おすすめ情報
for文は必須と考えてください