VBAでセル内変更文字列の色付け

このQ&Aのポイント
  • VBAを使って別ブックの一覧を参照し、指定範囲に検索文字列が含まれる場合に文字列の置換、対象セルの色付け、件数の表示を行うコードを変更したいです。
  • 変更した文字列のみ文字色を変更するためのコードを知りたいです。
  • 現在のコードは複数条件で一括置換を行い、置換が行われたセルに赤色を付けて件数を表示するものです。
回答を見る
  • ベストアンサー

vba:セル内変更文字列の色付け

vbaにて別ブックの一覧を参照し、 指定範囲に検索文字列が含まれる場合 文字列の置換&対象セルの色付け& 件数の表示を行うコードから、 文字列の置換&セル内の変更した文字列のみ 色付け&件数の表示を行うコードに変更したいです。 変更した文字列のみ文字色を変更したい場合、 どのようなコードに書き換えればよろしいでしょうか。 なお、現在のコードは以下の通りです。 ============================ Sub 複数条件で一括置換する() Dim 範囲 As Object Dim 対象 As Object Dim 一覧 As Variant Set 範囲 = Selection 一覧 = Workbook("確認.xlsm").Sheets("複数条件").Range("A1:B7") Dim tmp As Variant Dim mCnt As Long 中略 mCnt = 0 For Each 対象 In 範囲 For i = LBound(一覧, 1) To UBound(一覧, 1) tmp = 対象.Value 対象.Value = Replace(対象.Value, 一覧(i, 1), 一覧(i, 2)) If tmp <> 対象.Value Then 対象.Interior.Color = vbRed mCnt = mCnt + 1 End If Next Next MsgBox mCnt & "件置換しました" Set 範囲 = Nothing Set 対象 = Nothing End Sub

noname#254533
noname#254533

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.9

回答No.8の補足です。 回答No.6の補足に記載があったコードで、変数宣言が足りなかったので以下を追加しておいてください。 Dim m As Long, n As Long, i As Long マクロの画面の「ツール」「オプション」で「変数の宣言を強制する」にチェックを入れておくと宣言の不足が防げます。 また、一応試しに Color = vbRed を ColorIndex = 3 にしてみたらどうでしょう。 以下の2か所です。 If 対象.Characters(n, 1).Font.ColorIndex = 3 Then 対象.Characters(Start:=InStr(j, 対象.Value, MVar(k)), Length:=Len(MVar(k))).Font.ColorIndex = 3

noname#254533
質問者

補足

追加の回答をいただきありがとうございます! 変更を行いましたが、色が変更されず いろいろ試していたところ、 置換前の文字列のみを置換対象とした場合 色づかないことがわかりました! 置換前の文字列のみがセルの中に含まれることはないので、一旦このまま運用したいと思います🙇🏻‍♀️ また、【for each 対象 in 選択範囲】以降のコードについて、わたしの理解が追いつかず、お手数ですが簡単な解説をご教示いただけますと幸いです、、

その他の回答 (11)

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.12

対象の文字列の後ろ、置換後の文字列数分は検索の必要なし で考えていたのですが > 置換前の文字列のみを置換対象とした場合 > 色づかないことがわかりました! 上記の場合は、Len(対象.Value) - Len(MVar(k))が0になるので色付けループに入りませんでした。 最低一回はループするように For j = 1 To Len(対象.Value) - Len(MVar(k)) を For j = 1 To Len(対象.Value) - Len(MVar(k)) + 1 に変更してみてください。

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.11

