ここから本文です

Excel VBAについて質問です。 ABCDEF0123456789ABCDEF0123456789といった感じ...

spe********さん

2016/10/1322:16:24

Excel VBAについて質問です。


ABCDEF0123456789ABCDEF0123456789といった感じでアルファベット6文字数字10個の組み合わせで三桁の通し番号をつけます。

A1セルから行方向に順に書き出す

マクロが組み立てられません。

例)A1セルに 2C7 と手打ちで記入してA2に2C8 A3に2C9 A4に2DA
という風に番号を書き出すにはどういったマクロをかけばいいのか教えて下さい。

閲覧数:
80
回答数:
3

違反報告

ベストアンサーに選ばれた回答

mar********さん

2016/10/1405:03:05

◆「ABCDEF0123456789」この順番で、「A1セルに 2C7 と手打ちで記入してA2に2C8 A3に2C9 A4に2DA」であれば、

【図-1】
A2=BASE(DECIMAL(A1,16)+IF(RIGHT(A1)="9",17,IF(RIGHT(A1)="F",-15,1)),16,3)
★下にコピー

【図-2】:16進数であれば、
A2=BASE(DECIMAL(A1,16)+1,16,3)
★下にコピー

◆「ABCDEF0123456789」この順番で、「A1セルに 2C7 と手打ちで記入してA2に2C8...

  • 質問者

    spe********さん

    2016/10/1520:34:01

    おお!なんと関数でできるんですね!
    これは驚嘆しました!
    マクロで質問しましたが、ユーザーの事を考えるとこれがベストだと
    思います。
    ありがとうございました。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2016/10/15 20:39:48

このような簡潔な数式で解決できるとは思いませんでした。
ありがとうございます。
また困った時はご質問させていただきます。

マクロで解決したコードをお答えしていただいた方の書き込みがなくなってますが、みなさんありがとうございました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

kik********さん

2016/10/1405:41:29

解決されたようですが、参考になるところがあれば・・・ということで

以下を標準モジュールに記述して
> A1セルに 2C7 と手打ちで記入して
A2 セルに =Samp1(A1) と記入後、下にズズッと
作業列が要らなくなる?

やっていることは、XX 進数とは関係なく
>   Const CN As String = "ABCDEF0123456789"
に記述した順に、0, 1, 2・・・と解釈した、足し算をしているだけです
第2引数は、加算する文字で、
既定値として、"B" ( 上記 Const で 1 と解釈する文字 )


Option Explicit

Public Function Samp1(vSrc As Variant, Optional vN As Variant = "B")
   Dim sS As String, sN As String
   Dim iW As Long, iP As Long, jW As Long, jP As Long
   Dim i As Long, j As Long, k As Long, n As Long
   Const CN As String = "ABCDEF0123456789"

   k = 0: n = Len(CN)
   If (Len(vSrc) >= Len(vN)) Then
      sS = UCase(vSrc): sN = UCase(vN)
   Else
      sS = UCase(vN): sN = UCase(vSrc)
   End If
   iW = Len(sS): jW = Len(sN)
   While ((iW > 0) And (jW > 0))
      iP = InStr(CN, Mid(sS, iW, 1)) - 1
      jP = InStr(CN, Mid(sN, jW, 1)) - 1
      i = iP + jP + k
      j = i Mod n
      k = i \ n
      Mid(sS, iW, 1) = Mid(CN, j + 1, 1)
      iW = iW - 1: jW = jW - 1
   Wend

   If (iW > 0) Then
      While ((iW > 0) And (k > 0))
         iP = InStr(CN, Mid(sS, iW, 1)) - 1
         i = iP + k
         j = i Mod n
         k = i \ n
         Mid(sS, iW, 1) = Mid(CN, j + 1, 1)
         iW = iW - 1
      Wend
      If (k > 0) Then
         sS = Mid(CN, k + 1, 1) & sS
      End If
   ElseIf (k > 0) Then
      sS = Mid(CN, k + 1, 1) & sS
   End If

   Samp1 = sS
End Function


以下動作確認用で

Public Sub test()
Debug.Print Samp1("")
Debug.Print Samp1("F")
Debug.Print Samp1("9")
Debug.Print Samp1("99")
Debug.Print Samp1("999")
Debug.Print Samp1("", "9")
Debug.Print Samp1("", "99")
Debug.Print Samp1("99", "99")
Debug.Print Samp1("999", "999")
Debug.Print Samp1("9", "999")
Debug.Print Samp1("999", "9")
Debug.Print Samp1("22", "22")
Debug.Print Samp1("99999999999999999999999999999")
End Sub

結果は

B
0
BA
BAA
BAAA
9
99
B98
B998
BAA8
BAA8
BBA
BAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


変更?は、そこそこ簡単・・・・
例えば、

> Public Function Samp1(vSrc As Variant, Optional vN As Variant = "B")
>    Const CN As String = "ABCDEF0123456789"

Public Function Samp1(vSrc As Variant, Optional vN As Variant = "あ")
   Const CN As String = "んあかさたなはまやら"

に変更したとして
Samp1("あかさ", "あかさ") → かたは
Samp1("らら") → あんん

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

por********さん

2016/10/1323:53:19

こんにちは。
普通、0-9A-Fといえば、16進数のことをさします。
ところが、主様の2C9の次が2DAですよね、16進数だと2CAです

どんなルールなんでしょうか。位の説明が必要ですよ。

後は、それを「エクセルの扱える10進数から、変換するコード」ということです。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる