エクセルVBAでセル内の特定文字列を太字に

このQ&Aのポイント
  • エクセル2003で、特定の文字列が含まれているセルを太字にする方法について教えてください。
  • A2からA100の範囲には、文字列が入っています。その中で、「愛、恋、幸福、love」という文字列が含まれている場合にセルを太字にしたいです。
  • Sub Test()内のforループで、セルの値と特定の文字列を比較し、条件に一致すればセルを太字にする処理を追加すれば実現できます。具体的なコードは以下のようになります。
回答を見る
  • ベストアンサー

エクセルVBAでセル内の特定文字列を太字に

エクセル2003です。 A2からA100の範囲のすべてのセルに文字列(文章)が入っています。 セルにより、約30~1200文字程度とばらばらです。 この範囲の各セルの文字列の中に、「愛、恋、幸福、love」という文字列があれば、その語句だけを太字にしたいのです。 (なければ、なにもしません。) 英字(love)は半角全角大文字小文字を問いません。 一応、ここまでは書いたのですが、検索するところでお手上げになってしまいました。 なにとぞ、お助けください。 Sub Test() Dim myW Dim i As Long myW = Split("愛,恋,幸福,love", ",") For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row For n = LBound(myW) To UBound(myW) MsgBox Cells(i, "A").Value & "に" & myW(n) & "があれば太字に" 'この肝心な部分がわかりません。 Next n Next i End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 pos = InStr(1, Cells(i, "A"), myW(n), vbTextCompare) Do While pos > 0 Cells(i, "A").Characters(pos, Len(myW(n))).Font.Bold = True pos = InStr(pos + 1, Cells(i, "A"), myW(n), vbTextCompare) Loop

emaxemax
質問者

お礼

ありがとうございます。 検索開始位置を指定し、こうやってLOOPさせれば複数の同一文字列の出現に対処できるんですね! とっても勉強になりました。 以下のようにやって目的が達成できました。 Sub Test03() Dim myW Dim i As Long, n As Long, pos As Long myW = Split("愛,恋,幸福,love", ",") For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row For n = LBound(myW) To UBound(myW) pos = InStr(1, Cells(i, "A"), myW(n), vbTextCompare) Do While pos > 0 With Cells(i, "A").Characters(pos, Len(myW(n))).Font .Bold = True .ColorIndex = 3 End With pos = InStr(pos + 1, Cells(i, "A"), myW(n), vbTextCompare) Loop Next n Next i End Sub

その他の回答 (2)

回答No.3

#1です。 複数出現については質問文に無かったのでうっかりしていました。失礼しました。 私もmu2011さまに感謝。

emaxemax
質問者

お礼

> 複数出現については質問文に無かったのでうっかりしていました。 いえいえ、わたしがちゃんと質問に書かなかったのが悪いんです。 今回は有難うございました。

回答No.1

そこまで自力で書ける人になら全文載せてもいいかな(笑) Sub Test() Dim myW Dim i As Long Dim c As Range Dim inS As Long myW = Array("愛", "恋", "幸福", "love") For Each c In Range("A2", Cells(Rows.Count, "A").End(xlUp)).Cells For Each s In myW With c inS = InStr(1, .Value, s, vbTextCompare) If inS > 0 Then .Characters(inS, Len(s)).Font.Bold = True End If End With Next Next End Sub こういう感じです。 質問者さんの元のコードをなるべく残しました。 InStr関数とCharactersプロパティがポイントです。

emaxemax
質問者

お礼

> InStr関数とCharactersプロパティがポイントです。 有難うございます。 おかげさまで検索&太字設定ができました。 また、vbTextCompareで全半角大小問わず検索できることも勉強になりました。 ただ、同一セル内に同じ語句が複数出てきた場合、最初のものしか対象になりませんでした。 (わたしの質問が悪かったですね、すみません、)

