
エクセルで特定の複数の特定の文字の色を変更したいです。
複数の文字列の色の変更の仕方については調べたのですが
変更したい文字列が複数でそれぞれ色指定が異なります。
内、ひとつは 『セル内の"→"以降の文字列』 を指定して
文字色を赤に変更したいのです。
変更したい文字列 『★と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も見ています
-
Excelで数式内の文字色を一部だけ変更したい
Excel(エクセル)
-
ある特定の文字以降全て削除したいです。
Excel(エクセル)
-
Excel VBA:特定の文字列以降(あるいは以前)のテキストをすべて取得する方法
Visual Basic(VBA)
-
-
4
VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい
Visual Basic(VBA)
-
5
EXCEL VBA で特定の文字に色をつけるマクロを書きたいのですが
Excel(エクセル)
-
6
関数で抽出したセルの一部の文字を変更したい
Excel(エクセル)
-
7
VBAで、セルの一部の文字色を変更するプログラムで困っています
Excel(エクセル)
-
8
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
9
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
10
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
-
11
EXCEL VBA で複数の特定文字に色をつけたい
その他(Microsoft Office)
-
12
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
-
13
WORD VBAでハイパーリンクの文字列色変更
その他(Microsoft Office)
-
14
vba フィルター 複数条件 3つ以上 完全一致除外
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
Excelで、図形内の文字をセルに...
-
エクセル 数字をすべて○などの...
-
太字に設定されているセルの個...
-
クリックすると文章が表示され...
-
Excel:セルの値(文字列)を数...
-
フォントの色を指定して削除出...
-
現在のセルの位置を返す関数は...
-
ページ内ハイパーリンクの表示...
-
エクセル 未入力セルがあると...
-
セルの内容をテキストボックス...
-
マクロを実行すると画像がズレ...
-
Excel ハイパーリンクのURLを別...
-
Excel2007 色のカウント (VBA)
-
エクセルでセルをダブルクリッ...
-
excelのソルバーをVBAで複数行...
-
エクセルでPDFリンクを大量...
-
Excel VBAでマクロの実行範囲を...
-
エクセルでスケジュール管理の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
Excelで、図形内の文字をセルに...
-
Excelでセルをクリックす...
-
Excel ハイパーリンクのURLを別...
-
太字に設定されているセルの個...
-
マクロを実行すると画像がズレ...
-
セルの内容をテキストボックス...
-
フォントの色を指定して削除出...
-
Excel:セルの値(文字列)を数...
-
Excel2007 色のカウント (VBA)
-
エクセルでPDFリンクを大量...
-
アポストロフィーの一括挿入 ...
-
現在のセルの位置を返す関数は...
-
エクセルでセルをダブルクリッ...
-
空白セルを空セルに置き換える...
-
エクセル シート保護された共...
-
エクセル 未入力セルがあると...
おすすめ情報