> また、【for each 対象 in 選択範囲】以降のコードについて、わたしの理解が追いつかず、お手数ですが簡単な解説をご教示いただけますと幸いです、、 For Each 対象 In 範囲 MFlg = False '置換したかどうか判別のフラグ m = 0 '置換した数分配列に保存するための配列要素数のカウンタ 検索文字列一覧の数だけループします。 ↓ For i = LBound(一覧, 1) To UBound(一覧, 1) 置換対象に検索文字列あればその位置を返すので0でなければ検索文字列を含む事になります。 検索文字列一覧に空白セルがあった場合にはそこはスキップするように 一覧(i, 1) <> ""があります。 ↓ If InStr(対象.Value, 一覧(i, 1)) > 0 And 一覧(i, 1) <> "" Then 対象.Value = Replace(対象.Value, 一覧(i, 1), 一覧(i, 2)) 置換が実行された置換後の文字列を置換文字列分だけ配列変数に保存します。文字の色付けに使います。 ↓ ReDim Preserve MVar(m) MVar(m) = 一覧(i, 2) MFlg = True m = m + 1 End If Next ↑ ひとつの対象、置換終わり ひとつの対象、文字列の色つけ ↓ If MFlg = True Then mCnt = mCnt + 1 '置換した数のカウンタ ひとつの対象で置換した数だけループ ↓ For k = LBound(MVar) To UBound(MVar) 置換後の対象の文字の中で置換後の文字列を探す「j」は探し始めの位置 ↓ For j = 1 To Len(対象.Value) - Len(MVar(k))'対象の文字列の後ろ、置換後の文字列数分は検索の必要なし 置換後の対象に置換後文字列あればその位置を返すので0でなければ置換後文字列を含む事になります。 置換後文字列配列変数の中に空白だけがあった場合にはそこはスキップするように MVar(k) <> ""があります。 ↓ If InStr(j, 対象.Value, MVar(k)) > 0 And MVar(k) <> "" Then 置換後文字列の現れた最初の文字位置からループ ↓ For n = InStr(j, 対象.Value, MVar(k)) To Len(対象.Value) - Len(MVar(k)) 見つかった文字列の先頭(n文字目)に既に色付けがあれば、次の探し始めを見つかった文字列の先頭の次に「j」を変更して再度検索 色付けが見つからなくなるまでループ、色付けが見つからなければループを抜ける 回答No.6の訂正箇所です。 ↓ If 対象.Characters(n, 1).Font.Color = vbRed Then j = InStr(j, 対象.Value, MVar(k)) + 1 Else Exit For End If Next 最後の色付け位置の先頭位置の次が「j」に入っているので「j」以降で検索して見つかった置換後文字列に色付け 次の色付けの探し始めを「j」にセット ↓ 対象.Characters(Start:=InStr(j, 対象.Value, MVar(k)), Length:=Len(MVar(k))).Font.Color = vbRed j = InStr(j, 対象.Value, MVar(k)) + Len(MVar(k)) - 1 Else Exit For End If Next Next End If ↓ひとつの対象セル分置換色付けが終わり次のセルに Next

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.10

あと、条件付き書式でフォントの色を指定している場合、状況によって実行後に条件付き書式の色のままの事があります。(変更されるパターンもあります)

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.8

> 変更後 > Set 範囲 = Application.InputBox("置換を行う範囲を設定してください", Type:=8) 私は変ではないと思います。私も先日違う質問にこの方法を提案しました。 ただ、キャンセルした場合エラーになりますので以下のようにしていおくといいと思います。 On Error Resume Next Set 範囲 = Application.InputBox("置換を行う範囲を設定してください", Type:=8) On Error GoTo 0 If 範囲 Is Nothing Then MsgBox "範囲選択が間違ってるかキャンセルされました", vbInformation Exit Sub End If > 文字列の変換と件数表示はされるのですが、文字列の色付けがされません。 とのことなのですが、こちらで記載されたコードをコピペして実行したところ「赤色」に色付けされました。 添付画像参照してください。 一度以下の所にDebug.Print MVar(k)を入れてイミディエイトウインドウに置換後の文字列が出るかどうか見てみてください。 If MFlg = True Then mCnt = mCnt + 1 For k = LBound(MVar) To UBound(MVar) Debug.Print MVar(k)'←ここです For j = 1 To Len(対象.Value) - Len(MVar(k))

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.7

