エクセルで特定の複数の特定の文字の色を変更したいです。
複数の文字列の色の変更の仕方については調べたのですが
変更したい文字列が複数でそれぞれ色指定が異なります。
内、ひとつは 『セル内の"→"以降の文字列』 を指定して
文字色を赤に変更したいのです。
変更したい文字列 『★と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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
EXCEL VBA で特定の文字に色をつけるマクロを書きたいのですが
Excel(エクセル)
-
EXCEL VBA で複数の特定文字に色をつけたい
その他(Microsoft Office)
-
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
-
4
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
-
5
Excel VBA : 文字列の属性も含めて結合する方法
Excel(エクセル)
-
6
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
7
Excel VBA:特定の文字列以降(あるいは以前)のテキストをすべて取得する方法
Visual Basic(VBA)
-
8
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
9
エクセル VBA 小数点を含む数字抽出について
Excel(エクセル)
-
10
エクセルVBA:リストに登録した単語と一致する文字色のみを、変更する方法
Excel(エクセル)
-
11
Excelでセル参照したとき、書式も一緒に持ってくるには?
Windows Vista・XP
-
12
mso って何ですか
Access(アクセス)
-
13
Excel マクロ VBA プロシージャが大きすぎます のエラー対処方法
Visual Basic(VBA)
-
14
エクセルで特定文字列に色をつけたいです。
Excel(エクセル)
-
15
エクセルの色も=イコールできますか?
Windows Me・NT・2000
-
16
Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はあり
Visual Basic(VBA)
-
17
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
18
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
19
VBAで、セルの一部の文字色を変更するプログラムで困っています
Excel(エクセル)
-
20
マクロでセルの右から2番目の文字を取得する方法を教えてください
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル マクロ チェックボックス
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
太字に設定されているセルの個...
-
Excelでセルをクリックす...
-
Excelで挿入した図をセルの中央...
-
Excel ハイパーリンクのURLを別...
-
マクロを実行すると画像がズレ...
-
エクセルでの検索ボックスの作...
-
エクセルでページ数をあるセル...
-
Excelで、図形内の文字をセルに...
-
EXCELのセルや文字色の反映
-
エクセル シート保護された共...
-
アポストロフィーの一括挿入 ...
-
エクセルでPDFリンクを大量...
-
クリックすると文章が表示され...
-
フォントの色を指定して削除出...
-
Excel2007 色のカウント (VBA)
-
VBA(エクセル)のコンパイルエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
クリックすると文章が表示され...
-
Excelでセルをクリックす...
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
Excelで、図形内の文字をセルに...
-
マクロを実行すると画像がズレ...
-
現在のセルの位置を返す関数は...
-
Excelで挿入した図をセルの中央...
-
フォントの色を指定して削除出...
-
VBA 見つからなかった時の処理
-
エクセルでの検索ボックスの作...
-
エクセル 未入力セルがあると...
-
Excel2007 色のカウント (VBA)
-
エクセルでPDFリンクを大量...
-
【EXCEL】先週の月曜日の日付を...
-
EXCELのセルや文字色の反映
-
セルがクリックされた回数をカ...
おすすめ情報