
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で質問しましょう!
似たような質問が見つかりました
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 3つの倍精度浮動小数点値の平均を求めて、3つの引数全てを平均値に変更するメソッドを作成し、キーボード 1 2022/07/13 16:04
- Java Javaの問題なのですが、 永久ループを使って以下に従って数値を出力するプログラムを作成する。 ・1 3 2023/06/06 18:43
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて見た映画を教えてください!
初めて見た映画を覚えていますか?
-
おすすめの美術館・博物館、教えてください!
美術館・博物館が大好きです。みなさんのおすすめをぜひお聞きしたいです。
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
【お題】斜め上を行くスキー場にありがちなこと
運営も客も一流を通り越して斜め上を行くスキー場にありがちなことを教えて下さい。
-
2から100までの自然数について素数であるか判定したいです。シートのA列には自然数の値、B列には判定
Excel(エクセル)
-
VBAでの素数の求め方
Visual Basic(VBA)
-
VBAのプログラムで、DIAG = 1# / A(L, L) や R(
その他(プログラミング・Web制作)
-
-
4
エクセルマクロで偶数行(又は奇数行)にあるセルを選択したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sprintfについて
-
awkスクリプトでダブルクォーテ...
-
Perl 内で実行される Perl が S...
-
ファイル出力の改行コードをLFに
-
[Perl]ファイル出力のエンコー...
-
DOSコマンドで、標準出力を出力...
-
重複するデータを抽出できる秀...
-
エクセルVBA コードが同じでも...
-
ExcelをCSV書き出す場合のシー...
-
fgets で値が取得できない
-
バッチファイルの作り方(CSV→...
-
VBAでCSVファイルを途中行まで...
-
空白文字 \\f と\\v の違いに...
-
perl ファイルが開かない
-
ReadLineでの読み出し行を指定する
-
[perl5.8] SJISから読み込んだ~と
-
CSVファイルの内容を編集する方...
-
close()で例外が投げられる理由
-
MATLAB グローバル変数の宣言
-
VBAでCSVファイルの特定行を書...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
DOSコマンドで、標準出力を出力...
-
エクセルVBAで素数だけを出力す...
-
重複するデータを抽出できる秀...
-
教えて!perlから.exeファイル...
-
sprintfについて
-
Perl<->Oracle間での文字化けに...
-
[awk]uniq -cで複数ファイルの...
-
Perlでファイルの末尾から指定...
-
文字コードの変換(Shift-JISか...
-
LWPでPOST送信した後に送信先に...
-
[Perl]ファイル出力のエンコー...
-
テキストファイルから日本語部...
-
sprintfで10進数を桁数指定で16...
-
機器のI/OをArduinoでSDに記録...
-
バッチファイルで、記号を含む...
-
CGIから外部コマンド実行時の標...
-
ファイル出力の改行コードをLFに
-
コンソール出力をテキストに出...
-
HTML出力時のprint処理速度につ...
おすすめ情報
たくさんのご回答ありがとうございます!
ご指摘頂いたので一度組んだコードを記載してみようと思います。
①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したいのですが、悩み続けています…。