課題に興味を惹かれ、 置換のと置換した文字列部分に色をつけるコードを書いてみました。 よかったら参考にしてください。 以下、使う上でのポイントです。 添付画像のように、 対象ブックのフルパス、置換前後の文字列、染める色を指定して実行します。 ヒット数、ヒットしたシートとセルアドレスを一覧にしています。 なお、コード中の Dim ChgPos(50) As Long '色を染める開始文字位置 これは、1つのセルに置換対象の文字列が最大50以下と想定しています。 必要に応じて増減して使ってください。 また、詳しくはコードを読んでください。 Sub Sample()  Dim FText As String '置換前文字列  Dim TText As String '置換後文字列  Dim PutColor As Double '置き換えた文字列も文字色  Dim TgWb As Workbook '対象ブック  Dim TgWs As Worksheet '対象シート  Dim TgCell As Range  '対象セル  Dim c As Long 'セル文字のカウンター  Dim CLen As Long '対象セルの文字列長  Dim PutText As String '置き換え後総文字列  Dim HitCnt As Long  'セル内でのヒット数  Dim r As Long   'ヒット用カウンター  Dim ChgPos(50) As Long '色を染める開始文字位置  Dim ShCnt As Long  'シート数  Dim s As Long  'シートカウンター  Dim HitTotal As Long 'ヒット数総計  Dim CtlSh As Worksheet '条件設定シート    Set CtlSh = ThisWorkbook.Sheets(1)  Set TgWb = Workbooks.Open(CtlSh.Cells(2, 3).Value)  FText = CtlSh.Cells(3, 3).Value  TText = CtlSh.Cells(4, 3).Value  PutColor = CtlSh.Cells(5, 3).Font.Color    HitTotal = 0  ShCnt = TgWb.Sheets.Count  HitCnt = 0  For s = 1 To ShCnt   For Each TgCell In TgWb.Sheets(s).UsedRange    HitCnt = 0    If Len(TgCell.Value) >= Len(FText) Then     CLen = Len(TgCell.Value) 'セルのテキストの文字長     PutText = ""     c = 1     Do      If c > CLen - Len(FText) + 1 Then Exit Do      If Mid(TgCell.Value, c, Len(FText)) = FText Then       HitCnt = HitCnt + 1       HitTotal = HitTotal + 1       CtlSh.Cells(HitTotal + 10, 2).Value = TgWb.Sheets(s).Name       CtlSh.Cells(HitTotal + 10, 3).Value = TgCell.Address       PutText = PutText & TText       ChgPos(HitCnt) = c + ((HitCnt - 1) * (Len(TText) - Len(FText)))       c = c + Len(FText)      Else       PutText = PutText & Mid(TgCell.Value, c, 1)       c = c + 1      End If          Loop          If c <= CLen Then      PutText = PutText & Mid(TgCell.Value, c, CLen - c + 1)     End If          TgCell.Value = PutText     For r = 1 To HitCnt      TgCell.Characters(Start:=ChgPos(r), Length:=Len(TText)). _       Font.Color = PutColor     Next r        End If   Next TgCell    Next s    CtlSh.Cells(7, 3).Value = HitTotal    TgWb.Save  TgWb.Close   End Sub

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.6

No.5の > あいうえおかき > があって > えお→さし > かき→しし > に置換した結果の > あいうさししし > は > 「あいう」が元の色で「さしし」が赤「し」が元の色となります。 を 「あいう」が元の色で「さししし」が赤になるようにしました。 No.5の > If InStr(j, 対象.Value, MVar(k)) > 0 And MVar(k) <> "" Then > 対象.Characters(Start:=InStr(j, 対象.Value, MVar(k)), Length:=Len(MVar(k))).Font.Color = vbRed の2行を以下に変更してください。 If InStr(j, 対象.Value, MVar(k)) > 0 And MVar(k) <> "" Then For n = InStr(j, 対象.Value, MVar(k)) To Len(対象.Value) - Len(MVar(k)) If 対象.Characters(n, 1).Font.Color = vbRed Then j = InStr(j, 対象.Value, MVar(k)) + 1 Else Exit For End If Next 対象.Characters(Start:=InStr(j, 対象.Value, MVar(k)), Length:=Len(MVar(k))).Font.Color = vbRed

noname#254533
質問者

補足

