• ベストアンサー

?進数の作り方

Excelでシート保護をしたパスワードを忘れてしまいました。 パスワードは、アルファベットを使っているのだけは覚えているのですが・・・ そこで、VBAでアルファベット26文字で26進数みたいなものを使って、Aから順番に解除していこうと思うのですが、その26進数の作り方がいまいちうまくいきません。桁数は8桁ぐらいだと思うのですが、どなたかお教え下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.4

現実的ではないですが... Private Const CharList = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" Private Const Base = 26 '+ 26 + 10 '進数 Private Sub Form_Click() Dim i As Currency Dim Last As Currency Last = Base ^ 8 + Base ^ 7 + Base ^ 6 + Base ^ 5 + Base ^ 4 + Base ^ 3 + Base ^ 2 + Base ^ 1 For i = 1 To Last 'Step Fix(Last/1000) label1.Caption = NumToAlpha(i) DoEvents Next label1.Caption = NumToAlpha(Last) End Sub Private Function NumToAlpha(ByVal n As Currency) As String Dim p As Currency Dim q As Long Dim s As String Do While n > 0 n = n - 1 p = Fix(n / Base) '商 q = n - p * Base '余り s = Mid(CharList, q + 1, 1) & s n = p Loop NumToAlpha = s End Function

tt_2002
質問者

お礼

回答ありがとうございます。 大変参考になりました。

その他の回答 (4)

回答No.5

なるべく何桁でも可能なように考えてみました。(下記は一応8桁です) 表示用~ここまでは、テストのためセルに表示しています。 (シートからマクロを実行してください) まちがいなければ、消してください。(最後まで調べる時間はありませんでした) (消してしまえば、シートから実行する必要はありません) Sub test()   '***************表示用****************   Dim x As Long '表示用   Dim y As Long '表示用   x = 1: y = 1   '***************ここまで***************   Const vcnt = 8 '桁数   Const ChrList = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"   Dim v(vcnt) As Integer   '初期化   For i = 1 To vcnt     v(i) = 0   Next i   '設定   Do     v(1) = v(1) + 1     '繰り上がりチェック     For i = 1 To vcnt - 1       If (v(i) > 26) Then         v(i + 1) = v(i + 1) + 1         v(i) = 1       Else         Exit For       End If     Next i     If (v(vcnt) > 26) Then       Exit Do     End If     'アルファベット表示     dt = ""     For i = vcnt To 1 Step -1       If (v(i) > 0) Then         dt = dt & Mid(ChrList, v(i), 1)       End If     Next i     '***************表示用****************     Cells(y, x) = dt     If (y = 65500) Then       If (x = 256) Then         MsgBox "これ以上表示できません"         End       End If       x = x + 1       y = 1     Else       y = y + 1     End If     '***************ここまで***************     DoEvents   Loop End Sub

tt_2002
質問者

お礼

回答ありがとうございます。 大変参考になります。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 パスワードを割り出すのではなく、保護の解除をするのが本筋ではないんでしょうか。 もしそうなら、シートの中身をそっくりそのまま別のシートにコピーすれば保護は解除されます。 解除されたら、あらためて保護を設定すればいいでしょう。 一応参考URLです。 http://www.geocities.co.jp/Technopolis/2082/Soft/Excel_t.htm#bookseqrforget

参考URL:
http://www.geocities.co.jp/Technopolis/2082/Soft/Excel_t.htm#bookseqrforget
tt_2002
質問者

お礼

回答ありがとうございます。 ただ、どうしてもVBAでやりたかったもので・・

  • baboooo
  • ベストアンサー率35% (17/48)
回答No.2

与えられた数字をアルファベットに変換する関数です。 A~Z、までいったら、AA、AB・・・となります。 lNumberに0から始まる数字を渡し、 アルファベットの文字列が戻り値になります。 これを8バイトになるまで繰り返せばできるはず。 ------------------------------------------------------- Private Function NumToAlpha(ByVal lNumber As Long) As String Dim iDiv As Integer Dim iMod As Integer Dim sAplha As String iDiv = Fix((lNumber + 26) / 26) - 1 iMod = (lNumber + 26) Mod 26 '26以上の場合 If iDiv > 0 Then '一桁目にアルファベットをつける sAplha = Chr(iDiv - 1 + vbKeyA) End If 'アルファベットに変換 sAplha = sAplha & Chr(iMod + vbKeyA) NumToAlpha = sAplha End Function

tt_2002
質問者

補足

参考になる回答ありがとうございます。 ただ、これだと3桁目以降に行かないようです。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

数値をAからZに変換する方法として、 ある文字列にAからZまで入れて、MIDで 何文字目から一文字取り出す というふうにすればいいでしょう。 もしくは、文字コードの計算とかもあります。

tt_2002
質問者

お礼

