エクセルで特定の複数の特定の文字の色を変更したいです。
複数の文字列の色の変更の仕方については調べたのですが
変更したい文字列が複数でそれぞれ色指定が異なります。
内、ひとつは 『セル内の"→"以降の文字列』 を指定して
文字色を赤に変更したいのです。
変更したい文字列 『★とYY』を青に変えるのは下記で
できました。
(1) 『セル内の"→"以降の文字列』 を指定して文字色を赤に変更
(2) 範囲指定を開いているシート全体にする
という部分を加えたいです。
よろしくお願いいたします。
Sub Sumple()
Dim myReg As Object
Dim Match As Variant
Dim r As Range
Dim st As String
Set myReg = CreateObject("VBScript.Regexp")
myReg.Pattern = "★|YY"
myReg.Global = True
For Each r In Range("A1:C10") ' ←範囲はActiveSheetにしたい
st = r.Value
If myReg.Test(st) Then
For Each Match In myReg.Execute(st)
r.Characters(Start:=Match.Firstindex + 1, Length:=Match.Length).Font.ColorIndex = -3394816
' フォントカラーを青
Next
End If
Next
Set myReg = Nothing
End Sub
No.4ベストアンサー
- 回答日時:
No.2です。
基本的に他人様がお考えのコードに手を加えるのは好みでないので、
新たに作ってみました。
今回も
>UsedRange
を使っています。
ごくごくオーソドックスにやっています。
Sub Sample2()
Dim c As Range, str1 As String, str2 As String
str1 = "★"
str2 = "YY"
For Each c In ActiveSheet.UsedRange
If InStr(c, str1) > 0 Then
c.Characters(Start:=InStr(c, str1), Length:=Len(str1)).Font.ColorIndex = 5
End If
If InStr(c, str2) > 0 Then
c.Characters(Start:=InStr(c, str2), Length:=Len(str2)).Font.ColorIndex = 5
End If
If InStr(c, "→") > 0 Then
c.Characters(Start:=InStr(c, "→") + 1, Length:=Len(c)).Font.ColorIndex = 3
End If
Next c
End Sub
※ 「★」や「YY」が他の文字列に置き換わっても str1 や str2 の部分でセットするだけで
何文字でも対応できるようにしています。
1セルに「★」や「YY」は複数回出現しないという前提です。
Sub Sample2()
Dim c As Range, str1 As String, str2 As String
str1 = "★"
str2 = "YY"
For Each c In ActiveSheet.UsedRange
If InStr(c, str1) > 0 Then
c.Characters(Start:=InStr(c, str1), Length:=Len(str1)).Font.ColorIndex = 5
End If
If InStr(c, str2) > 0 Then
c.Characters(Start:=InStr(c, str2), Length:=Len(str2)).Font.ColorIndex = 5
End If
If InStr(c, "→") > 0 Then
c.Characters(Start:=InStr(c, "→") + 1, Length:=Len(c)).Font.ColorIndex = 3
End If
Next c
End Sub
こんなんではどうでしょうか?m(_ _)m
ありがとうございます。
コードの書き方は、人それぞれで色々書き方があるのは知っているのですが・・・
拾ってきたコードを組み合わせる時に書き方が異なるものだと上手く組み合わせられなくて苦労しています。
今回、通しで書いて頂いたので、また比較して勉強することができます。
ありがとうございました。
No.3
- 回答日時:
とりあえずまず「出来る」ことを目的にして、赤くするマクロと青くするマクロを2本分けて作成してください。
Sub 青くする()
Dim myReg As Object
Dim Match As Variant
Dim r As Range
Dim st As String
Set myReg = CreateObject("VBScript.Regexp")
myReg.Pattern = "★|YY"
myReg.Global = True
for each r in cells.specialcells(xlcelltypeconstants) ' ←範囲はActiveSheetにしたい
st = r.Value
If myReg.Test(st) Then
For Each Match In myReg.Execute(st)
r.Characters(Start:=Match.Firstindex + 1, Length:=Match.Length).Font.color = vbblue
' フォントカラーを青
Next
End If
Next
Set myReg = Nothing
End Sub
Sub 赤くする()
Dim myReg As Object
Dim Match As Variant
Dim r As Range
Dim st As String
Set myReg = CreateObject("VBScript.Regexp")
myReg.Pattern = "★|YY"
myReg.Global = True
For Each r In ActiveSheet.UsedRange
if r <> "" then
st = r.Value
If myReg.Test(st) Then
For Each Match In myReg.Execute(st)
r.Characters(Start:=Match.Firstindex + 1, Length:=Match.Length).Font.color = vbred
' フォントカラーを赤
Next
End If
end if
Next
Set myReg = Nothing
End Sub
この2本をどうやって一本のマクロの中に仕込むかといった「応用問題」は、もうちょっとベーシックな部分をスキルアップしてからの課題にしたほうがよいと思います。
#参考
specialcells
エクセル画面でCtrl+Gを押し、更にセル選択をクリックして現れるダイアログに従って、所定のセルを拾い上げる機能を利用します
ただし、シート上に指定条件(「セル選択」をクリックして現れるダイアログで指定した条件、をマクロで表現した条件 今回ならxlcelltypeconstants)に合致するセルが存在しないと、エラーになります。具体的には、全く何も記入していない空っぽシートで今回回答したマクロを使用しようとすると、マクロがエラーになります
usedrange
シート上で使用されているセル範囲を含む矩形の(四角い)セル範囲を取得します
ただしたとえばセルがまばらに埋まってる場合に、その全部を含む四角いセル範囲を取得してしまうので、隙間の空っぽのセルも範囲に含まれます
これらの命令の具体的な機能については、作成したマクロ上で分からない単語にカーソルを入れてF1キーを押し、それぞれの命令のヘルプをまず読んで何をしようとしてるのか調べることから始める習慣をぜひ身につけてください。
#参考
今は「動くマクロ」をお膳立てして貰わないと、ご自分じゃまだほとんど先に進めない状況という事でしょうか。
でもネットなどで拾ったマクロをダメ元で動かしてみて、「動いたーダメだった―」と一喜一憂してるだけじゃ、全然進歩がありませんよね。
specialcellsとかusedrangeみたいな基本機能は、ある程度「マクロ以前にエクセルそのものの知識」が必要な部分もあります。そういうのは、エクセルやエクセルVBAの「初めての」タイプの参考書等を、ある程度目を通しておくのも良いんじゃないかと思います。
また今回ネットで拾ってきたみたいな特殊機能についても、参考資料等を参考にしながら少しずつでも内容を勉強するようにしてみてください。
http://officetanaka.net/excel/vba/tips/tips38.htm
ありがとうございました。
現状では、マクロの記録をして要らないところを削いで使う・・・という感じです。
やりたい操作の内容に応じて調べて、コードを読んで勉強する。
その繰り返しで勉強しています。
初級講座みたいなものを読んでも、イメージが湧かないので実際に動くマクロを比較しながら覚えるようにしています。
F1キーで命令のヘルプが見れるのも知りませんでした。
ありがとうございました‼︎
No.2
- 回答日時:
こんばんは!
>(1) 『セル内の"→"以降の文字列』 を指定して文字色を赤に変更
考え方はお示しのコードの応用だけだと思います。
ごくごく簡単に
Sub Sample1()
Dim c As Range
For Each c In ActiveSheet.UsedRange
If InStr(c, "→") > 0 Then
c.Characters(Start:=InStr(c, "→") + 1, Length:=Len(c)).Font.ColorIndex = 3
End If
Next c
End Sub
こんなんではどうでしょうか?m(_ _)m
ありがとうございます。
回答1を下さった方にも同じことを伺ったのですが…
教えて頂いたコードのどこからどこまでを
自分が書いたコードのどこに挟めばいいのかわからないのです。
少し試したのですが、
『同じ適用範囲内で宣言が重複しています』
となってしまって…
その辺を教えて頂けると助かります!!
勉強中なので、ちょっと変わった指示を
組み込みたい時にどこに挟んだらいいのかわからないので
困っています。
お手数ですが助け舟を出して下さると助かります!!
お願いします!
No.1
- 回答日時:
>範囲はActiveSheetにしたい
例えば
for each r in cells.specialcells(xlcelltypeconstants)
とかで。
>セル内の"→"以降の文字列
myReg.Pattern = "→.*$"
とか。
この回答への補足
ActiveSheetの指定の仕方が
下記の様に2種類あるのですね。
上段のようにActiveSheetという言葉が入っているとわかりやすいのですが、下段の様な書き方はどういう意味なんでしょうか?
違いと意味を解説して下さる方がいらっしゃると嬉しいです。
よろしくお願いいたします。
For Each r In ActiveSheet.UsedRange
for each r in cells.specialcells(xlcelltypeconstants)
ありがとうございます。
myReg.Pattern = "→.*$"
の『*$』は、ワイルドカードというヤツでしょうか。
使い方勉強になります。
ただ、これをどこに挟んだらいいのか分からないのです。
サンプルで書いたコードのどこに
>『セル内の"→"以降の文字列』を指定して文字色を赤に変更
という情報を、挟めば良いのか分からないのでご教授頂けると助かります。
初心者なもので、ちょっと違う指示を入れる時にどこに入れればいいのかわからないのです。
初心者という事を書き忘れていました。
申し訳ありません・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 指定文字を太字にするVBAを別シートのセルを指定する構文(改良について) 6 2022/08/27 22:11
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) エクセルから、パワーポイントのスライドを複数作成する。 1 2022/07/08 09:40
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
フォントについて教えてください!
みなさんの一番好きなフォントは何ですか? よく使うフォントやこのフォント好きだなあというものをぜひ教えてください!
-
【お題】マッチョ習字
【大喜利】 「精神を鍛えるため」にと、ジムから書初めの宿題を出されたマッチョたちが半紙に書いてきたこと
-
前回の年越しの瞬間、何してた?
いよいよ2025年がやってきますね。 年越しのスタイルは人それぞれ。 2024年を迎える瞬間は何をしていましたか?
-
店員も客も斜め上を行くデパートの福袋
シュールを通り越して店員も客も斜め上を行くデパートの福袋に入ってそうなものを教えて下さい。 よかったらレビューもしてください。
-
Excelで数式内の文字色を一部だけ変更したい
Excel(エクセル)
-
Excel VBA:特定の文字列以降(あるいは以前)のテキストをすべて取得する方法
Visual Basic(VBA)
-
ある特定の文字以降全て削除したいです。
Excel(エクセル)
-
-
4
エクセルVBA:リストに登録した単語と一致する文字色のみを、変更する方法
Excel(エクセル)
-
5
EXCEL VBA で特定の文字に色をつけるマクロを書きたいのですが
Excel(エクセル)
-
6
VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい
Visual Basic(VBA)
-
7
EXCEL VBA で複数の特定文字に色をつけたい
その他(Microsoft Office)
-
8
Excelでセル参照したとき、書式も一緒に持ってくるには?
Windows Vista・XP
-
9
エクセルでシート参照する場合、同じフォントサイズは出来ますか
Excel(エクセル)
-
10
VBAで、セルの一部の文字色を変更するプログラムで困っています
Excel(エクセル)
-
11
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
-
12
関数で抽出したセルの一部の文字を変更したい
Excel(エクセル)
-
13
VBAで条件によりフォントサイズを自動で変更したい2
Excel(エクセル)
-
14
VBAで特定の文字を探して隣のセルに色を付けたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
エクセルでセルをダブルクリッ...
-
セル背景や文字を点滅させる方法
-
太字に設定されているセルの個...
-
アポストロフィーの一括挿入 ...
-
Excelで任意の塗りつぶし色の数...
-
セルの内容をテキストボックス...
-
エクセルVBA セルに表示された...
-
マクロを実行すると画像がズレ...
-
Excelで、図形内の文字をセルに...
-
Excelでセルをクリックす...
-
空白セルを空セルに置き換える...
-
エクセル 行列を入れ替えてオ...
-
Excel内での検索結果をシート...
-
エクセルチェックボックスにつ...
-
エクセル 未入力セルがあると...
-
EXCEL プルダウンから指定セル...
-
[エクセル VBA]テキストファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
Excelで、図形内の文字をセルに...
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
Excelでセルをクリックす...
-
マクロを実行すると画像がズレ...
-
【EXCEL】先週の月曜日の日付を...
-
現在のセルの位置を返す関数は...
-
フォントの色を指定して削除出...
-
セルがクリックされた回数をカ...
-
エクセル 未入力セルがあると...
-
セルの内容をテキストボックス...
-
エクセルでPDFリンクを大量...
-
エクセルでページ数をあるセル...
-
アポストロフィーの一括挿入 ...
-
Excel2007 色のカウント (VBA)
-
エクセルでセルをダブルクリッ...
おすすめ情報