ご回答いただきありがとうございます! 回答いただいた内容で何点か確認させていただきたく、存じます。 1.最終的なコードは以下でお間違い無いでしょうか? 文字列の変換と件数表示はされるのですが、文字列の色付けがされません。 誤っている箇所があれば、ご指摘いただければ幸いです。 2.確認.xlsmにvbaを組み、個人用マクロから確認.xlsmの以下vbaを実行する流れとしたいです。(置換対象となるブックが毎回異なる為) その場合、以下の通り変更して対象範囲を毎回選べるようにできればと思うのですが、この方法はvbaに詳しい方からみて変でしょうか? 変更前 Set 範囲 = Selection 変更後 Set 範囲 = Application.InputBox("置換を行う範囲を設定してください", Type:=8) ==================== Sub 複数条件で一括置換する() Dim 範囲 As Object Dim 対象 As Object Dim 一覧 As Variant Dim MVar() As Variant Dim MFlg As Boolean Dim j As Long, k As Long Dim tmp As Variant Dim mCnt As Long Set 範囲 = Selection 一覧 = Workbooks("確認.xlsm").Sheets("複数条件").Range("A1:B7") mCnt = 0 Application.ScreenUpdating = False For Each 対象 In 範囲 MFlg = False m = 0 For i = LBound(一覧, 1) To UBound(一覧, 1) If InStr(対象.Value, 一覧(i, 1)) > 0 And 一覧(i, 1) <> "" Then 対象.Value = Replace(対象.Value, 一覧(i, 1), 一覧(i, 2)) ReDim Preserve MVar(m) MVar(m) = 一覧(i, 2) MFlg = True m = m + 1 End If Next If MFlg = True Then mCnt = mCnt + 1 For k = LBound(MVar) To UBound(MVar) For j = 1 To Len(対象.Value) - Len(MVar(k)) If InStr(j, 対象.Value, MVar(k)) > 0 And MVar(k) <> "" Then For n = InStr(j, 対象.Value, MVar(k)) To Len(対象.Value) - Len(MVar(k)) If 対象.Characters(n, 1).Font.Color = vbRed Then j = InStr(j, 対象.Value, MVar(k)) + 1 Else Exit For End If Next 対象.Characters(Start:=InStr(j, 対象.Value, MVar(k)), Length:=Len(MVar(k))).Font.Color = vbRed j = InStr(j, 対象.Value, MVar(k)) + Len(MVar(k)) - 1 Else Exit For End If Next Next End If Next Application.ScreenUpdating = True MsgBox mCnt & "件置換しました"

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.5

度々の訂正です。一部勘違いがありました。 あと あいうえおかき があって えお→さし かき→しし に置換した結果の あいうさししし は 「あいう」が元の色で「さしし」が赤「し」が元の色となります。 Application.ScreenUpdating = False For Each 対象 In 範囲 MFlg = False m = 0 '複数条件の数分処理を繰り返します。 For i = LBound(一覧, 1) To UBound(一覧, 1) If InStr(対象.Value, 一覧(i, 1)) > 0 And 一覧(i, 1) <> "" Then 対象.Value = Replace(対象.Value, 一覧(i, 1), 一覧(i, 2)) ReDim Preserve MVar(m) MVar(m) = 一覧(i, 2) MFlg = True m = m + 1 End If Next If MFlg = True Then mCnt = mCnt + 1 For k = LBound(MVar) To UBound(MVar) For j = 1 To Len(対象.Value) - Len(MVar(k)) If InStr(j, 対象.Value, MVar(k)) > 0 And MVar(k) <> "" Then 対象.Characters(Start:=InStr(j, 対象.Value, MVar(k)), Length:=Len(MVar(k))).Font.Color = vbRed j = InStr(j, 対象.Value, MVar(k)) + Len(MVar(k)) - 1 Else Exit For End If Next Next End If Next Application.ScreenUpdating = True MsgBox mCnt & "件置換しました"

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.4

No.3の訂正です。 時によって先頭の文字の色が変更されることがあったので訂正しました。 無駄なループを抜けるようにしました。 画面描画を一旦停止したほうが早そうなので一旦停止しています。 前略 Application.ScreenUpdating = False For Each 対象 In 範囲 MFlg = False '複数条件の数分処理を繰り返します。 For i = LBound(一覧, 1) To UBound(一覧, 1) If InStr(対象.Value, 一覧(i, 1)) > 0 And 一覧(i, 1) <> "" Then 対象.Value = Replace(対象.Value, 一覧(i, 1), 一覧(i, 2)) ReDim Preserve MVar(i - 1) MVar(i - 1) = 一覧(i, 2) MFlg = True End If Next If MFlg = True Then mCnt = mCnt + 1 For k = LBound(MVar) To UBound(MVar) For j = 1 To Len(対象.Value) - Len(MVar(k)) If InStr(j, 対象.Value, MVar(k)) > 0 Then 対象.Characters(Start:=InStr(j, 対象.Value, MVar(k)), Length:=Len(MVar(k))).Font.Color = vbRed j = InStr(j, 対象.Value, MVar(k)) + Len(MVar(k)) - 1 Else Exit For End If Next Next End If Next Application.ScreenUpdating = True MsgBox mCnt & "件置換しました" 後略

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.3

