エクセルのSheet1のB列にSheet2の内容をコピーして、(ここまではできました)
Sheet1のB列に入ってきたデータの横(A列に)連番を振りたいと思っています。
そのため、以下のように作ってみたのですが、
A列に表示される連番が現在のB列の最後の数“54”をA列全て(B列にデータがあるところ)に表示してしまいます。
どの部分が悪いのかさっぱりわからず、どのように修正すべきかもわからず・・・困ってしまっています。
よろしくお願いします。
Dim i As Range
Dim mycount As Range
Set mycount = Application.Intersect(Target, Me.Range("b:b"))
If mycount Is Nothing Then
Exit Sub
End If
Application.EnableEvents = False
For Each i In mycount
If IsEmpty(i.Value) Then
i.Offset(0, -1).ClearContents
Else
i.Offset(0, -1).Value = Application.WorksheetFunction.CountA(Range("b2:b200"))
End If
Next i
Application.EnableEvents = True
End Sub
No.2ベストアンサー
- 回答日時:
#1の方の方法でも大丈夫ですが、変数でカウントした方が高速です。
'連番カウンタ初期値
lngCnt = 1
For Each i In mycount
If IsEmpty(i.Value) Then
i.Offset(0, -1).ClearContents
Else
'カウンタ値書込み
i.Offset(0, -1).Value = lngCnt
'カウントアップ
lngCnt = lngCnt + 1
End If
Next i
以下は、余談ですが。。
> Set mycount = Application.Intersect(Target, Me.Range("b:b"))
これは Target が B列 にあるか調べる方法ですね。もし、Target が B列にある場合、オブジェクト変数 mycount には B:B 、つまり B列全体がセットされます。これを For Each i in mycount ~ next i でセルを一個一個チェックさせると65536回ループが発生します。例えば、データが1件でも65536回チェックすることになります。
Set myCount = Application.Intersect(Target, Me.Range("b:b"))
If myCount Is Nothing Then
Exit Sub
End if
'再定義
Set myCount = Range(Range("B1"),Range("B1").End(xlDown))
とした方が良いかと思います。
また、Application.EnableEvents を使用する場合、例外処理を必ず書きましょう。
例えば、
On Error Goto ErrorHandler
Application.EnableEvents = False
(処理)
ExitHandler:
Exit Sub
ErrorHandler:
Application.EnableEvents = True
Resume ExitHandler
End Sub
のようにエラーが発生したら、ラベルErrorHandler にジャンプして EnableEventsを元に戻して終了させます。
とても詳しい解説をありがとうございます。
VBAはまったくの初心者で、本当にお恥ずかしい限りです。
教えていただいたコードでもう一度作ってみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
エクセル 文字数 多い順 並...
-
エクセルで文字が混じった数字...
-
エクセル(勝手に太字になる)
-
Excelで半角の文字を含むセルを...
-
エクセル 時間帯の重複の有無
-
VBAで文字列を数値に変換したい
-
2つのエクセルのデータを同じよ...
-
「B列が日曜の場合」C列に/...
-
エクセルの並び変えで、空白セ...
-
エクセル 同じ値を探して隣の...
-
エクセルの表から正の数、負の...
-
エクセルのセル内の文字の一部...
-
A列がない・・・A列が非表示に...
-
【VBA】特定列に文字が入ってい...
-
お店に入るために行列に並んで...
-
エクセルの列を範囲選択しての...
-
【ACCESS/必須条件とOR条件を組...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセル 文字数 多い順 並...
-
VBAで文字列を数値に変換したい
-
エクセル(勝手に太字になる)
-
エクセルで文字が混じった数字...
-
「B列が日曜の場合」C列に/...
-
エクセルの表から正の数、負の...
-
Excelで半角の文字を含むセルを...
-
エクセル 同じ値を探して隣の...
-
Excel、市から登録している住所...
-
エクセルの項目軸を左寄せにしたい
-
EXCELで 一桁の数値を二桁に
-
VBA 連続行データを5行ずつ隣の...
-
エクセル 時間帯の重複の有無
-
オートフィルターをかけ、#N/A...
-
エクセルで、列の空欄に隣の列...
-
A列がない・・・A列が非表示に...
おすすめ情報