Excel VBA質問箱 IV

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

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


3021 / 13644 ツリー ←次へ | 前へ→

【64748】特定のセルを対象から外して連番を振る方法 初心者 10/3/11(木) 16:39 質問[未読]
【64753】Re:特定のセルを対象から外して連番を振る... kei 10/3/11(木) 22:00 回答[未読]
【64755】Re:特定のセルを対象から外して連番を振る... みかこ 10/3/12(金) 10:50 質問[未読]
【64757】Re:特定のセルを対象から外して連番を振る... kei 10/3/12(金) 11:04 発言[未読]
【64758】Re:特定のセルを対象から外して連番を振る... みかこ 10/3/12(金) 11:10 お礼[未読]

【64748】特定のセルを対象から外して連番を振る方...
質問  初心者  - 10/3/11(木) 16:39 -

引用なし
パスワード
   いつもお世話になっております。
本日も難問に当ってしまった為、投稿させていただきました。

以下の条件を含む連番を振り直すマクロを作りたいと思っています。

▼条件
1. 途中でコピーによって行が追加された場合
1. 連番を振り直すのは1列のみ
2. 特定のセルには番号を振らない
   ・空白セル
   ・グレイのセル
   ・見出しが入ったセル

<参考>
  A     B     C
1 ◎見出し
2  1
3  2
4  3
5  4
6 ※グレイのセル
7  5
8  6
9 ※空白セル
10 7


▽以下までは作ることができました。
・連番が既にセルに入力されている時、セル・行を削除すると連番を振りなおす。

Sub Test()
 Dim f As Long
 Dim Lrow As Long
 Dim myNo() As Long
 With Worksheets("Sheet1")
    Lrow = .Range("A" & CStr(Rows.Count)).End(xlUp).Row
    If Lrow = 1 Then Exit Sub
    ReDim myNo(1 To Lrow, 1 To 1)
    For f = 1 To Lrow
       myNo(f, 1) = f
    Next
    .Range("A2:A" & CStr(Lrow)).Value = myNo
 End With
End Sub


ここから上記条件を含めてカスタマイズしたいと思います。
特定のセルを飛ばす(対象から外す)場合、はどのような書き方がよろしいでしょうか?
"見出しが入ったセル"はあまりにも条件として漠然としている為、
あらかじめフォーマットを統一したほうがいいでしょうか?(たとえば頭に”▼”や”◎”をつけるなど)

ご教授お願いいたします。

【64753】Re:特定のセルを対象から外して連番を振...
回答  kei  - 10/3/11(木) 22:00 -

引用なし
パスワード
   ▼初心者 さん:
わたしも初心者です。^^
記述されている Sub Test() を実行すると、空白セルまで連番が振られますので条件を否定します。。

1.空白セルは空白とする。
2.グレイのセル ColorIndex = 15 は、連番を振らずにそのままにする。
3.見出しが入ったセル (A1 のみかしら?)は、そのままにする。

せっかく配列が記述してありましたので、改造に取り組みましたが、、、
配列を吐き出すと、空白セルに "0" が表示されます。><
一応配列の改造分です。。

Sub Test()
 Dim i As Long
 Dim f As Long
 Dim Lrow As Long
 Dim myNo() As Long
 With Worksheets("Sheet1")
    Lrow = .Range("A" & CStr(Rows.Count)).End(xlUp).Row - 1
    If Lrow = 1 Then Exit Sub
    ReDim myNo(1 To Lrow, 1 To 1)
    i = 1
    For f = i To Lrow
      If Not (Cells(f + 1, 1).Interior.ColorIndex = 15 Or Cells(f + 1, 1).Value = "") Then
        myNo(f, 1) = i
       i = i + 1
      ElseIf Cells(f + 1, 1).Value = "" Then
        myNo(f, 1) = Empty '← ここの表現が悪いのかしら?
      Else
        myNo(f, 1) = Cells(f + 1, 1)
      End If
    Next
    .Range("A2:A" & CStr(Lrow) + 1).Value = myNo
 End With
End Sub

上から順番にセルを判定して連番を振るしか対応しきれず、For Each Next で作成しました。

Sub Test2()
  Dim i As Long
  Dim Lrow As Long
  Dim myRange As Range
  Dim c As Range
  
  Lrow = Range("A" & Rows.Count).End(xlUp).Row
  Set myRange = Range("A2", Range("A" & Rows.Count).End(xlUp))
  For Each c In myRange
    With c
      If Not (.Interior.ColorIndex = 15 Or .Value = "") Then
        .Value = i + 1
        i = i + 1
      End If
    End With
  Next
End Sub

見出しの入ったセルは、A1 セルだけでしょうか?
他にあれば、見出しの特徴はなにかしら?

【64755】Re:特定のセルを対象から外して連番を振...
質問  みかこ  - 10/3/12(金) 10:50 -

引用なし
パスワード
   おじゃまします。
初心者さん 横からすみません。
便乗質問させて下さい。

If Not (.Interior.ColorIndex = 15 Or .Value = "") Thenの
バックカラーが白以外 または、空白ならにしたいのですが
白以外は、どう記述すれば、よいでしょうか?

横から、申し訳有りません。

【64757】Re:特定のセルを対象から外して連番を振...
発言  kei  - 10/3/12(金) 11:04 -

引用なし
パスワード
   ▼みかこ さん:
こんにちわ。

ColorIndex = 2 が白色です。

ColorIndex = xlNone が無色、つまり「塗りつぶしなし」です。

ですから、白以外で空白は

If (.Interior.ColorIndex <> 2 Or .Value = "") Then

で良いと思います。。

【64758】Re:特定のセルを対象から外して連番を振...
お礼  みかこ  - 10/3/12(金) 11:10 -

引用なし
パスワード
   keiさん

大変勉強になりました。
有り難うございました。

初心者さん 横から失礼致しました。

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