No.2の追加です。 同一セルで2か所以上置換がある場合は以下のようにしてみてください。 Dim MVar() As Variant Dim MFlg As Boolean Dim j As Long, k As Long を追加して 前略 For Each 対象 In 範囲 MFlg = False '複数条件の数分処理を繰り返します。 For i = LBound(一覧, 1) To UBound(一覧, 1) If InStr(対象.Value, 一覧(i, 1)) > 0 And 一覧(i, 1) <> "" Then 対象.Value = Replace(対象.Value, 一覧(i, 1), 一覧(i, 2)) ReDim Preserve MVar(i - 1) MVar(i - 1) = 一覧(i, 2) ' mCnt = mCnt + 1 MFlg = True End If Next If MFlg = True Then mCnt = mCnt + 1 For k = LBound(MVar) To UBound(MVar) For j = 1 To Len(対象.Value) - Len(MVar(k)) 対象.Characters(Start:=InStr(j, 対象.Value, MVar(k)), Length:=Len(MVar(k))).Font.Color = vbRed Next Next End If Next MsgBox mCnt & "件置換しました" 後略

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.2

No.1の追加です。 文字色を変更した後でReplaceが実行されると途中の文字色が先頭の文字色で統一されてしまうので、他の部分も以下のように変更してください。ただし、同一セルで2か所置換された場合あとから見つかった方だけに色が付きます。 For i = LBound(一覧, 1) To UBound(一覧, 1) ' tmp = 対象.Value 無し If InStr(対象.Value, 一覧(i, 1)) > 0 And 一覧(i, 1) <> "" Then 対象.Value = Replace(対象.Value, 一覧(i, 1), 一覧(i, 2)) ' If tmp <> 対象.Value Then 無し ' 対象.Interior.Color = vbRed 無し 対象.Characters(Start:=InStr(対象.Value, 一覧(i, 2)), Length:=Len(一覧(i, 2))).Font.Color = vbRed mCnt = mCnt + 1 End If Next

