アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

ある文字列について、特定文字以外が含まれている場合に取り除く関数

正規表現を使わない書き方。
例えば「ある文字列について、半角英数以外の文字を削除したい」という場合などに。

'*
'* StrFilter
'* ある文字列について、特定文字以外が含まれている場合に取り除く(もしくは置換する)関数
'*
'* [in]  sStr     対象文字列
'*       sInstead 置換する文字(指定がなければ空、つまり特定文字以外を削除する)
'* [out] 処理後の文字列
'* 
Private Function StrFilter(ByVal sStr As String, Optional ByVal sInstead As String = "")
    
    Dim i As Long
    Dim sFilter As String

    ' フィルタ文字列(含まれてよい文字をすべて記載)
    sFilter = "abcdefghijklmnopqrstuvwxyz0123456789"
    
    ' 対象文字列を1文字ずつ順番に参照
    StrFilter = ""
    For i = 1 To Len(sStr)
        If InStr(sFilter, Mid(sStr, i, 1)) Then
            StrFilter = StrFilter & Mid(sStr, i, 1)
        Else
            StrFilter = StrFilter & sInstead
        End If
    Next
    
End Function

呼び出し元は例えばこんな感じ。

' 「bchoge1」が表示される
Debug.Print StrFilter2("Abc_hoge_1")

' 「*bc*hoge*1」が表示される
Debug.Print StrFilter2("Abc_hoge_1", "*")

htpasswdでつまづいた件

※ほとんどネタ記事です。ちゃんとヘルプを読もうね、という話。


basic認証のユーザーを追加することになったのでググる

「よし、htpasswdというコマンドを使うんだな!」
「使いそうなオプションはbとmとnあたりかな!」
(※ b:パスワードを引数に渡すことができる
   m:md5でハッシュする
   n:実際には追加されず、確認用の表示だけする)

ということで試してみる。

対象のディレクトリへ移動。

cd /etc/httpd/conf/

まずは怖いのでパスワード用ファイルをコピー。

# cp .htpasswd .htpasswd_bk

これで壊れてもたぶん大丈夫。

よし、ググった情報を参考にさっそくコマンドを打ってみよう!

# htpasswd -b -m -n .htpasswd testuser testpass

どれどれ…

Usage:
        htpasswd [-cmdpsD] passwordfile username
        htpasswd -b[cmdpsD] passwordfile username password

        htpasswd -n[mdps] username
        htpasswd -nb[mdps] username password
 -c  Create a new file.
 -n  Don't update file; display results on stdout.
 -m  Force MD5 encryption of the password.
 -d  Force CRYPT encryption of the password (default).
 -p  Do not encrypt the password (plaintext).
 -s  Force SHA encryption of the password.
 -b  Use the password from the command line rather than prompting for it.
 -D  Delete the specified user.
On Windows, NetWare and TPF systems the '-m' flag is used by default.
On all other systems, the '-p' flag will probably not work.

いや使い方なんか聞いてねーし。
でもなんか間違えてるってことだよな…

つーかオプションは別にまとめてもいいよね。

# htpasswd -bmn .htpasswd testuser testpass

とりあえずまとめた。

Usage:
        htpasswd [-cmdpsD] passwordfile username
        htpasswd -b[cmdpsD] passwordfile username password
(以下略)

まあそうだよね!!!

その後もいろいろ試す。

オプションを入れ替えたり

# htpasswd -nbm .htpasswd testuser testpass

md5やめてデフォルトにしてみたり

# htpasswd -nb .htpasswd testuser testpass

オプションを消してみたり

# htpasswd .htpasswd testuser testpass

既にrootなのにsudoつけてみたり

# sudo htpasswd -n .htpasswd testuser testpass

何故か中途半端にオプション分けてみたり

# htpasswd -nb -m .htpasswd testuser testpass

パスワードを引数にするオプションとパスワードを外してみたり

# htpasswd -n .htpasswd testuser

ファイル名書き忘れたり

# htpasswd -bm testuser testpass

ファイル名書き忘れたままmd5オプション消してみたり

# htpasswd -b testuser testpass

さらにパスワードも消えたり

# htpasswd -b testuser

あっやべえいつの間にかnオプション消してたわ、と書き換えたり

# htpasswd -n testuser

New password:

…ん!?
なんか出た!!

Re-type new password:

これは!!!

