Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5497 / 76732 ←次へ | 前へ→

【76848】Re:連番設定
発言  β  - 15/3/24(火) 9:22 -

引用なし
パスワード
   おはようございます。

提示コードは、最初の文字群に番号が振られないというところはありますが
それはさておき。

B1 に =IF(A1="","",1)
B2 に =IF(A2="","",IF(A2=A1,B1+1,1))

この B2 を下にフィルコピー。

これで求める結果がでますね。

この操作をそのままマクロ化して、最後に B列を数式から値変換。
これが1つの方法ですね。

あるいは、上記の数式がやっている判断と処理、これをVBAコード化する手もあります。

Sub Test1()
  
  If Not IsEmpty(Range("A1")) Then
    Range("B1").Value = 1
  Else
    Range("B1").ClearContents
  End If
  
  With Range("A2", Range("A" & Rows.Count).End(xlUp)).Offset(, 1)
    .Formula = "=IF(A2="""","""",IF(A2=A1,B1+1,1))"
    .Value = .Value
  End With
  
End Sub

Sub Test2()
  Dim c As Range
  
  If Not IsEmpty(Range("A1")) Then
    Range("B1").Value = 1
  Else
    Range("B1").ClearContents
  End If
  
  For Each c In Range("A2", Range("A" & Rows.Count).End(xlUp))
    If IsEmpty(c) Then
      c.Offset(, 1).ClearContents
    Else
      If c.Value <> c.Offset(-1).Value Then
        c.Offset(, 1).Value = 1
      Else
        c.Offset(, 1).Value = c.Offset(-1, 1).Value + 1
      End If
    End If
  Next
  
End Sub

190 hits

【76847】連番設定 gg56 15/3/24(火) 8:20 質問[未読]
【76848】Re:連番設定 β 15/3/24(火) 9:22 発言[未読]
【76850】Re:連番設定 gg56 15/3/24(火) 12:42 お礼[未読]

5497 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free