関連するQ&A

  • 条件に一致するセルのカウントと色付けと置換

    こんにちは。 指定した文字列を選択範囲から検索し、 文字列を含むセルの個数のカウント& セルの色付け&文字列の置換ができる コードを教えてください。 <シート1> A列:検索文字列 B列:置換後の文字列 <対象範囲> 別ブックの指定した範囲のみ 文字列の置換のみであればエラーなく 実行することができたのですが、 個数のカウントとセルの色付け方法が いまいちわかりません。 vba初心者のため、簡単な解説を つけていただけると嬉しいです。 なお、文字列の置換は以下のサイトを参考に しています。 http://extan.jp/?p=5749

  • [Excel97]VBA:セルに入っている数式を別のシートのセルに文字列としてセットする

    「ExcelVBAマクロ500連発」という技術評論社の本(青のカバー)のNo.277に 「式を文字列として表示する」というサンプルマクロがあります。 「ワークシートのセルに入っている数式を、(同じシート内の)別のセルに文字列としてセットする」 ここのコードを参考にして、 「数式を、(同じブック内の別のシートの)セルに文字列としてセットする」コードを考えています。 以下のコードを作りましたが、実行すると最後から2行目の「.Formula」のところで 実行時エラー1004:'Range'メソッドは失敗しました。'_Global'オブジェクト というエラーが出てきます。なぜでしょうか? 正しいコードの記述を教えて下さい。 (Sheet1のD3セルの計算式をSheet2のD10セルに文字列としてセット) Option Explicit Dim 調査セル As Variant Dim 報告セル As Variant Sub 式の抽出() Worksheets("Sheet2").Select 調査セル = Worksheets("Sheet1").Cells(3, 4) 報告セル = "D10" Range(報告セル).Value = "" Range(報告セル).Value = "'" + Range(調査セル).Formula End Sub

  • VBAで特定の文字以降の文字列の色の変更をしたい

    エクセルで特定の複数の特定の文字の色を変更したいです。 複数の文字列の色の変更の仕方については調べたのですが 変更したい文字列が複数でそれぞれ色指定が異なります。 内、ひとつは 『セル内の"→"以降の文字列』 を指定して 文字色を赤に変更したいのです。 変更したい文字列 『★と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

  • Excel 文字列を区切る VBA 質問

    A列にスペース区切りのデータがあります これをC列 D列 に分けて表示したいのですが A列のデータが不規則(個数がバラバラ 空白もある) と、なった場合 なかなか上手くいきません C列以降は使用可能です(空いてます) その道の方 お助けたください 元のVBAは Sub Sample3() Dim i As Long, tmp As Variant For i = 2 To 22 tmp = Split(Cells(i, 1), " ") Cells(i, 2) = tmp(0) Cells(i, 3) = tmp(1) Next i End Sub です お手数ですが宜しく お願いします

  • テキストファイルを読み込み 偶数行の特定の文字を置換するには?

    お世話になります。 vb6なんですけどテキストファイルを読み込んで 偶数行のある文字を置換したいんですけど このサンプルをどういう風に改変して偶数行の文字列をある文字列に 置換するコードを書いてよいのかわかりません。 置換するのはreplace関数を使うと思うのですが。 教えて下さい。お願いします。 Dim n As Long, tmp As String n = FreeFile Open "D:\Test.txt" For Input As #n Line Input #n, tmp Close #n

  • Excelで置換した文字に色をつけたい

    よろしくお願いします Excelで、「対象シート」のB列を参照して、 「置換リスト」シートの一覧のC列の文字列をE列の文字列に置換するようにしています。 「対象シート」のA列には置換前のデータも入っているので、 「対象シート」のA列、B列それぞれの置換前、置換後の文字列に色をつけたいと思っています。 どの文字がどの文字に置換されたかを比較するためです。 置換後のB列のみ下記式で色をつけられたのですが、 該当文字が含まれる、セル内全部の文字の色が変わってしまいました。 該当文字だけの色を変えるにはどうすればよいでしょうか。 また、「置換リスト」シートのC列にある場は「対象シート」のA列の該当文字のみを赤くする方法も教えていただけないでしょうか。 Sub list置換_Click() Dim list_sheet As Worksheet Dim chg_sheet As Worksheet 'こっちは置換する元の文字と置換文字のリスト Set list_sheet = Worksheets("置換リスト") 'こっちは一括置換したい対象のシート Set chg_sheet = Worksheets("対象シート") cnt = list_sheet.Range("c4").CurrentRegion.Rows.Count For i = 4 To cnt srcword = list_sheet.Cells(i, "C").Value repword = list_sheet.Cells(i, "E").Value With Application.ReplaceFormat.Font .Subscript = False .Color = 255 .TintAndShade = 0 End With Columns("B:B").Replace What:=srcword, Replacement:=repword, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=True Next i End Sub よろしくお願いいたします。

  • VBA エクセル 文字列

    A列に、【鈴木 太郎】、【佐藤 一郎】・・・・と続いていて、B列には鈴木、佐藤・・・と表示させたい場合は以下のソースに、 =LEFT(A1,FIND(" ",SUBSTITUTE(A1," "," "))-1) と同じソースを書けばいいのはわかるのですが、勉強不足でわかりません。教えていただけませんでしょうか。下記のソースも教えていただきました。すごく助かります。 Sub PickupWords() Dim Matches As Object Dim Match As Object Dim buf As String Dim c As Variant With CreateObject("VBScript.RegExp") .Pattern = "【(.+)】" .Global = False Application.ScreenUpdating = False For Each c In Range("A1", Cells(Rows.Count, 1).End(xlUp)) If .Test(c.Value) Then buf = c.Value Set Matches = .Execute(buf) c.Offset(, 1).Value = Matches.Item(0).SubMatches(0) '括弧の中を取り出す End If Next c Application.ScreenUpdating = True End With End Sub

  • VBAにて

    質問です。 入力したデータから入力範囲まで ある条件を超えたら(例えば 100超えたら セル色を黄色にする) セル色を変えるVBAを作りたいのですが 何故か?出来ません。 知識ある方々・ご意見ある方々のご意見やアドバイスを お願いします。 コードは下記に記入しました。 Private Sub 色付け_Click() Dim n1 As Variant Dim n2 As Variant Dim i As Variant n1 = Range("C3") n2 = Range("C3").End(xlDown) For i = n1 To n2 If i.Value >= 32000 Then i.Interior.ColorIndex = 38 End If Next i 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 別シートのセルから、文字列を参照するには?

    Excel VBAに於いて 同BOOKのSheet1から、Sheet2の文字列を変数に入れよとするとエラーになります。 何故でしょうか。 また、その対処法を、御教示ください。 Dim objWBK As Workbook Dim objSH As Worksheet Set objWBK = ThisWorkbook Set objSH = objWBK.Sheet2 Dim cnsFILENAME As String cnsFILENAME = objSH.Range("a4")     ← ここで、「オブジェクトは、このプロジェクトでサポートされていません。」と、エラーメッセージが出る。 Sheet2.Range(”A4”)には、文字列を入れてある。 以上、よろしくお願いします。

専門家に質問してみよう