testuser:qwertyuiop@[

初めて成功したのでは!!!!

意気揚々と.htpasswdをcatするが、増えてない。

なんでや!と思って自分の書いたコマンドをよく読む。
…ファイル名抜けてるじゃん!!!!!(ここで初めて気づいた)
というかそもそもnオプションついてるもんね!!!(明らかに疲れている)

もうね。アボカド。バナナかと。(古い)

nオプションのおかげでどこも書き換わったりはしていないのが救い。

でもこの一歩は大きい。
今度はきちんとファイル名指定しよう。

# htpasswd -n .htpasswd testuser
Usage:
        htpasswd [-cmdpsD] passwordfile username
        htpasswd -b[cmdpsD] passwordfile username password

        htpasswd -n[mdps] username
        htpasswd -nb[mdps] username password
 -c  Create a new file.
 -n  Don't update file; display results on stdout.
 -m  Force MD5 encryption of the password.
 -d  Force CRYPT encryption of the password (default).
 -p  Do not encrypt the password (plaintext).
 -s  Force SHA encryption of the password.
 -b  Use the password from the command line rather than prompting for it.
 -D  Delete the specified user.
On Windows, NetWare and TPF systems the '-m' flag is used by default.
On all other systems, the '-p' flag will probably not work.

…。

……。

なんでや!!

まあ確かに全く同じコマンドを既に試しているな…と脱力。
えーもうやだー…と思いながらこのヘルプのようなものをぼけっと眺めているとあることに気付いた。

htpasswd [-cmdpsD] passwordfile username

htpasswd -n[mdps] username

…nオプション付けたらファイル名指定不可なのか…orz

orz

ということで、迷走しまくった挙句、最終的に

# htpasswd .htpasswd testuser

という、どシンプルなコマンドで解決したのでした。おしまい。
md5すら不要だった)




いくら英語嫌いでも、コマンド例くらいは見ようね!!

orz




…間違ったコマンドまみれの記事なので、せめてきちんと動作するコマンド例も置いとこ…

カレントディレクトリ以下にある「.htpasswd」に「testuser」ユーザーを追加する
パスワードは後から2回聞かれる
mを追加するとmd5ハッシュ

# htpasswd .htpasswd testuser
# htpasswd -m .htpasswd testuser

「testuser」ユーザーを追加しようとすると実際に何が追加されるのかプレビューされる
パスワードは後から2回聞かれる
mを追加するとmd5ハッシュ

# htpasswd -n testuser
# htpasswd -nm testuser

bオプションを使用して、IDとパスワードの両方を引数に渡すことができる
mを追加するとmd5ハッシュ

# htpasswd -b .htpasswd testuser testpass
# htpasswd -bm .htpasswd testuser testpass

番外:ユーザーを削除する

# htpasswd -D .htpasswd testuser

ExcelVBA入門 #10:定数を定義することとそのメリット

はじめに

久しぶりの記事追加です。
今回は、地味ながらもプログラミング言語問わずの人気者、「定数」について。

定数って何?

もしかしたら、中学か高校かの数学の時間に聞いたことがあるかもしれません。
それとだいたい同じで、「値が変化しないもの」です。

ちょっとVBAで書いてみましょう。
商品価格に消費税を加えた合計金額を計算するプログラムです。

Public Sub calcSum()
    Dim lSum As Long
    Dim lItemPrice1 As Long
    Dim lItemPrice2 As Long
    
    lItemPrice1 = Range("A1").Value
    lItemPrice2 = Range("A2").Value
    
    lSum = 0
    lSum = lSum + lItemPrice1 * 1.08
    lSum = lSum + lItemPrice2 * 1.08
    
    MsgBox "合計は" & lSum & "円です。"
End Sub

ここで、「1.08」は定数です。
セルのアドレス「A1」と「A2」も定数といえます。

これで何か問題あるの?

さて、ここで消費税が10%になったら…?
「1.08」を「1.1」に書き換える必要がありますね。
商品価格を保存するのが「A1」「A2」以外のセルになったら…?
これも「A1」「A2」を別のセルに変える必要がありますね。
数行しかないプログラムなのでまだともかく、ちょっと大きなものになると、全部書き換えるのは大変なことです。

じゃあどうすればいいの?

プログラムを最初から以下のようにしておきます。

Const TAX As Double = 1.08
Const ITEM_1_RANGE As String = "A1"
Const ITEM_2_RANGE As String = "A2"

Public Sub calcSum()
    Dim lSum As Long
    Dim lItemPrice1 As Long
    Dim lItemPrice2 As Long
    
    lItemPrice1 = Range(ITEM_1_RANGE).Value
    lItemPrice2 = Range(ITEM_2_RANGE).Value
    
    lSum = 0
    lSum = lSum + lItemPrice1 * TAX
    lSum = lSum + lItemPrice2 * TAX
    
    MsgBox "合計は" & lSum & "円です。"
