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
| 固定リンク
コメント
=IF(B1="","",COUNTA($B$1:B1))
これをA1に入れて必要なところまでコピーすれば完成。VBAは必要ありません。
投稿: 通りすがり | 2021.03.26 12:26