派遣事務員の迷走

派遣事務員コロ子。会社の犬。顔出しNG。常に迷走している。

VBAで①②③、ABCなどの連続番号を入力する(オートフィル風)

こんにちは。
派犬事務員のコロ子です。

休日は一瞬で終わる

①②③やABCのオートフィル風を作る

先日、「①②③とかABCとかをオートフィルできる方法ないんですか?」と質問を受けた。
どうやらないっぽい。関数とかで作れるみたいだけど、毎回関数を入れるのも面倒なのでVBAで作ってみよう。

Asc関数

「Asc関数」の戻り値は 「Shift_JIS文字コード」を利用して作成してみよう。
まずはShift_JIS文字コードを確認してみる。

右下のタスクバーの文字を右クリックしてIMEパッド」を開く

IMEパッドの左側から「シフトJIS」を選択する。

半角英数、記号などフォルダがいっぱいある。半角英数から英文字を探してみると、「ABC・・・Z」は連続した文字コードになっている。①~⑳も連続した文字コードになっている。ということは、ループで作れる!

オートフィル風は
①まず先頭に文字を入力する。
②連続文字を入力する範囲を選択する。
③選択した範囲に連続した文字が入るようにする。

上記のコードを作成する。

Sub 選択範囲を連続番号にする()

    Dim ran As Range
    Dim buf As Long

    For Each ran In Selection

        '先頭のセルの場合
        If ran = Selection(1) Then

            'Acsコードに変換
            buf = Asc(ran.Value)

        Else

            '文字コードに戻す
            buf = buf + 1
            ran = Chr(buf)

        End If

    Next ran

End Sub

コードができたら、どのExcelでも使えるように個人用マクロブックの「PERSONAL.XLSB」に登録する。

個人用マクロブックの作り方は↓の真ん中あたりを参考にして
https://koroko.hatenablog.com/entry/2019/09/10/211811

さらにクイックアクセスツールバーにマクロを登録する。
①ファイル→オプションより「クイックアクセスツールバー」を選択する
②マクロを選択する
③「選択範囲を連続番号にする」マクロを選択する
④追加をクリックする
⑤追加した「選択範囲を連続番号にする」マクロを選択する
⑥「変更」をクリックして好きなアイコンを選択する。
⑦「OK」をクリックする

オートフィル風の出来上がり!

もちろん、横方向にも、飛び飛びでもできるよ。


「あいうえお」の場合は「ぁあぃい、かが」など並び順が不規則なので注意!
また普通の数字もできないです。
その場合はこちらを参考に。

Sub 選択範囲を連続番号にする()

    Dim ran As Range
    Dim buf As Long

    '数字の場合
    If IsNumeric(Selection(1).Value) Then

        For Each ran In Selection

            If ran = Selection(1) Then

                buf = ran.Value

            Else

                buf = buf + 1
                ran = buf

            End If

        Next ran

    '日付の場合
    ElseIf IsDate(Selection(1).Value) Then

        Dim mydate As Date

        For Each ran In Selection

            If ran = Selection(1) Then

                mydate = ran.Value

            Else


                mydate = mydate + 1
                ran = mydate


            End If

        Next ran


    '「あいうえお」の場合(ぁあぃい、かが、など並び順が不規則なので)
    ElseIf InStr("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん", Selection(1).Value) Then

        Dim i As Long
        For Each ran In Selection

            If ran = Selection(1) Then

                'Acsコードに変換
                buf = Asc(ran.Value) + 1

            Else

                Do

                    If InStr("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん", Chr(buf)) Then

                        ran = Chr(buf)
                        buf = buf + 1
                        Exit Do

                    Else

                        buf = buf + 1

                    End If

                Loop

            End If

        Next ran

    '他(①とかAとか)
    Else

        For Each ran In Selection

            If ran = Selection(1) Then

                'Acsコードに変換
                buf = Asc(ran.Value)

            Else

                '文字コードに戻す
                buf = buf + 1
                ran = Chr(buf)

            End If

        Next ran

    End If

End Sub

シフトJIS」表を見ながらオリジナルの連続番号を作ってみよう!