回答ありがとうございます。 そこまではわかるんですが、桁上がり等を考えると、なかなかうまくいきません。

関連するQ&A

  • Excelで16桁の16進数を10進数に変換

    Excelを使って、16桁の16進数を10進数に変換したいと考えております。 HEX2DECでは、桁数が多すぎてエラーとなってしまいました。 関数の組み合わせでも、VBAで組むのでもどちらでも構いません。 こうすればできる、というようなアイデアだけでも、いただけるとうれしいです。 宜しくお願いいたします。

  • VBAでのブック・シートの保護・解除について

    エクセル2010のVBAでのブック、シートの保護&解除の方法について教えて頂きたく、 質問させて頂きます。 消されては困るシートや数式がある関係で、ブックオープン時にVBAでブックとシートにそれぞれパスワードをかけて保護しています。 VBAではシートの削除、作成、コピーなどを行っているため、VBA実行時のみ、保護を解除させるようにしたいと思います。 ただ、対象のシート自体にも入力したい項目があるため、その箇所については保護を解除しておく必要があります。 そして、VBA実行後、再度、その箇所以外にパスワードで保護をかけ直します。 イメージとしては下記のような流れになります。 対象ブック:ブックA 対象シート:シート1 パスワード:1234(それぞれ) 常時保護を解除しておきたいセル:range("A6:H106") 1.(オープン時には、)ブック保護&特定のセル以外のシート保護 2.VBA実行時には全ての保護解除 3.VBA終了時に、1の状態に戻る どうぞよろしくお願い致します。

  • VBAで4桁の16進数から16桁の2進数変換

    VBAで4桁の16進数(FFFFとか)を2進数(1111 1111 1111 1111とか)に変換して変換した2進数を1桁づつセルに表示させるには、どうしたらいいでしょうか?ワークシート上だと8桁までしか対応してないようで、左右8桁づつわけてHEX2BINを使ってとりあえず変換する事は、できましたがVBAでマクロを組んで行いたいです。例えばA1に16進数を入れA2~P2に2進数を1桁づつ表示させたいです。よろしくお願いします。

  • Excel パスワード文字数を多くすると

    Excelのシートやファイルなどの保護をする場合に パスワードを設定できますが、 パスワード解析ソフトなどで解除できてしまいます。 その際、例えば「不規則な英数字で15文字」の パスワードを設定していたとすれば、解除にどのくらいの 時間がかかるのでしょうか? ソフトや環境にもよるのでしょうが…。 (ちなみに、解析ソフトを使う気はありません。) お暇でしたらお答えください。

  • Excelのセルの数字のみを別のシートのセルに転写

    Excelのセルの先頭に固定した桁数(例として7桁)の半角数字と文字数はフリーの全角の文字を入力し、別のシートのセルに固定した桁数(例として7桁)の半角数字だけを転写する方法を教えてください。

  • パスワードによるシートの保護&解除方法

    エクセルのVBAでパスワードを使ってシートの保護、解除を したいのですが、参考書どおりに入力しても、うまくできません!!(ё_ё) どなたかうまくできる方法教えてください。

  • Excelのセルの文中文字を別シートに転写する方法

    Excelのセルの先頭の固定した桁数(例として7桁)の次(8桁目以降)に入力されている文字数はフリーの文字を、別のシートのセルに転写する方法を教えてください。

  • エクセルには保護機能を無効にするソフト?

    エクセルには保護機能がありますが、すべてのバージョンに対して 以下の保護を解除できるソフトはあるのでしょうか? シート保護 ブック保護 ファイルの読み取りパスワード ファイルの書き込みパスワード VBAプロジェクト保護 時々、ネット上でエクセルの保護機能を解除するサービス(500~1000円 1件)を見かけるのですが、こういうサービスは違法でしょうか?

  • Excelで「10桁の自然数×10桁の自然数」を計算する方法

    Excelで「10桁の自然数×10桁の自然数」を関数を組み合わせるか、VBAで組むかして、計算する方法をお分かりになる方おられませんでしょうか?(計算結果は文字列として得られることになると思いますが、それでかまいません。) こうすればできる、というアイデアだけでもかまいませんので、よろしくお願いいたします。

  • Excel:ひとつのセルに入力されている複数桁の数字を他のセルに分けて自動表示

    Excelで例えばSheet1!A1に「123456」と入力されると、Sheet2!A1に「1」、Sheet2!A2に「2」、Sheet2!A3に「3」、Sheet2!A4に「4」、Sheet2!A5に「5」、Sheet2!A6に「6」、と表示させることは可能でしょうか? もし可能であれば方法をご教示頂けませんか? なお、Sheet1!A1に入力する文字種は数字以外はありません。 また、最大7桁で、それ以上の桁になることはありません。 同時にSheet1!A1に入力可能な桁数を7桁までに制限させるようにもしたいです。 よろしくお願いいたします。