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

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

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

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

Q&A

解決済

2回答

7512閲覧

Excel VBAでFor Nextがうまく回らない

sishou

総合スコア9

VBA

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

0グッド

0クリップ

投稿2019/08/29 04:04

編集2019/08/29 04:10

前提・実現したいこと

For Nextがきちんと回るようにしたい。

発生している問題・エラーメッセージ

お世話になります。
よろしくお願いします。
早速質問ですが、約130行ある表の中のE列の文字列の中からH列に入力されている文字(複数個あることを想定)を検索し、該当する文字だけを赤色にするというマクロを組もうとしています。
しかしながらNext文からFor文へ回らないという現象が発生してしまい、調べたのですが私の知識では解決策がわからなくなってしまいました。
具体的には下記ソースコードの19行目「Next j」から11行目の「For j = 2 To MaxRow」に戻らず、12行目の「Cells(i, 8).Select」に戻ってループしてしまいます。
この記述をどのように書き換えれば、11行目に戻るようになるでしょうか?
ご回答いただきますようお願いいたします。

該当のソースコード

Sub 文字列検索()
Dim MaxRow As Byte, MaxRow2 As Byte, i As Byte, chara As String, length As Byte, j As Byte, start As Integer
MaxRow = Range("A1").End(xlDown).Row - 1
If Range("H1").End(xlDown).Row > 200 Then
MsgBox "検索文字が入力されていません。"
Exit Sub
End If
MaxRow2 = Range("H1").End(xlDown).Row
For i = 2 To MaxRow2
chara = Cells(i, 8)
length = Len(Cells(i, 8))
For j = 2 To MaxRow
Cells(i, 8).Select
start = InStr(Cells(j, 5), Cells(i, 8))
If start = 0 Then
start = 1000
Else
Cells(j, 5).Characters(start:=start, length:=length).Font.ColorIndex = 3
End If
Next j
Next i
End Sub

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

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

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

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

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

guest

回答2

0

ベストアンサー

それが正しい動きです。
ステップ実行してもForの行には戻りませんが、変数jはインクリメントされているはずです。

投稿2019/08/29 04:20

ttyp03

総合スコア16998

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

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

sishou

2019/08/29 05:11

指摘された件を受けて見直したところ、H列の最終行の値の所得の仕方が正しくなく、それによってiでのFor~Nextが想定した回数回っていないのが不具合の原因だとわかりました。 まったく見当違いの質問で申し訳ないです。 ご回答いただきましてありがとうございました。
guest

0

>11行目の「For j = 2 To MaxRow」に戻らず、12行目の「Cells(i, 8).Select」に戻って
>ループしてしまいます。
それで何が不都合なのでしょう、
For・・・のところは2回目以降、黄色くならないのが正常です。

ExcelVBA

1Sub test() 2 Dim c As Range 3 Dim strKeyWord As String 4 Dim i As Long, j As Long, k As Long 5 Dim s As String 6 7 strKeyWord = Cells(Rows.Count, "H").End(xlUp).Value 8 k = Len(strKeyWord) 9 If k = 0 Then 10 MsgBox "検索文字が入力されていません。" 11 Exit Sub 12 End If 13 14 For Each c In Range(Cells(1, "E"), Cells(Rows.Count, "E").End(xlUp)) 15 s = c.Value 16 i = 1 17 Do 18 j = InStr(i, s, strKeyWord) 19 If j > 0 Then 20 c.Characters(j, k).Font.Color = vbRed 21 i = j + 1 22 Else 23 Exit Do 24 End If 25 Loop 26 Next 27End Sub

やりたいことはこういう事でしょうか?
探す文字列も複数あるのですかね?

投稿2019/08/29 04:28

編集2019/08/29 05:04
mattuwan

総合スコア2136

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

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

sishou

2019/08/29 05:11

指摘された件を受けて見直したところ、H列の最終行の値の所得の仕方が正しくなく、それによってiでのFor~Nextが想定した回数回っていないのが不具合の原因だとわかりました。 まったく見当違いの質問で申し訳ないです。 ご回答いただきましてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問