VBAを学習中の初心者です。
学習の一環として素数を求めるプログラムを作成しているのですが苦戦しています。
過去質問に同じようなものが見当たらなかったので質問させて頂きます。
指定した数までの素数だけをDebug.Printで出力するプログラムを組みたいです。
引数を素数か否か判定し返すFunctionとその結果を出力するかしないか決めるプログラムは組めたのですが、素数だけを選んで出力するというプログラムがどうしても分からず苦戦しています。
今組んでいるプログラムでは、引数が素数じゃなかった場合何も出力せず、素数だった場合その数までの全ての数字(引数が7だったら2,3,4,5,6)が出力されてしまうという状態です。
ここから素数だけを出力できるようにするにはどうコードを書いたらいいのでしょうか?
できれば解答ではなく、ヒントを教えて頂けるととても嬉しいです。
宜しくお願いします。
No.7ベストアンサー
- 回答日時:
あなたが作ったプログラムは、ほぼ合ってますが、細かいところででのケアレスミスがあります。
以下、きちんと動作するプログラムです。あなたが、作ったプログラムに修正を多少加えました。
----------------------------------------------
Sub Main()
Call Sosu(7)
End Sub
Sub Sosu(ByVal max As Integer)
Dim n As Integer
n = 2
Do While n <= max
If IsPrime(n) = True Then
Debug.Print n
End If
n = n + 1
Loop
End Sub
Function IsPrime(ByVal n As Integer) As Boolean
Dim x As Integer
Dim sho As Integer
Dim amari As Integer
For x = 2 To n
amari = n Mod x
sho = n \ x
If amari = 0 Then
If sho = 1 Then
IsPrime = True
Else
IsPrime = False
End If
Exit Function
End If
Next x
End Function
---------------------------------
実行結果
2
3
5
7
-------------------------------
ご回答頂きありがとうございました!
いろいろなことを教えて頂き、大変参考になりました。
まだエクセルVBAの勉強は始めて一週間ほどでまだフローチャートも覚束ない有様なので、
今後きちんとプログラムが組めるようになったら9番さんから教えて頂いたサイトの問題にも挑戦したいと思います。
ベストアンサーは問題点を指摘して頂いた5番さんとすごく悩んだのですが、
結果答えを教えて頂く形になりましたが自分が今どこが分からないのか、何を知らないのかを知るきっかけを下さった7番さんにしたいと思います。
\演算子を使う考えが全く浮かばなったので、まだまだ基礎がボロボロですね…。
皆様本当にありがとうございました!
頂いた解答を複数個お気に入りするみたいな機能欲しいです。。。
No.9
- 回答日時:
数学は好きですか?ある程度習熟して、
integerの最大値はいくら?
このマクロ、どの位時間掛かる?やり方変えよう
等を考えつつマクロを作るようになったら、挑戦してみて下さい。
https://projecteuler.net/archives
No.8
- 回答日時:
こんばんは!
横からお邪魔します。
ごくごく単純にやってみました。
Sub Sample1()
Dim i As Long, k As Long, str As String
For i = 2 To 7 '← 7までの整数//
For k = 2 To i
If i Mod k = 0 Then Exit For
Next k
If i = k Then
str = str & i & ","
End If
Next i
Debug.Print Left(str, Len(str) - 1)
End Sub
※ 余計なお世話だったらごめんなさいね。m(_ _)m
No.6
- 回答日時:
スマートフォン andoroidのものですが
RFO-BASIC
です。
OPTION ARITHMETIC DECIMAL_HIGH
LET FN$="素数.csv"
OPEN #1:NAME fn$
ERASE #1
PRINT #1:"n,n^n+1,素数,桁数"
FOR N = 1 TO 20
LET flag = 0
FOR i=2 TO n/2
LET a = n/i
LET b = INT(a)
IF a = b THEN
REM PRINT "not 素数ではない。"
LET flag = 1
EXIT FOR
END IF
NEXT i
IF flag = 0 THEN
PRINT #1:n
END IF
NEXT n
CLOSE #1
END
No.5
- 回答日時:
こんばんは。
私がコードを出してしまったら、自力解決のヒントにはなりませんが、出されたコードはエラーを出しますよね。
それは分かっていますね。
後はポイントだけを指摘しておくことにします。
Sub Sosu の中
If IsPrime(7)=True Then '引数になぜ定数を入れるの?そこは、変数のはずです。
n=n+1 'If構文の中に入れたら、進んでいきません。
If 構文の締めは、End If
Function IsPrime
Next I 'I であるはずがありませんね。
以上で問題なく動くはずです。
No.4
- 回答日時:
1:指定の数を変数Aにセット。
(A=7)2:引数を素数か否か判定し返すFunctionに変数Aを渡し、結果を変数Bにセットする。
3:結果を出力するかしないか決めるプログラムの結果を変数Cにセットする。
4:変数Cが出力の場合、素数を選んで出力するプログラム。(2,3,4,5,6)
となっていませんか?
以下のようにすればどうでしょう?
1:指定の数を変数Aにセット。(A=7)
2:変数Bに1をセットする。
3:引数を素数か否か判定し返すFunctionにBを渡し、結果を変数Cにセットする。
4:変数Cで、素数だった場合、変数Bを表示する。
5:変数Bをカウントアップ(+1)する。
6:変数Bが変数A以下だったら、3に戻って繰り返す。(2~7)
No.3
- 回答日時:
こんにちは。
>できれば解答ではなく、ヒントを教えて頂けるととても嬉しいです。
素数か否か判定するのでしたら、Boolean型だと思いますが……。
以下は、Boolean型のユーザー定義関数(User defined function)とした場合です。
これでうまくいかないなら、コード全部を見せたほうが早いですね。
For i =1 To 目的の数まで
If 判定Function(i) Then 'True の時のみ
buf = buf & "," & i
End If
Next i
Debug.Pring buf
でも、ここらが書けないで、素数の出力を出すというのは、VBAの勉強とはかなり違う所にいるような気がします。
確か、ここのカテゴリで、素数の質問は数年前にあった気がします。
No.2
- 回答日時:
指定した数が十分小さいならば、
判定し返すFunctionを、1から指定した数まで繰り返し実行して、素数の引数だった場合だけ出力する
指定した数が膨大ならば、
効率的に実行するために先達のアルゴリズムを取り入れる
例) エラトステネスの篩
https://ja.wikipedia.org/w/index.php?search=Siev …
No.1
- 回答日時:
数:xが与えられたとき、それが素数かどうか、判定する方法
2からxまで、変数:zについて1つづ増加させ、以下の処理を繰り返す。
1.x÷zの商と余りを求める。
2.余りが0でない場合は、割り切れないので、次の繰り返しへ
3.余りが0で、商が1の場合は、素数になる。(自分自身以外に割りきれないから)
4.余りが0で、商が1以外の場合は、素数でない。
実際に確認していませんが、上記でやってみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
【お題】 ・存在しそうで存在しないモノマネ芸人の名前を教えてください
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
CDの保有枚数を教えてください
ひとむかし前はCDを買ったり借りたりが主流でしたが、サブスクで簡単に音楽が聴ける今、CDを手に取ることも減ってきたかと思います。皆さんは2024年現在、何枚くらいCDをお持ちですか?
-
自分のセンスや笑いの好みに影響を受けた作品を教えて
子どもの頃に読んだ漫画などが その後の笑いの好みや自分自身のユーモアのセンスに影響することがあると思いますが、 「この作品に影響受けてるな~!」というものがあれば教えてください。
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
VBAでの素数の求め方
Visual Basic(VBA)
-
2から100までの自然数について素数であるか判定したいです。シートのA列には自然数の値、B列には判定
Excel(エクセル)
-
素数の調べ方
数学
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
sprintfについて
-
perlでcsvの出力について
-
Perl中で teeを使っても戻り値...
-
Perlの部分的なHTML出力
-
ReadLineでの読み出し行を指定する
-
where can I buy snowbord in t...
-
Visual C++を用いたシリアル通信
-
拡張子 ”log” と ” dat” の違い
-
Perlでファイルの列を削除する。
-
JSP URLに表示される拡張子 .jsp
-
ディレクトリ名を取得したい
-
vba dir の相対パス
-
perlで、後ろの行を読んで、前...
-
動画像から静止画を取り出すには
-
drtファイルはどうしたら開...
-
perl system関数 引数 フォルダ
-
Net-Snmpのtraphandleよりshell...
-
VBA テキストファイルを読み取...
-
エクセルVBA コードが同じでも...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
sprintfについて
-
教えて!perlから.exeファイル...
-
DOSコマンドで、標準出力を出力...
-
重複するデータを抽出できる秀...
-
エクセルVBAで素数だけを出力す...
-
コンソール出力をテキストに出...
-
log2の「正確な」計算方法
-
perlでの出力先設定
-
sprintfで10進数を桁数指定で16...
-
Perl 内で実行される Perl が S...
-
オーバーラップ計算法について
-
CGIから外部コマンド実行時の標...
-
perlでcsvの指定フィールドに書...
-
テキストファイルから日本語部...
-
$FTP ->lsについて
-
[Perl]ファイル出力のエンコー...
-
perlで半角カナを検索するには...
-
Perlからsyslog経由でログを出...
-
Perl<->Oracle間での文字化けに...
おすすめ情報
たくさんのご回答ありがとうございます!
ご指摘頂いたので一度組んだコードを記載してみようと思います。
①Sub Main()
Call Sosu(7)
End Sub
②Sub Sosu(ByVal max As Integer)
Dim n As Integer
n=2
Do While n < max
If IsPrime(7)=True Then
Debug.Print n
n=n+1
Loop
End Sub
③Function IsPrime(ByVal n As Integer)As Boolean
Dim x As Integer
For x=2 to n-1
If n Mod x = 0 Then
IsPrime = False
Exit Function
Else
IsPrime = True
End If
Next I
End Function
①がメインのプロシージャ、②が③で返ってきた判定を出力するプロシージャ、③は指定数を素数か否か判定して返すプロシージャです。
③で素数かどうか判定した数を②で出力するか否か決め、素数だった数字のみDebug.Printしたいのですが、悩み続けています…。