
VBAの初心者です。色々調べたのですがわからなかったので、こちらで質問させていただきます。
A列にある文字列に対して、B列にある単語を抽出し、赤字で表示させるというマクロを組みたいです。
B列1行目の単語を抽出させるところまでは何とかなったのですが、B列2行目へ処理を移行?させるやり方がわかりません。
どなたかご教授いただけますと幸いです。
----------------------------------------------
Sub test2()
Dim rng As Range, cl As Range, i As Long
With ActiveSheet
Set rng = .Range("a1:a100")
txt = Range("b1").Value
For Each cl In rng
s = 1
While s <= Len(cl)
p = InStr(s, cl, txt, 1)
If p > 0 Then
cl.Characters(p, Len(txt)) _
.Font.Color = vbRed
s = s + p
Else
GoTo p1
End If
Wend
p1:
Next
End With
End Sub
----------------------------------------------
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
No.5です。
前回のコードは消去して↓のコードに変更してください。
1セル内に該当文字列が複数ある場合に対処できていませんでした。
Sub Sample3()
Dim i As Long, k As Long, myStr As String
Dim myFound As Range, myFirst As Range
For i = 1 To Cells(Rows.Count, "B").End(xlUp).Row
myStr = Cells(i, "B")
Set myFound = Range("A:A").Find(What:=myStr, LookIn:=xlValues, LookAt:=xlPart)
If Not myFound Is Nothing Then
Set myFirst = myFound
GoTo 処理
Do
Set myFound = Range("A:A").FindNext(after:=myFound)
If myFound.Address = myFirst.Address Then Exit Do
GoTo 処理
処理:
For k = 1 To Len(myFound)
If Mid(myFound, k, Len(myStr)) = myStr Then
myFound.Characters(Start:=k, Length:=Len(myStr)).Font.ColorIndex = 3
End If
Next k
Loop
End If
Next i
End Sub
どうも失礼しました。m(_ _)m
No.5
- 回答日時:
こんにちは!
すでに回答は出ていますので、参考程度で・・・
Sub Sample1()
Dim i As Long, myFound As Range, myFirst As Range
For i = 1 To Cells(Rows.Count, "B").End(xlUp).Row
Set myFound = Range("A:A").Find(What:=Cells(i, "B"), LookIn:=xlValues, LookAt:=xlPart)
If Not myFound Is Nothing Then
Set myFirst = myFound
myFound.Characters(Start:=InStr(myFound, Cells(i, "B")), Length:=Len(Cells(i, "B"))).Font.ColorIndex = 3
Do
Set myFound = Range("A:A").FindNext(after:=myFound)
If myFound.Address = myFirst.Address Then Exit Do
myFound.Characters(Start:=InStr(myFound, Cells(i, "B")), Length:=Len(Cells(i, "B"))).Font.ColorIndex = 3
Loop
End If
Next i
End Sub
こんな感じではどうでしょうか?m(_ _)m
No.4
- 回答日時:
ご質問のマクロそのものは、時々出てくるものだと思います。
私自身、以前から作ってみたいと考えていました。
今回、私が作ったものは、ちょっと違ったテーストがあります。
それは、「正規表現」が使えるということです。ちょっと変えると、かなり複雑な色付けも可能になります。もし、興味がありましたら、ご紹介します。
'//
Sub FindWords()
Dim c As Range
Dim x As Variant, f As Long, l As Long
Dim i As Long
Dim Re As Object
Dim FirstAddress As String
Dim Matches, m As Variant
Set Re = CreateObject("VBScript.RegExp")
Re.Global = True
With Worksheets("Sheet2").Columns(1)
x = .Range(.Cells(1, 2), .Cells(Rows.Count, 2).End(xlUp)).Value
x = Application.Transpose(x)
For i = LBound(x) To UBound(x)
Set c = .Find(What:=Trim(x(i)), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns)
If Not c Is Nothing Then
FirstAddress = c.Address
Do
Set c = .FindNext(c)
Re.Pattern = x(i)
Set Matches = Re.Execute(c.Value)
For Each m In Matches
f = m.firstindex + 1: l = m.Length
c.Characters(f, l).Font.Color = vbRed
Next m
If c.Address = FirstAddress Then Exit Do
Loop Until c Is Nothing
End If
Next i
End With
Set Re = Nothing
End Sub
以下は、コマンドをちょっと間違えてしまいましたが、日本[一-龠]* とすれば、正規表現で日本のみにも色が付きます。


