
パスワードランダム生成のVBAを作成してみたのですが、生成個数が8個まではうまくいくのですが、9個以上に設定すると1004エラーになってしまいます。
どのような原因が考えられますでしょうか?
以下にExcelシートとマクロの内容を示します。
1)Excelシート
添付画像「sheet,jpg」で作成しました。
C3セルにパスワード生成個数を設定しますが、8までは正常に処理されますが、9以上だとエラーになります。
2)VBA内容
以下の内容で設定しました
「main.Range("B" & MaxRow + 1) = GeneratePassword(iLength, True, True, True, True, True, True, True, True)」の部分でエラーになってます。
※Office365で作成しました
------------------------------------------------------------------
Sub メイン設定()
Dim MaxRow As Integer
Dim iLength As Integer
Dim m As Long
iLength = Cells(4, 3) 'パスワードの文字数
KOSUU = Cells(3, 3) 'パスワードの発行数
For m = 1 To KOSUU
'データ入力されているB列の最終行を取得する
MaxRow = main.Cells(Rows.Count, 2).End(xlUp).Row
'最終行+1行目のB列にパスワード生成しセットする
main.Range("B" & MaxRow + 1) = GeneratePassword(iLength, True, True, True, True, True, True, True, True)
Next m
MsgBox "完了"
End Sub
Sub ボタン1_Click()
End Sub
Private Function GeneratePassword(iLength As Integer, Optional bAllowLower As Boolean = True, Optional bAllowUpper As Boolean = True, _
Optional bAllowNumber As Boolean = True, Optional bAllowSymbol As Boolean = False, Optional bRequireLower As Boolean = True, _
Optional bRequireUpper As Boolean = True, Optional bRequireNumber As Boolean = True, Optional bRequireSymbol As Boolean = False) As String
Dim sPassword As String
Dim m As Long
Dim sTotalChars As String
Dim sSymbols As String
' パスワード文字列定義(大文字・小文字・数字) 記号は上で定義
Const S_LOWER As String = "abcdefghijklmnopqrstuvwxyz"
Const S_UPPER As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Const S_NUMBER As String = "0123456789"
'Const sSymbols As String = "!#$%&()=^-|@[]{}:;,."
sSymbols = main.Range("C5")
' 使用可能文字種
If bAllowLower Then
sTotalChars = sTotalChars & S_LOWER
End If
If bAllowUpper Then
sTotalChars = sTotalChars & S_UPPER
End If
If bAllowNumber Then
sTotalChars = sTotalChars & S_NUMBER
End If
If bAllowSymbol Then
sTotalChars = sTotalChars & sSymbols
End If
For i = 1 To iLength - Abs(bRequireLower + bRequireUpper + bRequireNumber + bRequireSymbol)
sPassword = sPassword & Mid(sTotalChars, Int(Len(sTotalChars) * Rnd + 1), 1)
Next i
' 必須とされる文字種の文字を1文字ずつ挿入
If bRequireLower Then
m = Int((Len(sPassword) + 1) * Rnd + 1)
sPassword = Mid$(sPassword, 1, m - 1) & Mid(S_LOWER, Int(Len(S_LOWER) * Rnd + 1), 1) & Mid$(sPassword, m)
End If
If bRequireUpper Then
m = Int((Len(sPassword) + 1) * Rnd + 1)
sPassword = Mid$(sPassword, 1, m - 1) & Mid(S_UPPER, Int(Len(S_UPPER) * Rnd + 1), 1) & Mid$(sPassword, m)
End If
If bRequireNumber Then
m = Int((Len(sPassword) + 1) * Rnd + 1)
sPassword = Mid$(sPassword, 1, m - 1) & Mid(S_NUMBER, Int(Len(S_NUMBER) * Rnd + 1), 1) & Mid$(sPassword, m)
End If
If bRequireSymbol Then
m = Int((Len(sPassword) + 1) * Rnd + 1)
sPassword = Mid$(sPassword, 1, m - 1) & Mid(sSymbols, Int(Len(sSymbols) * Rnd + 1), 1) & Mid$(sPassword, m)
End If
GeneratePassword = sPassword
End Function

