質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1118閲覧

上のセルと値が同じなら数を連番にしたい

dmg

総合スコア8

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/09/21 12:06

編集2021/09/21 12:07

いつもこちらにお世話になっております。
画像のようにA列を対象に、Aの値が下の値と同じ場合に
B列の数字を連続で入れるコードを書きたいです。

A列には200行、値が入る予定です。

VBA

1 2 '//使用セルの最終行を取得 3 Dim fin_line As Long, k 4 With ws1.UsedRange 5 fin_line = .Rows(.Rows.Count).Row 6 End With 7 For k = 2 To fin_line 8Dim range1 As Object 9 i = 1 10 For Each range1 In ws.Cells(k, 1) 11 ws.Activate 12 ws.Range("A1").Activate 13 14 ActiveCell.Offset(1, 0).Activate 15 If ActiveCell.Value = ws.Cells(k, 1) Then 16 ws1.Cells(k, 2).Value = k - 1 17 Else 18 ws1.Cells(k, 2).Value = i 19 End If 20 Next range1 21      Next k

For Each range1 In ws.Cells(k, 1)
上記でアプリケーション定義、オブジェクト定義のエラーが出てしまいます。
知恵を貸していただけると幸いです

希望結果

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

まずwsとws1が別物なのかタイプミスなのかをはっきりさせましょう。
(Option Explicitを指定した方がいいと思います。)

なお、やりたいことはもう少しシンプルに書けそうな気がします。

vba

1Sub sample() 2 Dim ws As Worksheet 3 Set ws = ActiveSheet 4 5 Dim fin_line As Long, k 6 With ws.UsedRange 7 fin_line = .Rows(.Rows.Count).Row 8 End With 9 10 ws.Cells(1, 2) = 1 11 12 For k = 2 To fin_line 13 If ws.Cells(k, 1) <> ws.Cells(k - 1, 1) Then 14 ws.Cells(k, 2) = 1 15 Else 16 ws.Cells(k, 2) = ws.Cells(k - 1, 2) + 1 17 End If 18 Next k 19End Sub

mayu-さんのを借りるとこんな風にもできそうです。

VBA

1Sub sample() 2 With ThisWorkbook.Worksheets(1).UsedRange.Resize(, 1).Offset(, 1) 3 .Value = 1 4 .Resize(.Rows.Count - 1).Offset(1).FormulaR1C1 = "=IF(R[-1]C[-1]=RC[-1],R[-1]C+1,1)" 5 .Value = .Value 6 End With 7End Sub

投稿2021/09/21 13:26

編集2021/09/21 13:48
jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dmg

2021/09/21 13:54

申し訳ございません。 本当はシートにに出力しよう思っていたので、コードが残っておりました。 失礼いたしました ws.Cells(k, 2) = ws.Cells(k - 1, 2) + 1  こちらで型が一致しませんになります
jinoji

2021/09/21 14:03

シートの何行目で起きますか? F8キーでステップ実行してみてください。
dmg

2021/09/21 14:42 編集

シートの2行目 連番になるところです。 A列の値を変えて再度行ってみましたが、連番になると止まってしまいます
jinoji

2021/09/21 14:29

数字を変えてみました、とはどういう意味ですか? 画像の通りのシートになっていますか?
dmg

2021/09/21 14:42

失礼いたしました 数字ではなく値をでした。 今は画像通りに戻しております
dmg

2021/09/21 15:10

すみませんできました! ありがとうございました! お手を煩わせて申し訳ございません。
guest

0

画像のようにA列を対象に、Aの値が下の値と同じ場合に
B列の数字を連続で入れるコードを書きたいです。

ご提示いただいたデータサンプル画像、念のために確認しますけど
A8セルの値が ABC になる場合、B8セルの値は( 登場回数の3ではなく )1でいいのですよね。

VBA

1Sub sample() 2 Dim ws1 As Excel.Worksheet 3 Set ws1 = ThisWorkbook.Worksheets(1) 4 5 Dim fin_line As Long 6 With ws1.UsedRange 7 fin_line = .Rows(.Rows.Count).Row 8 End With 9 If (fin_line < 2) Then Exit Sub 10 11 ws1.Range("B1").Value = 1 12 With ws1.Range("B2").Resize(fin_line - 1) 13 .FormulaR1C1 = "=IF(RC[-1] <> R[-1]C[-1], 1, R[-1]C + 1)" 14 .Value = .Value 15 End With 16End Sub

投稿2021/09/21 13:13

mayu-

総合スコア335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dmg

2021/09/21 13:55

ご回答ありがとうございます。 全て1になってしまいました。。
mayu-

2021/09/21 15:20 編集

おや。 jinojiさんも仰っていますけど、シートのA列にサンプル画像どおりのデータが記入されているでしょうか。 ご確認お願いいたしますね。
dmg

2021/09/21 15:08

mayu-様のコードでは期待結果が得られなかったです。。
mayu-

2021/09/21 15:20 編集

そうですか、残念です。 私はお力になれませんでしたけど、jinojiさんのアドバイスで解決できたようですし良かったですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問