« Excel2013 で印刷範囲を設定すると表の外側の罫線が消える。 | トップページ | 相洋高校和太鼓部23代目に幸多かれ。 »

Excel で、B列に入力があったら、A列に連番を自動で入れる。

この記事は自分用の覚書です。

Excel で、B列に入力があったら、A列に連番を自動的に入れるVBAのコード。

Excel2013 + Windows8 Pro 64ビット
パナソニック レッツノート CF-SX2AEABR

■前提
A1セルには「番号」、B1セルには「氏名」と入力済み。

■コードについて
Private Sub から End Sub までをコピーし、シート名を右クリックして「コードの表示」を選んで貼り付ける。
B2セル以降に新しい氏名を入力すると、その左のA列のセルに 1 から順に自動的に連番が表示されていく。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long
    i = Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Row
        If Cells(i, "B") <> "" Then
            Cells(i, "A") = i - 1
        End If
'
'変数iを宣言。
'i = Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Row のコードで、
'A列の最終セル(1,048,576行目のセル)から上に向かって見て行って最初の入力済みセルの1つ下のセルの行番号を取得し、それを変数iに代入する。
'
'「(変数iの値で指定した)行のB列のセルが未入力ではない」の論理式が「真」の場合、
'同じ行のA列のセル、
'つまり、「A列の最終セル(1,048,576行目のセル)から上に向かって見て行って最初の入力済みセルの1つ下のセル」
'に、変数iから1を引いた値を代入する。
'(1行目に「番号」と「氏名」が入力されていて、実際の入力は2行目からなので、その分を引く。B2セルに氏名を入力したときにA2セルに自動的に表示される数値が 1 になる。)
'
'Offsetメソッドを使うことで、A列の入力済みのセルの次の行のセルに連番を追加していくことができる。
'新しいセルに入った連番は、B列に入力があるうちは単独で削除できない。
'
'If...Then...Elseステートメントで真偽を評価する対象の論理式が、
'Cells(i, "B") <> ""
'と、「(変数iの値で指定した)行のB列のセルが未入力ではない」になっているので、
'そのB列のセルに入力(スペースも)があるうちは、同じ行のA列のセルに入っている数値を削除できない。途中の連番は削除できる。
'
'A列のセルに入った数値を削除するためには、同じ行のB列のセルの値をまず削除する。
'あるいは、削除したいA列とB列のセルを選択して同時に削除する。
'
End Sub

|

« Excel2013 で印刷範囲を設定すると表の外側の罫線が消える。 | トップページ | 相洋高校和太鼓部23代目に幸多かれ。 »

コメント

上記の構文を張り付けて動作確認しましたが
B2以降に適当な名前を入力しても
A2以降に何も表示しません。
失礼かもしれませんが構文は正しいのでしょうか?

投稿: 瀬川國雄 | 2019.05.04 08:51

私は上記コードにEnd Subを追加し、A1に番号・B1に氏名を入力して問題なく番号に行番号-1で表示されてます、活用してます。ありがとうございます。

追加でご教授おねがいしたいのですが。
A列に番号でなく、B列の文字とC列の日付を結合した、文字列を表示されるVBAコードをお願いできればありがたいのですが?
&等で結合した場合、表示はされますが。計算式での表示になります。文字列の結果を表示させたいのですが。

投稿: Yoneda | 2019.06.17 22:23

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Excel で、B列に入力があったら、A列に連番を自動で入れる。:

« Excel2013 で印刷範囲を設定すると表の外側の罫線が消える。 | トップページ | 相洋高校和太鼓部23代目に幸多かれ。 »