End Sub

関数の前の「Const [定数名] As [型] = 値」で、定数を定義しています。
それから、消費税やセルのアドレスが入っていたところで、定義したものを用いるよう変更しています。
最初に定義しておけば、プログラム中に何度出てきても、変更するときは定義部分だけで済むのです。

尚、定数は最初に書いたとおり「値が変化しないもの」なので、
ここで定義した定数は、プログラム中で変更することはできません。

Const TAX As Double = 1.08

Public Sub calcSum()
    ' だめ(エラーになります)
    TAX = 1.1
End Sub

今回の例のように、
「(いつか変更する可能性はあるけれど)プログラムの動作中には変わらない数字や文字」を定義すると良いです。

おしまい

コード中に直接埋め込まれている数字を「マジックナンバー」と呼びます。
(一般的にはどうか知りませんが、新入社員の頃にそういう話を聞きました)
「なんの数字かわかんないけどちゃんと動く!不思議!」という皮肉を込めての呼び名だそう。

たしかに定義なんてしなくてもプログラムは動くわけですが、そのうち痛い目を見ます。
簡単なプログラムを書いているうちから、定義して使う癖をつけておくとよいかもしれません。

秀丸マクロの登録方法

気が付いたら今までの人生30年の半分は秀丸にお世話になっていました。

中学生の頃から親のPC使ってネットで二次創作小説を探しては秀丸にコピペ、フロッピーディスクに移して自分のPCへ。
自分のPCでもまた秀丸を開いて読み漁る…というオタク。


それはともかく、仕事を始めてからは作業の効率化を図るのに欠かせないのが秀丸マクロになっています。

マクロコードの記事は既にいくつか書いていますが、そもそも作り方をきちんと書いていなかったので残しておきます。

↓マクロのコードサンプル記事はこちら
honey8823.hateblo.jp

①マクロを作って保存

内容は省略しますが。

マクロを書いたら「.mac」という拡張子で保存します。
秀丸で「名前を付けて保存」しようとすると、ファイルの種類としても選択可能です。

保存先はどこでも良いのですが、
マクロファイル用のフォルダは用意されているのでそこに保存するのがベターでしょう。
(保存先のパスはマクロ登録画面で確認できます。詳しくは後述)

②保存したマクロを秀丸に登録

マクロを使うには、秀丸からマクロ登録する必要があります。
メニューバーの マクロ>マクロ登録 を選択すると、以下のような画面が出てきます。

マクロ登録画面
f:id:honey8823:20170120144022p:plain

一番下に書かれているのがマクロファイル保存用のフォルダです。

  • タイトル:任意のタイトルを入力
  • ファイル名:マクロを選択(上記のフォルダ以外にある場合は「...」から選択)
  • 編集:マクロの中身を編集できる

登録したいファイル名を指定して「OK」すれば登録完了です。
1~10に登録したマクロは、「Ctrl+番号(10の場合は0)」で実行できるようになります。

③登録したマクロにショートカットキーを割り当てる

「Ctrl+番号」でも充分便利なのですが、ファンクションキーやマウス操作などに割り当てることもできます。

メニューバーの その他>キー割り当て で設定可能です。
f:id:honey8823:20170120145140p:plain

左側でShift、Ctrl、Altとキーやマウス操作との組み合わせを選び、
右側で割り当てる処理を選びます。上のセレクトボックスを「メニュー/マクロ」にすると、②で登録したマクロが選べるようになります。

もともといろいろな機能が割り当てられているので、普段使っている機能をうっかりつぶさないように気を付けましょう。

駅メモ #18:あけましておめでとうございます

年末年始は愛媛まで行ったり福島まで行ったり。
新駅はそんなに取れていませんが、ミクさんのイベントや駅奪取のイベントがそこそこ進んだので良かったかな。

晴れ着ラッピング…ずるい…かわいい…
とりあえずふぶさんが出るまで回しました。

進捗:前回(12/26)からの比較

  • 駅 3102 → 3134(+32)
  • 路線 373 → 375(+2)
  • 都道府県 31 → 31(+0)
  • コンプ路線 177 → 179(+2)