No.2ベストアンサー
- 回答日時:
GeneratePasswordから返されるパスワードの先頭の文字が=の時に
この現象が発生しています。
=○○
とすると、関数式の設定とexcelが誤判断しています。
main.Range("B" & MaxRow + 1) = "'" & GeneratePassword(iLength, True, True, True, True, True, True, True, True)
とすれば、この現象は回避できます。
参考までに
dim ans as string
ans = GeneratePassword(iLength, True, True, True, True, True, True, True, True)
main.Range("B" & MaxRow + 1) = ans
として実行すると、
main.Range("B" & MaxRow + 1) = ans でエラーになります。
その時の、ansの内容を参照すると、先頭に=があることがわかります。
蛇足ですが、本件とは直接関係ありませんが、
iLength = Cells(4, 3) 'パスワードの文字数
KOSUU = Cells(3, 3) 'パスワードの発行数
は
iLength = main.Cells(4, 3) 'パスワードの文字数
KOSUU = main.Cells(3, 3) 'パスワードの発行数
にしておいたほうが、良いかと思います。
main以外のシートを表示して実行すると、誤動作します。
ありがとうございます!
頂いた内容で修正したところエラーが出なくなりました。
なるほど、記号に「=」を使っていると計算式をご認識するのが原因だったのですね。見落としておりました。
またCellsでオブジェクト名を明示して指定することについても承知しました。誤作動防止で明示的に指定します。
短期間で解決できて感謝です!
また何かございましたらよろしくお願いいたします。
No.1
- 回答日時:
こちらで、提示されたマクロをコピペして、そのまま実行しました。
Sub メイン設定()の
MaxRow = main.Cells(Rows.Count, 2).End(xlUp).Row
で、実行時エラー'424' オブジェクトが必要です。
のエラーになります。
提示されたエラーにはなりません。
mainの定義はどこで行われていますか?
又、mainに値をどのように設定されていますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
vba テキストボックスとリフトボックスについて
Excel(エクセル)
-
エクセルのリストについて
Excel(エクセル)
-
勤怠表について ABS、TEXT関数の使い方について教えて下さい
Excel(エクセル)
-
-
4
Excel 複数のセルが一致するときに網掛けをする式は作れますか
Excel(エクセル)
-
5
9月17日でサービス終了らしいのですが、今までのようなエクセルの質問や相談はどこですればいい?
Excel(エクセル)
-
6
エクセルの循環参照、?
Excel(エクセル)
-
7
エクセルのdatedif関数を使って、年齢と月齢を入力しました。 関数を入力して、問題なく使えたので
Excel(エクセル)
-
8
特定のセルだけ結果がおかしいです。 関数はオートフィルでコピーしており、細かく見てもどこもおかしくあ
Excel(エクセル)
-
9
エクセルの関数について
Excel(エクセル)
-
10
【マクロ】変数に入れるコードを少しでも短くする為には?
Excel(エクセル)
-
11
【マクロ】【相談】Excelブックとマクロを早く動くようにする為には?
Excel(エクセル)
-
12
【マクロ】【配列】3つのシートに、同じ作業をしたい
Excel(エクセル)
-
13
【関数】不規則な文章から●●-●●●●-●●●●-●形式の数字を抜きだしたい
Excel(エクセル)
-
14
Excelについての質問です 並べ替えの機能で社員を50音順に並べ替えたいのですが 名前の横に社員番
Excel(エクセル)
-
15
【エクセル】期限アラートについて
Excel(エクセル)
-
16
エクセル ドロップダウンリストの絞り込みについて
Excel(エクセル)
-
17
【マクロ】エラー【#DIV/0!】が発生する場合の回避方法について
Excel(エクセル)
-
18
エクセル GROUPBY関数について教えてください。
Excel(エクセル)
-
19
2枚のエクセル表で数字をマッチングさせる方法を教えてください
Excel(エクセル)
-
20
関数を教えて下さい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パスワードとパスコードの違い...
-
おすすめのグロサイトを教えて...
-
カードの不正利用疑惑の対応に...
-
知恵袋に似たサイトはどこですか?
-
【SBI証券】パソコン使うたびデ...
-
Xの垢を作る時に、認証って今で...
-
中学生でもまねきねこの会員に...
-
SMTP認証について
-
インターネット、有線LAN接...
-
gmailから暗号化されないメール...
-
「はい」を押すだけの年齢確認...
-
リムーバルディスクって何ですか
-
二段階認証でメールやSMSをどう...
-
ヤフーは不親切! ログイン再認...
-
無料アダルトサイトの動画が、...
-
サーバー証明書をインストール...
-
一から作るショッピングサイト...
-
仮換地証明書と敷地地番該当証...
-
無線LANでWindowsログオン前に...
-
iPod・itunesの認証解除について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
7zipを使用してコマンドプロン...
-
PDFのパスワードを一回だけ使用...
-
PCのパスワードが変わってしま...
-
iPhoneの、移行 ログインできない
-
こんばんは、小6女子です。 家...
-
エクセルVBAで1004エラーになり...
-
【LINEパスコード 解除の方法】...
-
ipod touch のアカウント情報 ...
-
パスワードとパスコードの違い...
-
スクリーンタイムをオフにした...
-
Thunderbirdのサーバー設定で使...
-
昨日iPhone XRを購入したのです...
-
カードの不正利用疑惑の対応に...
-
知恵袋に似たサイトはどこですか?
-
ヤフーは不親切! ログイン再認...
-
おすすめのグロサイトを教えて...
-
二段階認証でメールやSMSをどう...
-
【SBI証券】パソコン使うたびデ...
-
LINEがおかしい…… LINEを使おう...
-
AOLメールについて ログインす...
おすすめ情報
早々のご回答ありがとうございます。
言葉足らずで申し訳ありません。
Excelのシートのオブジェクト名を「main」で設定しておりました。
その後私の方でも検証したのですが、C3セルの個数設定とC4セルの記号の設定の仕方によってエラーが出たり出なかったりしました。
エラーにならない 個数150 記号 '!#$&()^-
エラーになる 個数150 記号 '!#$%&()=^-<>@[]{}:;,.?\*
エラーになる・ならないの理由がわかればを教えて頂けますと幸いです。
※私の方でも引き続き確認します
よろしくお願いいたします。