
パスワードランダム生成の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も見ています
-
Excelについての質問です 並べ替えの機能で社員を50音順に並べ替えたいのですが 名前の横に社員番
Excel(エクセル)
-
【関数】不規則な文章から●●-●●●●-●●●●-●形式の数字を抜きだしたい
Excel(エクセル)
-
Excel 複数のセルが一致するときに網掛けをする式は作れますか
Excel(エクセル)
-
-
4
関数を教えて下さい
Excel(エクセル)
-
5
vbaマクロについて
Visual Basic(VBA)
-
6
エクセルの設定、下へスクロールすると表のヘッダ項目がシートの列番号の部分に表示される
Excel(エクセル)
-
7
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
8
算術演算子「¥」の意味について
Visual Basic(VBA)
-
9
VBAの「To」という語句について
Visual Basic(VBA)
-
10
officeソフト 本名変更
その他(Microsoft Office)
-
11
マクロ セルを右クリックした時のメニューバーの追加と同様に画像を右クリックしたときのメニューバーにコ
Excel(エクセル)
-
12
お助けください
Access(アクセス)
-
13
役所でもらった書類をエクセル化するには? 役所に申請する用紙があります。A4で表になっていて枠内に文
その他(Microsoft Office)
-
14
エクセルの改行について
Visual Basic(VBA)
-
15
至急お願いします!エクセルのフィルターについて
Excel(エクセル)
-
16
【マクロ】コードを少しでも、減らする為には
Excel(エクセル)
-
17
重複しない値を抽出したい
Excel(エクセル)
-
18
VBA_日時のソート
Excel(エクセル)
-
19
マクロ・VBAで、当該ファイルのショートカットからなら正常に動作する疑問につきまして
Excel(エクセル)
-
20
エクセル ○○以上○○以下で、条件が重なったところを表示させたい
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで1004エラーになり...
-
iPadへのiPhoneパスコード入力...
-
【SBI証券】パソコン使うたびデ...
-
教えて!gooとOKWave
-
LINEがおかしい…… LINEを使おう...
-
おすすめのグロサイトを教えて...
-
「はい」を押すだけの年齢確認...
-
マイクロソフトアカウントの2段...
-
Internet Explorerのバグ?
-
Excel2013 WEBSERVICE で #VAL...
-
中学生でもまねきねこの会員に...
-
知恵袋に似たサイトはどこですか?
-
サイトにアクセスしただけで個...
-
無料アダルトサイトの動画が、...
-
教えてgooの5月30日の電話番号...
-
502 Bad Gatewayの解消法
-
会員制ホームページの作成について
-
クロームとぐーは相性悪いの
-
内臓Mini-PCI 無線LANカードの...
-
Active Directoryの認証方法に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
7zipを使用してコマンドプロン...
-
PDFのパスワードを一回だけ使用...
-
パスワードとパスコードの違い...
-
Thunderbirdのサーバー設定で使...
-
うちはiPhone7なんですけど Twi...
-
昨日iPhone XRを購入したのです...
-
PCのパスワードが変わってしま...
-
ipadのパスコードとパスワード...
-
iPhone4 パスコードロック解除
-
au idでログインしたいのですが...
-
iPadへのiPhoneパスコード入力...
-
iPhone6sを使っていますが、私...
-
楽天キャッシュのパスワード
-
【LINEパスコード 解除の方法】...
-
excel visual basicの質問です ...
-
【SBI証券】パソコン使うたびデ...
-
おすすめのグロサイトを教えて...
-
知恵袋に似たサイトはどこですか?
-
証明書による無線LAN認証(802.1...
-
サイトにアクセスしただけで個...
おすすめ情報
早々のご回答ありがとうございます。
言葉足らずで申し訳ありません。
Excelのシートのオブジェクト名を「main」で設定しておりました。
その後私の方でも検証したのですが、C3セルの個数設定とC4セルの記号の設定の仕方によってエラーが出たり出なかったりしました。
エラーにならない 個数150 記号 '!#$&()^-
エラーになる 個数150 記号 '!#$%&()=^-<>@[]{}:;,.?\*
エラーになる・ならないの理由がわかればを教えて頂けますと幸いです。
※私の方でも引き続き確認します
よろしくお願いいたします。