« Excel で連番の抜けをチェックする。 | トップページ | Excel でワークシート名を一覧にする VBA のコード »

Excel でB列に値が入っていたらA列に連番を入れる。

この記事は自分用の覚書です。
(Windows 8.1 Pro 64ビット + Excel2013 Home & Business)

K.M さん。
B列のセルに値が入っていたらA列のセルに連番を振っていくVBAのコードの試作です。
下記のような感じでどうでしょう。

B列に空欄がある場合にそれを数えるか、数えないかでコードが少しだけ違います。
N = N + 1 の位置が違っています。

B列の空欄セルは飛ばしてA列に連番を入れるか、B列の空欄セルも数えてA列に連番を入れるかの違いです。
前者だと、常に 1 から始まり、 2 3 4 5 と続きます。
後者だと、B列が空欄のセルを数えても、A列には入力しないので、1 3 5 というようになります。(2 と 4 がB列の空欄セルの場合)

ちなみに、B列に空欄がない場合は、どちらを実行してもA列に入るのは 1 2 3 4 5 という連番です。
なお、1行目に列見出しをつけるのでしたら、
For i = 1 To 5
の部分を For i = 2 To 5 に変えてください。(1 を 2 に変える。)

 

Sub B列を基準に連番_空欄セルは飛ばす()
    Dim i As Long
    Dim N As Long
    For i = 1 To 5
        If Cells(i, "B").Value <> "" Then
            N = N + 1
            Cells(i, "A").Value = N
        End If
    Next i
'
'Cells(i, "B").Value <> "" は、「B列のセルの値が空欄に等しくない(空欄ではない)」という意味。
'
'B列のセルが空欄でない場合、 if と End if の間にあるコードを実行する。
'変数 N に 1 を足したものを N に代入。さらに N をA列のセルに代入する。
'
'宣言した直後は変数は 0 なので、 N + 1 は 0 + 1 ということで、 N = N + 1 は  N = 1 ということになり、
'変数 N に 1 が代入される。
'この場合の = は、左辺と右辺が等しいことを意味する等号ではない。右辺を左辺に代入することを意味する代入記号。
'
'Cells(i, "A").Value = N のコードで、1 が代入された変数 N がA列のセルの値に代入される。
'つまり、A列のセルの値に 1 が入るということ。
'
'二度目に「B列のセルの値が空欄でない」という条件が満たされた場合は、一度目に変数 N に 1 が代入されているので、
'N = N + 1 は N = 1 + 1 ということで、変数 N に 2 が代入される。
'
'B列のセルが空欄の場合は、if と End if の間にあるコードは実行されないので、
'結果的に、A列のセルに入る値は常に 1 からの連番になる。(B列の空欄セルは飛ばしてA列のセルに連番を入れることになる。)
'
End Sub

 

空欄セルは飛ばす

Sub B列を基準に連番_空欄セルも数える()
    Dim i As Long
    Dim N As Long
    For i = 1 To 5
        N = N + 1
        If Cells(i, "B").Value <> "" Then
            Cells(i, "A").Value = N
        End If
    Next i
'
'変数 N に N + 1 を代入する。
'宣言した直後は変数は 0 なので、 N + 1 は 0 + 1 ということで、 N = N + 1 は  N = 1 ということになり、
'変数 N に 1 が代入される。
'この場合の = は、左辺と右辺が等しいことを意味する等号ではない。右辺を左辺に代入することを意味する代入記号。
'
'Cells(i, "B").Value <> "" は、「B列のセルの値が空欄に等しくない(空欄ではない)」という意味。
'
'B列のセルが空欄でない場合、 if と End if の間にあるコードを実行する。
'変数 N をA列のセルに代入する。
'
'For Next の繰り返しのなかに N = N + 1 のコードがあるので、繰り返されるごとに変数 N が 1 ずつ増える。
'最初は 1 、次は 2 、次は 3 というように。
'
'その繰り返しのなかで、「B列のセルの値が空欄ではない」条件が満たされた場合、
'Cells(i, "A").Value = N のコードで、変数 N がA列のセルの値に代入される。
'繰り返しの最初なら 1 が、二度目なら 2、三度目なら 3 が変数 N に入っているので、その数がA列のセルの値に入ることになる。
'
'B列のセルが空欄の場合は、if と End if の間にあるコードは実行されないので、
'結果的に、A列のセルに入る値は、B列の空欄のセルも数えた数になる。
'(B列の空欄セルも飛ばさずに数えた連番をA列のセルに入れることになる。)
'
End Sub

空欄セルも数える

|

« Excel で連番の抜けをチェックする。 | トップページ | Excel でワークシート名を一覧にする VBA のコード »

コメント

=IF(B1="","",COUNTA($B$1:B1))

これをA1に入れて必要なところまでコピーすれば完成。VBAは必要ありません。

投稿: 通りすがり | 2021.03.26 12:26

コメントを書く



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




トラックバック


この記事へのトラックバック一覧です: Excel でB列に値が入っていたらA列に連番を入れる。:

« Excel で連番の抜けをチェックする。 | トップページ | Excel でワークシート名を一覧にする VBA のコード »