VBAサンプル集
素数を求めるマクロ

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
最終更新日:2019-05-25

素数を求めるマクロ


素数とは、1 と自分自身以外に正の約数を持たない、1でない自然数のことです、


この素数を求めて、シートに出力するマクロになります。

特に何かに使えると言う事もないので、

PCの計算能力って、どの程度なのかを実感してみるくらいの事でしょうか。


Sub 素数を求める()
  Dim i As Long
  Dim j As Long
  Dim m As Long
  Dim p As Long
  i = 1
  j = 1
  p = 2
  Do
    If 素数判定(p) Then
      Cells(i, j) = p
      i = i + 1
      If i > Rows.Count Then
        i = 1
        j = j + 1
      End If
    End If
    p = p + 1
  Loop
End Sub

Function 素数判定(ByVal p As Long) As Boolean
  素数判定 = False
  Dim m As Long
  If p = 2 Then Exit Function
  For m = 2 To Int(Sqr(p))
    If p Mod m = 0 Then
      Exit Function
    End If
  Next
  素数判定 = True
End Function



注意

このマクロはオーバーフローするまで停止しません。
そこに至るまでの時間は、ものすごーくかかります。
停止する場合は、「Esc」連打等で止めてください。


素数の求め方については、別途調べて頂きたいのですが、


簡単に説明すると、

2からその数までの整数で割り切れるかどうか・・・

割り切れる数がある場合は素数ではなく、

割り切れる数がない場合に素数となります。

ただし、実際には、

2からその数まで確認する必要がなく、

その数の平方根まで確認すれば良い事になります。

これをマクロで書いたものが上記になります。


A列から出力し、最終列までいったら、次の列に進みます。

変数pはLongを使っているので、2,147,483,647を超えた時点で型エラーが発生するはずです。

でもね私のPCでは、時間がかかりすぎて、そこまで確認できていません。

pが億の単位で諦めました。

数が大きくなるに従い、処理時間がかかりますので、

そこから、20億までは、まだまだかかりそうなので中断しました。

PCって、案外大したことないんですよね。



同じテーマ「マクロVBAサンプル集」の記事

WEBデータの取得方法

・サンプルページ ・QueryTables ・InternetExplorer ・MSHTML ・MSXML2 ・WEBデータの取得方法の最後に
右クリックメニューの変更(CommandBars)
・シートモジュールに以下を追加 ・標準モジュールに以下を追加 ・コマンドバー.Controls.Add() ・コントロールのメンバーについて ・CommandBarsの種類
エクセルのアイコン取得(FaceID)
エクセル内のアイコンを取得します。「右クリックメニューの変更」のFaceIdとして使用します。2003までなら、ツールバーが追加されます。2007以降では、リボンのアドインの中に追加されます。ConststartNoAsInteger=1'開始番号を指定 ConststopNoAsInteger=50'終了番号を指…
素数を求めるマクロ
入力規則のリスト入力の妥当性判定
・入力規則に反するデータかの判定Function ・入力規則のリスト入力の妥当性を判定Function ・最後に
配色を使用したカラー設定を固定カラーに変更
Excel2007以降なら配色を選択して作成した場合、作成したシートを他のブックに移すと色が変わってしまいます、そこで、配色ではなくRGB値で色を再設定することで、元々の色をそのままにして、他のブックに移すことが出来るようにします。以下は、この目的で色を再設定するマクロVBAになります。
指定セルに名前定義されているか判定する
・指定セル範囲が何らかの名前定義に含まれているか ・指定セル範囲と同一範囲の名前定義があるか ・すでに設定されている名前定義を削除してから再設定 ・マクロVBAでの名前定義について
Excel2003(xls)を2007以降(xlsx,xlsm)に変換する(HasVBProject)
Excel2003形式(xls)のファイルを、一括でExcel2007以降形式(xlsx,xlsm)に変換するマクロVBAサンプルコードです。サンプルコードでは、サブフォルダ「Excelファイル」にあるxlsを、マクロ無しならxlsx、マクロ有りならxlsmにして保存しています。
ハイパーリンクからファイルのフルパスを取得する
ハイパーリンクのリンク先ファイル情報を取得しようとすると、なかなか難しいことになります、ハイパーリンクからパスを取得すると相対パスとなり、簡単にはファイル情報を取得出来ません。以下のサンプルでは、ハイパーリンクの設定されているセルの右隣のセルに更新日時を出力しています。
ボタンに表示されているテキストを取得(Application.Caller)
メニューのシートを作成して、ボタンを配置、そしてボタンにより指定シートに移動する。よくありますが、ボタン一つずつに別々(移動先のシート毎に)のマクロを作成するのは面倒です、そこで、一つのマクロで済ませる方法の紹介です。Application.Caller Application.Callerは、VBAを呼び出した方…
Excelの表をPowerPointへ図として貼り付け
・Excelの表をPowerPointへ図として貼り付けるVBA ・Excelの表をPowerPointへ図として貼り付けるVBAの解説 ・グラフをPowerPointへ貼り付け ・既にパワーポイントを開いている場合


新着記事NEW ・・・新着記事一覧を見る

数字(1~50)を丸付き数字に変換するVBA|VBA技術解説(2022-11-15)
TEXTAFTER関数(テキストの指定文字列より後ろの部分を返す)|エクセル入門(2022-11-14)
TEXTBEFORE関数(テキストの指定文字列より前の部分を返す)|エクセル入門(2022-11-14)
TEXTSPLIT関数(列と行の区切り記号で文字列を分割)|エクセル入門(2022-11-12)
LAMBDA以降の新関数はVBAで使えるか|VBA技術解説(2022-11-11)
WRAPCOLS関数(1次元配列を指定数の列で折り返す)|エクセル入門(2022-11-08)
WRAPROWS関数(1次元配列を指定数の行で折り返す)|エクセル入門(2022-11-08)
EXPAND関数(配列を指定された行と列に拡張する)|エクセル入門(2022-11-07)
TAKE関数(配列の先頭/末尾から指定行/列数を取得)|エクセル入門(2022-11-06)
DROP関数(配列の先頭/末尾から指定行/列数を除外)|エクセル入門(2022-11-06)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Excelショートカットキー一覧|Excelリファレンス
7.並べ替え(Sort)|VBA入門
8.エクセルVBAでのシート指定方法|VBA技術解説
9.マクロって何?VBAって何?|VBA入門
10.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