No.3
- 回答日時:
以下のようにしてください。
---------------------------------------
Sub Macro1()
Dim i As Long
Dim rowmax As Long
Dim txt As Variant
Dim s As Variant
Dim p As Variant
With ActiveSheet
rowmax = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To rowmax
txt = Cells(i, 2)
If txt <> "" Then
s = 1
Do While True
p = InStr(s, Cells(i, 1), txt)
If p > 0 Then
Cells(i, 1).Characters(p, Len(txt)).Font.Color = vbRed
s = s + Len(txt)
Else
Exit Do
End If
Loop
End If
Next
End With
End Sub
------------------------------------
私は日本人です。日本が好きです。 ・・・日本 が2か所赤色に変換
ご飯がおいしいからです。 ・・・ご飯 が1か所赤色に変換
を確認済みです。
No.2
- 回答日時:
×これを下記のものに変更すればokです。
◎これを下記のように変更すればokです。
.Range("a1:j100")は例です。
hiro40199210さま
ご回答、検証までしていただきありがとうございます!
ただ私の質問の仕方が悪かったため、意図が伝わっておりませんでした。
すみません。
やりたいことは、
・A列に文章がある
例)A1:私は日本人です。日本が好きです。
A2:ご飯がおいしいからです。
・B列に単語がある
例)B1:日本
B2:ご飯
ここでA列の文章中にある「日本」と「ご飯」を赤字に変換させたいのです。
伝わりましたでしょうか?
お手数おかけしますが、再度ご教授いただけないでしょうか。
No.1
- 回答日時:
Set rng = .Range("a1:a100")
これを下記のものに変更すればokです。
Set rng = .Range("a1:j100")
JMEV
TQBC
NVFO
MOLK
WRVL
FGNM
ランダムなアルファベット四文字の文字列をa1:j10000(10万セル)に入れて、検索値[AB]をにして検証してみました。
0.7秒程度で処理が終了しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Excel(エクセル) VBA 1 2023/04/27 13:37
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
VBAでCOPYを繰り返すと、処理が...
-
エクセルの改行について
-
Excelマクロで使うVBAコードを...
-
ダブルクリックで貼り付けた画...
-
【マクロ】開いているブックの...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】変数を使った、文字...
-
エクセルのVBAコードについて教...
-
ワードの図形にマクロを登録で...
-
【マクロ】値を渡されたプロシ...
-
【マクロ】モジュール変数の記...
-
Vba FileSystemObject オブジェ...
-
VBAの質問(Msgboxについて)です
-
Excelのマクロについて教えてく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理 特定の文字以降を...
-
VBA テキストボックスを選択状...
-
[コンパイルエラー 修飾子が不...
-
Access VBA エラー2448について
-
verilog HDLについての質問です...
-
分数の計算のプログラミングです。
-
MS-DOSバッチファイルコマンド...
-
SQLでテキストボックスの文字を...
-
文字コードを指定して・・
-
VBAで繰り返し持ってきた文章の...
-
フォームのResizeイベントについて
-
Fileの読み込み処理について
-
teratermで、ファイル名をinput...
-
VBのFileOpenとInputというコ...
-
findを使うのか?
-
キーが重複しているデータの統...
-
アスキー変換 と 逆変換について
-
テキストboxに数値を入れる...
-
Dreamweaverでtitleタグ内の一...
-
Ubuntuのシェルスクリプトのgre...
おすすめ情報
hiro40199210さま
ご回答、検証までしていただきありがとうございます!
ただ私の質問の仕方が悪かったため、意図が伝わっておりませんでした。
すみません。
やりたいことは、
・A列に文章がある
例)A1:私は日本人です。日本が好きです。
A2:ご飯がおいしいからです。
・B列に単語がある
例)B1:日本
B2:ご飯
ここでA列の文章中にある「日本」と「ご飯」を赤字に変換させたいのです。
伝わりましたでしょうか?
お手数おかけしますが、再度ご教授いただけないでしょうか。