アプリ版:「スタンプのみでお礼する」機能のリリースについて

行削除した後の連番を崩れないようにできませんか?
関数では試してできてはいるのですが
結局関数をA列に作っておく必要があるのと削除していくと減っていくので
自分以外の方が作成しない可能性があるので
コードで削除時に作れればありがたいなと思います
Sub CommandButton1_Click()

Dim I, lRow As Long
Dim sht As Worksheet
Dim r0 As Integer

ComboBox1.ListIndex = 0
lRow = Cells(Rows.Count, "C").End(xlUp).Row 'C列の最終行を取得します。

For I = lRow To 2 Step -1 '最終行から2行目まで繰り返す。

If Me.ComboBox1 = "" Then
MsgBox "氏名が入力されてません"
Exit Sub
End If

If Cells(I, "C") = ComboBox1 Then 'C列の氏名を判定します。

Rows(I).Delete '該当する行を削除します。

End If
Next
’Unload UserForm3 ’今は停止中
End Sub

質問者からの補足コメント

  • すみません、連番崩れなくなったのですが
    削除した分だけ連番が残るんですが削除した分の連番消せないですか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/06/28 09:15
  • すみません、連番崩れなくなったのですが
    削除した分だけ連番が残るんですが削除した分の連番消せないですか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/07/01 11:22
  • ごめんなさいm(__)m
    どのコードに記載すればよいのでしょうか?
    行削除コードに追加でしょうか?

    No.3の回答に寄せられた補足コメントです。 補足日時:2023/07/06 17:54

A 回答 (4件)

> 現在、A2には=IF(B2="","",ROW()-1)を入れています


> A3に=if(RC[2]="", "",ROW()-1)でしょうか?
> それともA2?
Excel の参照形式がA1になっているなら、シートの連番が始まるセル(例えば2行目 / A2)に、名前の列”C"の記入の有無を見て連番を表記するとすれば
 =IF(C2="","",ROW()-1)
をシートのA列2行目のセル(A2)に書き込めばいいです。

VBA で作るのであれば、「ThisWorkbook」に例えば以下のコードを書いてやれば行を削除したときや氏名を追加したときなどシートに変更があった時このコードが実行されてA列の最終行の次の行に参照式が書き込まれます。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i As Long

Application.EnableEvents = False
With Sh
i = .Cells(10000, 3).End(xlUp).Row
.Cells(i + 1, 1).FormulaR1C1 = "=if(RC[2]="""", """",ROW()-1)"
End With
Application.EnableEvents = True
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2023/07/10 16:19

VBA関数が正常に動作するならそのままにして、A列に連番(上の番号に1を足す)を入れる参照式を入れておけばどうでしょうか?



C列に氏名が記入されているときのみ表示するように参照式を入れておけば番号は氏名が記入されていない行は表示されないので見苦しくならないと思います。例えば連番が2行目から始まっているとすれば
 =if(RC[2]="", "",ROW()-1)
ROW()は現在の行番号なので2行目からの場合-1で連番の数字を調整できます。作られた削除関数の最後にこの参照式をA列に書き込ませるようにすればいかがでしょうか。
この回答への補足あり
    • good
    • 0
この回答へのお礼

現在、A2には=IF(B2="","",ROW()-1)を入れています
A3に=if(RC[2]="", "",ROW()-1)でしょうか?
それともA2?

お礼日時:2023/07/07 09:22

ざっくりと。



Dim I, lRow As Long

これで、「I」と「lRow」をLongデータ型(整数)として使うってことのように思えちゃうけど、
・「I」は"なんか入れる"のに使うよ!←Variant型
・「lRow」は"整数として"使うよ!
って宣言になっちゃう。

「I」も整数として使うなら、
Dim I As Long, lRow As Long
って書くの。面倒くさいけどね。

質問のコードでは影響ないでしょうけど、頭の片隅にいれときましょ。
この回答への補足あり
    • good
    • 0
この回答へのお礼

なるほど~そうなんですね!
ありがとうございますm(__)m

お礼日時:2023/06/27 23:07

列の右端を定義


Const colMax As Long = 200

Rows(I).Delete

Range(Cells(I, 2), Cells(I, colMax)).Delete Shift:=xlUp
に変更

ってことでしょうか。


あと余談ですが、
Dim I, lRow As Long
だと I はバリアント型になると思いますが、それでよろしいでしょうか?
この回答への補足あり
    • good
    • 0
この回答へのお礼

出来ました!ありがとうございます!!
バリアント型・・・ド素人なので分かりませんm(__)m

お礼日時:2023/06/27 17:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!