育成進捗 ()内は前回比

  • [S]ふぶ 68/75 (Lv3up / 上限10up)
  • [S]しぐれ 22/75 (Lv6up / 上限5up)
  • [T]みらい 10/75 (上限5up)
  • [D]ありす 73/80 (上限5up)
  • [S]ミオ 6/80 (上限10up)
  • [D]くに 29/65 (Lv23up)
  • [A]ハル 8/60 (上限5up)
  • [S]アサ 70/75 (上限5up)
  • [S]カノン 19/55 (Lv14up)
  • [S]スピカ 46/55 (Lv4up)
  • [D]なほ 7/55 (上限5up)
  • [S]ヒメギ 1/55 (new!)

未所持

  • なつめ
  • ノア

その他進捗はこちら。
駅メモ:でんこ育成状況とコンプ進捗状況 - アナログCPU:5108843109

福袋を全部買い占めた結果、推し(ふぶ・いずな・ありす・アサ)が全員出てきたり新規ヒメギさんが出てきたりと非常に良かったです。買ってよかった。ノアどの出なかったけど。
スカウトチケットは誰に使うか悩んで温存中。


自分用育成メモ:

引き続きサポーター(+いろは・くに)育成強化中。

まずは久々に上限突破できたふぶさん・アサさんが最優先。

…なんですけど、やっぱりサポーター強化するにしてももっと厳選すべきかと考え中。

アサ・うらら・いろは あたりは入れ替えて使うのでノーカンとして、他に5人選ぶとすれば
ふぶ・スピカ・もえ・みこと・しぐれ…かな。
1人をサポートするだけならみこと・しぐれは両立しないので、あと1人…迷うけどセリアかなあ。
次点以降は ひいる>カノン>レイカ>ヒメギ>ミオ くらいの感じ。
3番目強化のミクさんと姉専用のくにさんは別枠。

そうすると、

  • カンスト目指して最優先:ふぶ>アサ
  • Lv50目指してリンクスコア中心:スピカ>(くに)
  • APorHPが200を超えるまで新駅ボーナス中心:いろは>みこと>しぐれ>セリア
  • カンスト済み:もえ)
  • (Lv50になったので当分保留:うらら)

という感じか。

駅メモ #17:プレイ開始1周年を過ぎて

12月3日にプレイ開始して365日目を迎えました。
f:id:honey8823:20161226160741p:plain:w400

f:id:honey8823:20161226160840p:plain:w400
瞬間的にですがデイリー1位ゲット。
(ログインして確認した瞬間は同じく365日目の旦那と並んで2位&3位だったところを、いくつかレーダー飛ばして無理矢理1位に…)

f:id:honey8823:20161226161057p:plain:w400
7892人目?くらいでした。

ということでこの日はデイリーランキング上位を目指す旅へ。

f:id:honey8823:20161226161154p:plain:w400
f:id:honey8823:20161226161243p:plain:w400
f:id:honey8823:20161226161517p:plain:w400
あとはスクリーンショット取り忘れましたがキングオブメモリー共感もゲット。

そんなこんなでデイリーランキングチャレンジは5位でした。
f:id:honey8823:20161226162314p:plain:w400

しかし1年…早いものです。
今見直してみると、最初はルナを選び、
1日目と2日目で レイカ・コタン・もえ・ふぶ を引いている…
もしかしてそこそこ引きが良かったのでは。
特にふぶさん・もえさんは1年間ずっと支えてくれていて大変助かってます。
ふぶさん最初から今までずっと嫁だよ(真顔)なかなか上限突破できないけど…



あとは、れいこさんのお仕事回数が5000を突破。
「れいこがいればなんでもできる」一番乗りいただきました。
f:id:honey8823:20161226162355p:plain:w400

次は10000回ですが…さすがにグランクラスの子を5000回使い続けるのはちょっとつらいかな…。


ミクさんを普通に育成してたらAPが低すぎて称号がどんどん溜まるのでこちらも記録してみましたが…ライバルが多すぎるw
f:id:honey8823:20161226162627p:plain:w250f:id:honey8823:20161226162630p:plain:w250
f:id:honey8823:20161226162633p:plain:w250f:id:honey8823:20161226162638p:plain:w250
f:id:honey8823:20161226162644p:plain:w250


進捗:前回(11/30)からの比較

  • 駅 2945 → 3102(+157)
  • 路線 371 → 373(+2)
  • 都道府県 30 → 31(+1)
  • コンプ路線 171 → 177(+6)

育成進捗 ()内は前回比

  • [T]いろは 35/60 (Lv1up)
  • [T]ダッチュー 50/55 (上限5up)
  • [S]スピカ 42/55 (Lv9up)
  • [D]なほ 7/50 (Lv6up)
  • [S]ミク 41/55 (new!)

