[[20141024105445]] 『2つの選択範囲に連番を振りたいです。』(pomy) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『2つの選択範囲に連番を振りたいです。』(pomy)

vbaが初心者のため、ご教授お願いします。

一つのシートに2つの表があります。
C列に入力があった場合、B列に其々”1”から始まる連番を入れたいです。

調べて下記のコードをコピーしましたが、
下記のコードではB2:B31にしか連番が付与されません。
B33:B59にも”1”から始まる連番を入れるには、どの様に修正したら良いでしょうか?

宜しくお願い致します。

B1タイトル  B2:B31 
B32タイトル B33:B59

−−−−−
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim i As Long

    i = Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Row
        If Cells(i, "C") <> "" Then
            Cells(i, "B") = i - 1
        End If
End Sub
−−−−−

< 使用 Excel:Excel2010、使用 OS:Windows7 >


ロジック、何かおかしいですよ? 何行目に入力されるか判らないのに、なぜB列終端+1行目を調べているのです?
(B列とは関係無さそうな次の行のC列が空欄だから、値セットされなくなっていると思われる)

新たな番号を振るだけなら以下。

        If i < 32 Then
            Cells(i, "B").Value = i - 1
        ElseIf 32 < Target.Row Then
            Cells(i, "B").Value = i - 32
        End If
(???) 2014/10/24(金) 14:20

お返事ありがとうございます。

教えて頂いたコードに変更してみましたが、どうもおかしいです。

B1タイトル  B2:B31  の表は
 →C列に入力があるとB列が空欄で
  C列に入力がないと連番が振られています。

B32タイトル B33:B59 の表は
 →連番が振られていません。

『 i = Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Row』←がおかしいのでしょうか?

−−−−−
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim i As Long

    i = Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Row

        If i < 32 Then
            Cells(i, "B").Value = i - 1
        ElseIf 32 < Target.Row Then
            Cells(i, "B").Value = i - 32
        End If
End Sub

(pomy) 2014/10/24(金) 15:03


If Cells(i, "C") <> "" Then の判定を消して良いのですか? 入力があったら番号、ならば必要と思いますが。

ロジックがおかしいのは、現在の行位置(Targetから判りますね)を判定に使っていない点。正しいですか?
それと、i にはB列に値のある最下行+1が入りますが、これは思った通りの内容ですか?
具体的に、どういう状態でどのセルにどういう値を入力すると、どこに幾つの値を代入して欲しいのですか?
(???) 2014/10/24(金) 15:31


何もわかっていない上に言葉足らずですみません。

If Cells(i, "C") <> "" Then は必要ですね。

やりたい事は、
下記の様に1つのシートに、2つの表があります。
C列に入力がある時のみ、隣のB列のセルに連番を振りたいです。

表?@ B2:B31 表?AB33:B59 の範囲は固定ですが
中身の入力される件数は毎回違います。

わかりにくい説明ですみませんが
宜しくお願いいたします。

表1)    B列 / C列
1行目(タイトル)
2行目    1    あああ
3行目    2    あああ   
4行目    3    あああ
5行目
↓省略

31行目   -表の最終行-

表2)
32行目(タイトル)
33行目    1    あああ    
34行目    2    あああ
35行目    3    あああ
36行目
↓省略

59行目   -表の最終行-

(pomy) 2014/10/24(金) 16:13


 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long

    If Target.Column <> 3 Then Exit Sub     'C列

    Application.EnableEvents = False
    For i = 1 To Target.Count
        With Target(i, 1)
            If .Value = "" Then
                .Offset(0, -1).Value = ""
            Else
                If .Row < 32 Then
                    .Offset(0, -1).Value = .Row - 1
                ElseIf 32 < .Row Then
                    .Offset(0, -1).Value = .Row - 32
                End If
            End If
        End With
    Next i
    Application.EnableEvents = True
End Sub
(???) 2014/10/24(金) 17:08

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.