関連するQ&A

  • VBA For Eachでセル内の文字列を一個ずつ取り出すには

    エクセル2000です。 たとえばA1セル内の文字列を一個ずつ取り出す場合、 Sub test01() For i = 1 To Len(Range("A1").Value) Cells(i, "B").Value = Range("A1").Characters(i, 1).Text Next End Sub このように最初から最後の文字まで何番目で指定することはわかるのですが、これをFor Each で回すにはどうしたらよいでしょうか? (⌒o⌒)? お教えください。 Sub test02() For Each ch In Range("A1").Characters i = i + 1 Cells(i, "B").Value = ch Next End Sub ではエラーになります。

  • エクセル2003のVBAで列を指定

    エクセルで特定の列の2~10行目に対して、ある作業をする場合、列を指定する方法は以下のどれがいいでしょうか?あるいはもっといい方法があれば教えてください。 実際には列は約40列(固定)、行は1~2万行(変動)程度で、作業はもっと複雑です。 Sub test01() Dim col Dim i As Long, n As Long For Each col In Array(1, 3, 7, 8, 11) '列番号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test02() Dim col Dim i As Long, n As Long For Each col In Array("A", "C", "G", "H", "K") '列の記号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test03() Dim col Dim i As Long, n As Long For Each col In Range("A2,C2,G2,H2,K2") 'セルで指定 For i = 2 To 10 n = n + 1 col.Offset(i - 2).Value = n Next i Next col End Sub

  • Excel VBAで、様々な書式設定のセルをyyyymmddの文字列に

    Excel VBAで、様々な書式設定のセルをyyyymmddの文字列にしたい dim i Columns("A:B").NumberFormatLocal = "@" For i = 1 To 5 If Cells(i, 1)NumberFormat = "@" Then Cells(i, 2) = Aells(i, 1).text Else Cells(i, 2) = Application.text(cells(i, "1"), "yyyymmdd") End If Next Excel VBAで、様々な書式設定のセルをyyyymmddの文字列にしたいのですが・・ 上記のソースを書いた場合、文字列・日付・ユーザ定義などの書式設定ではうまくいきますが、標準で19990101などと入力されていた場合はエラーになってしまいます。 どのように直せばうまくいくのでしょうか? よろしくお願いします。

  • VBA 文字列に関して

    現在 A22のセルに入力された文字列をボタンを押せば ばらばらにしてA22のセルから順番に入れるマクロを作りました (例)A22のセルに ”こんにちわ”の文字列が入っている場合 ボタン押下   ↓ A22のセル⇒こ B22のセル⇒ん C22のセル⇒に D22のセル⇒ち E22のセル⇒わ になる。 不思議なことに数字を16文字以上いれてボタンを押し文字を分離すると入力していない文字、数字が入ってしまいます。 数字だけこういう現象が発生してしまいます。 例えば "1111111111111111"と入力して文字を分離した場合 1.11111111111111E+15と個々のセルに格納されます。 原因がわかる方、教えて頂けないでしょうか? 以下がコードです。宜しくお願い致します。 Private Sub CommandButton1_Click()   Dim one As String   Dim myString As String   myString = Cells(22, 1)   numString = Len(Cells(22, 1))   If Len(myString) <= 50 Then    For i = 1 To Len(Range("A22").Value)      one = String(1, myString)      Cells(22, i) = one      myString = Replace(myString, one, "", 1, 1, vbTextCompare)    Next i   End If End Sub

  • エクセル セルの文字列の有無からほかのセルに数値を

    勤務リスト.xlsx におきまして セルE1に、午前休、 という文字列があれば セルF1に数値の0 セルG1に数値の2000 を入力 同様に セルEiに、午前休、 という文字列があれば セルFiに数値の0 セルGiに数値の2000 31日を計算にいれて iを1から30としました エクセルファイルの開発から マクロに行き 以下のコードをいれましたが ------------------------------- Sub 午前休み() Dim 選択シート As Sheets Dim i As Integer Set 選択シート = ActiveWindow.SelectedSheets If InStr(Cells(5, i), "午前休") > 0 Then Cells(6, i).Value = 0 Cells(7, i).Value = 2000 i = 1 Do Until i = 30 i = i + 1 Loop End If End Sub 上記 作動しません すみません 御教示くださいませ win10 office365

  • Excel2007 マクロ 特定セルの文字列抽出

    Excel2007 マクロ 特定セルの文字列抽出 A列に100行程度、製品番号が入っています。 例えばAAAA-NNN-BBBB-UUUUUUUとある場合に NNNだけを抽出して、B列に転記します。 関数であれば、Mid関数で解決できるのですが、 マクロで解決したいです。 下記を自分で考えたのですが、エラーが発生します。 アドバイスお願いいたします。 Sub moji() Dim last As Long, i As Long Dim strt As Integer 'A列「製品番号」から文字を抽出してB列に反映 last = Range("A65536").End(xlUp).Row For i = 2 To last strt = Mid("A", 7, 3) Cells(i, "B") = strt Next i End Sub

  • エクセル2002のVBAで太文字を検索したいのですが、

    エクセル2002のVBAで太文字を検索したいのですが、 <状況> B列にチェックしたい文字が入力されています <やりたいこと> B列に入力されている文字の中から、太文字のみを抜き出して、 太字の見つかった行のG列に太文字のみを抜き出して複写したい <自作マクロの現状> セル全体の太文字検索は下記のマクロ「太字検索チェック1」で完成しましたが、 セルに記載してある文字の中で「一部は普通文字、のこり一部は太文字」と混在 しているセルの中身から太文字部分のみを別のセルに抜き出したいのですが、 そのマクロを「太字検索チェック2」のように書きました。 しかし「太字検索チェック2」の「 If dat.Font.Bold = True Then」の部分で 「型が違う・・・」のエラーで先に進みません。 どなたか、セルの中身の太文字のみを抜き出すマクロを教えてください よろしくお願いします   Sub 太字検索チェック1() i = 3 Worksheets("テスト").Activate For Each myRng In Range("B:B") セル = "b" & i If Range(セル).Font.Bold = True Then Cells(i, 7) = Cells(i, 2) ’太字のCells(i, 2)を Cells(i, 7) にコピー End If i = i + 1 If i = 1703 Then ’1703番地で終了 Exit For End If Next End Sub Sub 太字検索チェック2() i = 3 Worksheets("テスト").Activate For Each myRng In Range("B:B") 内容 = Cells(i, 2) 文字数 = Len(内容) For p = 1 To 文字数 dat = Mid(内容, p, 1)       X=8+P If dat.Font.Bold = True Then  ’1文字づつ太字を検索 Cells(i, X) = dat        ’太字なら→Cells(i, X) にコピー End If Next i = i + 1 If i = 1703 Then Exit For End If Next End Sub

  • Excel VBAで文字列の部分一致の文字列を表示

    以前、こちらで頭5文字までの一致で文字列を表示するVBAを教えて頂きました。今回はFINDなどの部分一致での文字列を表示することをしたいのですが、ご教示いただけますと幸いです。 下記はSheet1のA3に文字を5文字以内いれるとSheet2のC列からピックアップしてSheet1のA列に文字列を表示する及びSheet2のB列のデータをSheet1のC列に表示させるVBAです。 Sub Test2() Dim Ws1 As Worksheet, Ws2 As Worksheet Dim SData As String, i As Long, VRet As Variant Dim c As Range, LastRow As Long Set Ws1 = Sheets("Sheet1") Set Ws2 = Sheets("Sheet2") SData = CStr(Ws1.Range("A3").Value) If SData = "" Then Exit Sub i = 5 LastRow = Ws1.Cells(Rows.Count, "A").End(xlUp).Row If LastRow < i Then LastRow = i End If Ws1.Range(Ws1.Cells(i, "A"), Ws1.Cells(LastRow, "C")).ClearContents With Ws2 For Each c In .Range(.Cells(1, "C"), .Cells(Rows.Count, "C").End(xlUp)) VRet = InStr(1, CStr(c.Value), SData, vbTextCompare) If VRet = 1 And Len(c.Value) >= 10 Then Ws1.Cells(i, "A").Resize(1, 2).Value = c.Resize(1, 2).Value 'とりあえずSheet2のB列のデータ(C列のデータに同期したデータ)をSheet1のC列に Ws1.Cells(i, "C").Value = .Cells(c.Row, "B").Value i = i + 1 End If Next End With End Sub 宜しくお願い致します。

  • エクセルVBAのIF・・・Else文について

    A列に日付が入っていて、それが12月の時はF列に"○"、 それ以外は"×"と表示したいのですが、下記を実行すると、 A列の空白セルの時もF列に"○"が表示されます。 何故でしょうか。Offsetを使って作成したいのですが、 すみませんが、宜しく御願いします。 Sub Test()  Dim i   For i = 2 To 20    If Month(Cells(i, 1)) = 12 Then     Cells(i, 1).Offset(0, 6) = "○"    Else     Cells(i, 1).Offset(0, 6) = "×"    End If   Next End Sub

  • エクセルVBA/シェープの文字列を取得

    エクセル2010です。 BOOK内の各シートにボタンやチェックボックス、ラベルやテキストボックスなどが配置されています。 これらの貼り付けられたものの一覧を作りたいのです。 Sub obj_Check() Dim st Dim sp Dim i As Long For Each st In Sheets For Each sp In st.Shapes i = i + 1 With Sheets("Sheet3") .Cells(i, "A").Value = sp.Name ' .Cells(i, "B").Value = sp.Caption ’これがエラー .Cells(i, "C").Value = st.Name End With Next sp Next st End Sub とやってみましたがsp.Captionがエラーになります。 .Cells(i, "B").Value = sp.Shapes.Range.Character.Text としても同じです。 どうやったら、シェープに書かれた文字列が取得できるのでしょうか?

専門家に質問してみよう