未所持

  • なつめ
  • ヒメギ

その他進捗はこちら。
駅メモ:でんこ育成状況とコンプ進捗状況 - アナログCPU:5108843109


自分用育成メモ:

引き続きサポーター(+いろは)育成強化中。
最優先のふぶさん・アサさんは仮カンスト中。
その他はとりあえずLv50を目指したいわけですが、うららちゃんは達成。
ということで、現在の優先度は
 スピカ>いろは>ミク>しぐれ>みこと>カノン>レイカ>ひいる>セリア>ミオ
という感じ…ですが…
全員Lv50目指すのもなかなか大変そうなので、もうちょっと考えたいところ…。

パッシブスキル(スピカ・しぐれ・みこと)を優先しようかなあ。
しかしアタッカーほぼ使わないからしぐれちゃんも後回しかな。
あと、どうせみことさん育てるなら強化されたくにさんと併せて使ってみたいので、先にくにさん育ててみようか。

ということで、しばらくは
 スピカ>(くに)>みこと>いろは>ミク>しぐれ
という感じかな。

ならば
 リンクスコア狙いは スピカ>ミク
 新駅ボーナス狙いは (くに)>みこと>いろは
となるか。

駅奪取のニャッピーデー検証

<追記 2019-12-09>
8周年のタイミングのためかこの記事のアクセスが増えておりますね。
1年くらいで記録をやめてしまっておりすみません…

駅奪取の「5周年ニャッシュ」を引き当てたので、機能「5のつく日はニャッピーデー」でもらえるアイテム検証。
まだ始まったばかりなので、まずは気長に記録していきます。

バッテリー10(1個)から駅奪取シールまで、当たり外れの振れ幅がなかなか大きいですね。

記録忘れも多いので結構歯抜けです…

日付 もらえたアイテム
2016-12-05 バッテリー100 1個
2016-12-15 バッテリー100 1個
2016-12-25 時短タイマー 1個
2017-01-05 ベーシックガチャチケット 1個
2017-01-15 バッテリー100 1個
2017-01-25 時短タイマー 1個
2017-02-05 強奪チーズ1day 1個
2017-02-15 おつかいチケット 1個
2017-02-25 強奪チーズ1day 1個
2017-03-05 強奪チーズ5min 1個
2017-03-15 -
2017-03-25 神の手(3個入り) 1個
2017-04-05 駅奪取シール 5個
2017-04-15 神の手(3個入り) 1個
2017-04-25 バッテリー50 1個
2017-05-05 バッテリー10 1個
2017-05-15 スタミナオイル30 1個
2017-05-25 -
2017-06-05 -
2017-06-15 強奪チーズ1h 1個
2017-06-25 ベーシックガチャチケット 1個
2017-07-05 駅奪取シール 5個
2017-07-15 -
2017-07-25 神の手(3個入り) 1個
2017-08-05 スタミナオイル30 1個
2017-08-15 -
2017-08-25 着せ替えニャッシュガチャチケット 1個
2017-09-05 -
2017-09-15 駅奪取シール 5個
2017-09-25 -
2017-10-05 -
2017-10-15 ベーシックガチャチケット 1個
2017-10-25 バッテリー50 1個
2017-11-05 -
2017-11-15 バッテリー100 1個
2017-11-25 強奪チーズ5min 1個
2017-12-05 時短タイマー 1個

駅メモ:でんこ育成状況とコンプ進捗状況

随時更新します。

都道府県コンプ状況

凸・カンストグランクラスの記録(記載は達成順)

  • 上限開放完了
    • ニャッシュ
    • りんご
    • コタン
    • (もえ)
    • いおり
    • ルナ
    • ひいる
    • (れいこ)
    • るる
    • レン
    • レーノ
    • いちほ
    • (いずな)
    • そら
    • Liko
    • セリア
    • (ありす)
    • ミオ
    • ほこね
    • みこと
    • みらい
    • イムラ
    • レイカ
    • (ふぶ)
    • みろく
    • メロ
    • (アサ)
    • うらら
    • しぐれ
    • さや
    • (ペルリ)
    • リオナ
    • エリア
    • しいら
    • まりか
    • にころ
  • カンスト
    • (れいこ)
    • いずな
    • (もえ)
    • (ふぶ)
    • ありす
    • (アサ)
    • (ペルリ)
  • グランクラス
    • れいこ
    • もえ
    • ふぶ
    • アサ
    • ペルリ

駅メモ #16:3人目のカンスト

もえさんもカンスト

f:id:honey8823:20161130172803p:plain:w400

進捗:前回(10/31)からの比較

  • 駅 2935 → 2945(+10)
  • 路線 371 → 371(+0)
  • 都道府県 30 → 30(+0)
  • コンプ路線 170 → 171(+1)

無事にハッカドールイベントの250駅を突破したので2号さんをお迎えし、
2周年ガチャであたる・なほも確保。
現時点で未所持はなつめだけになりました。
12月の新でんこはまたそろそろアタッカーかな?

育成進捗(今回から変化のあったのだけ残すことにする) ()内は前回比 ☆は凸完了、★はカンスト
[S]セリア 8/80 (上限5up) ☆
[S]もえ 80/80 (Lv9up) ★
[D]しいら 11/75 (上限5up)
[A]イムラ 50/70 (上限5up)
[S]しぐれ 16/70 (Lv9up / 上限5up)
[S]うらら 47/65 (Lv16up / 上限5up)
[T]チコ 18/60 (上限5up)
[A]レーノ 8/80 (Lv1up) ☆
[D]ありす 72/75 (Lv2up)
[S]ミオ 6/70 (上限5up)
[S]みこと 23/75 (上限10up)
[D]くに 6/60 (上限5up)
[D]にちな 9/70 (上限10up)
[A]そら 8/80 (上限5up) ☆
[S]アサ 70/70 (Lv5up)
[A]さいか 13/60 (上限5up)
[S]カノン 1/55 (上限5up)
[A]あたる 1/50 (new!)
[S]スピカ 21/55 (Lv20up / 上限5up)
[D]なほ 1/50 (new!)
[A]Liko 6/80 (上限5up) ☆
[T]ハッカ1号 1/50 (new!)
[T]ハッカ2号 1/50 (new!)
[T]ハッカ3号 1/55 (上限5up)

未所持
・なつめ

凸&カンスト状況
駅メモの育成状況 - アナログCPU:5108843109


自分用育成メモ:

相変わらずサポーター育成強化中。サポーターじゃないけどいろはも加えよう。
もえさんが無事カンストしたので、優先度としては
 ふぶ>アサ>うらら>スピカ>いろは>しぐれ>みこと>カノン>レイカ>ひいる>セリア>ミオ
という感じかな。
ふぶ・アサは仮カンスト中なので(ただし上限突破次第最優先で育てる)
当面のリンクスコア狙いは うらら>いろは>みこと>スピカ
新駅ボーナス狙いは スピカ>いろは>しぐれ>みこと
でいこう。ひとまずLv30,Lv50を目処にという感じで。


そしてやっぱりマイルや経験値に影響の出にくいところではれいこさんの回数稼ぎ継続中。

整数かどうか、またその範囲をチェックする関数

整数かどうかを一発チェックしてくれる関数を探していたのですが見つからず。
…えっ、本当にない…? いやあるでしょ…?
しかし見つからなかったので、とりあえず作りました。誰か知ってたら教えてください。

せっかくなので範囲チェックもやってくれるオマケ付きです。

で、「範囲チェックが不要なときもあるので、引数の最小値・最大値が省略されたかどうか」を調べる方法を探し…
IsMissingという関数で調べることは可能というのは分かったのですが、引数がVariantでなければならない様子。うーむ…

参考
VB6・VBA関数メモ:IsMissing関数 | フィロの村note

関数

Private Function checkLong(ByVal vNum As Variant, Optional ByVal lMinNum, Optional ByVal lMaxNum)

    If CLng(vNum) <> vNum Then
        ' 引数が整数でない場合FALSE
        checkLong = False
        Exit Function
    End If
    
    If IsMissing(lMinNum) = False Then
        ' 最小値が指定されている場合
        If vNum < lMinNum Then
            ' 引数が最小値を下回っている場合FALSE
            checkLong = False
            Exit Function
        End If
    End If

    If IsMissing(lMaxNum) = False Then
        ' 最大値が指定されている場合
        If lMaxNum < vNum Then
            ' 引数が最大値を上回っている場合FALSE
            checkLong = False
            Exit Function
        End If
    End If

    checkLong = True

End Function

使用例

Debug.Print checkLong(5)       ' True :整数
Debug.Print checkLong(3.1)     ' False:整数でない
Debug.Print checkLong(5, 1, 9) ' True :整数(1~9の範囲内)
Debug.Print checkLong(5, 6, 9) ' False:整数(6~9の範囲外)