5

Excel セル内の特定のテキストを強調表示する VBA 関数を作成したいと思います。これは可能ですか?グーグルで調べましたが、現時点では不明です。

明確にするために、特定の列でテキスト値 (実際には値のリスト) を検索し、一致したテキストを黄色で強調表示したいと思います。

注:これは私がやったことです:

  Sub Colors()


    Dim searchString As String
    Dim targetString As String
    Dim startPos As Integer

    searchString = "abc"
    targetString = Cells(2, 1).Value
    startPos = InStr(targetString, searchString)

    If startPos > 0 Then

        Cells(2, 1).Characters(startPos, Len(searchString)).Font.Color = vbRed

    End If


 End Sub
4

6 に答える 6

15

これが基本原則です。このコードをカスタマイズすることは、あなたが求めているものではないと思います (これに関する詳細は提供されていないため)。

 Sub Colors()

 With Range("A1")
    .Value = "Test"
    .Characters(2, 2).Font.Color = vbGreen
 End With

 End Sub

最初の「2」は色を付ける必要がある最初の文字を指し、2 番目の「2」は長さを指します。

于 2012-07-26T15:32:23.267 に答える
6

これは、セル内の特定の文字列パターンを強調表示しようとする将来の読者向けです。

(これが私が質問を解釈した方法です)この例では、F1で検索される文字列を設定できます

Sub test4String2color()
Dim strTest As String
Dim strLen As Integer
 strTest = Range("F1")
 strLen = Len(strTest)
For Each cell In Range("A1:D100")
 If InStr(cell, strTest) > 0 Then
  cell.Characters(InStr(cell, strTest), strLen).Font.Color = vbRed
 End If
Next
End Sub
于 2012-07-26T18:47:44.877 に答える
1

セル内のテキストを強調表示する際の問題の 1 つは、文字列が複数回出現する可能性があることです。そのため、コードはそれ以上あるかどうかを実際に確認する必要があります。その問題に対する私の解決策は次のとおりです。

Sub Colors()


    Dim searchTerms As Variant


    searchTerms = Array("searchterm1", "searchterm2",  "lastsearchterm")


    Dim searchString As String
    Dim targetString As String
    Dim offSet As Integer
    Dim colToSearch As Integer
    Dim arrayPos, rowNum As Integer

    colToSearch = 3


    For arrayPos = LBound(searchTerms) To UBound(searchTerms)
        For rowNum = 2 To 31124

            searchString = Trim(searchTerms(arrayPos))

            offSet = 1

            Dim x As Integer

            targetString = Cells(rowNum, colToSearch).Value

            x = HilightString(offSet, searchString, rowNum, colToSearc)

        Next rowNum
    Next arrayPos

 End Sub

Function HilightString(offSet As Integer, searchString As String, rowNum As Integer, ingredCol As Integer) As Integer

            Dim x As Integer
            Dim newOffset As Integer
            Dim targetString As String


            ' offet starts at 1

            targetString = Mid(Cells(rowNum, ingredCol), offSet)

            foundPos = InStr(LCase(targetString), searchString)

            If foundPos > 0 Then

                ' the found position will cause a highlight where it was found in the cell starting at the offset - 1
                Cells(rowNum, ingredCol).Characters(offSet + foundPos - 1, Len(searchString)).Font.Color = vbRed

                ' increment the offset to found position + 1 + the length of the search string
                newOffset = offSet + foundPos + Len(searchString)

                x = HilightString(newOffset, searchString, rowNum, ingredCol)
            Else
                ' if it's not found, come back out of the recursive call stack
                Exit Function
            End If
End Function
于 2012-07-27T16:30:41.207 に答える
1

@Jack BeNimble はコードに感謝し、10 分でセル内のすべての数字を強調表示することに成功しました。最初に行とセル内のすべての検索用語を検索し、複数の列を許可して、少し再編成しました。エラーが 1 つ見つかりました。ハイライト テキストは繰り返し 55、444 が好きではなく、シーケンス内の奇数の繰り返しのみを強調表示していました。ハイライト機能を1行修正

newOffset = offSet + foundPos + Len(searchString) - 1 //added the - 1.

これが私の変更されたコードです。

サブナンバーカラー()

Dim searchTerms As Variant


searchTerms = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".")


Dim searchString As String
Dim targetString As String
Dim offSet As Integer
Dim colsToSearch As Variant
Dim arrayPos, colIndex, colNum As Integer
Dim rowNum As Integer

colsToSearch = Array(4, 44, 45)


For colIndex = LBound(colsToSearch) To UBound(colsToSearch)
    colNum = colsToSearch(colIndex)
    For rowNum = 5 To 3000
        For arrayPos = LBound(searchTerms) To UBound(searchTerms)
            searchString = Trim(searchTerms(arrayPos))

            offSet = 1

            Dim x As Integer

            targetString = Cells(rowNum, colNum).Value

            x = HilightString(offSet, searchString, rowNum, colNum)
        Next arrayPos
    Next rowNum
Next colIndex

サブ終了

関数 HilightString (整数としての offSet、文字列としての searchString、整数としての rowNum、整数としての ingredCol) としての整数

        Dim x As Integer
        Dim newOffset As Integer
        Dim targetString As String


        ' offet starts at 1

        targetString = Mid(Cells(rowNum, ingredCol), offSet)

        foundPos = InStr(LCase(targetString), searchString)

        If foundPos > 0 Then

            ' the found position will cause a highlight where it was found in the cell starting at the offset - 1
            Cells(rowNum, ingredCol).Characters(offSet + foundPos - 1, Len(searchString)).Font.Color = vbBlue

            ' increment the offset to found position + 1 + the length of the search string
            newOffset = offSet + foundPos + Len(searchString) - 1

            x = HilightString(newOffset, searchString, rowNum, ingredCol)
        Else
            ' if it's not found, come back out of the recursive call stack
            Exit Function
        End If

終了機能

Jack BeNimble と datatoo に感謝します

于 2017-09-22T16:59:04.090 に答える
-2

これを行うのに VBA は必要ありません。条件付き書式を使用できます。

列 E に一連の値があるとします。セル B1 に値を入力し、その値に一致する列 E のセルを強調表示したいとします。

列 E のセルを強調表示し、次の条件付き書式を適用します。

一致するセルを強調表示する

合わせて色を変更します。これにより、列 E のセルに相対的な条件付き書式が適用されます。例: E3 を選択して条件付き書式を表示すると、次のようになります。

相対参照

数式がどのように調整されたかがわかります。

(編集: B1 の値を列 E の値の部分文字列と一致させたい場合は、代わりにこの条件付き書式設定式を使用してください: =FIND($B$1,E1)>0)

セル B1 に異なる値を入力します。列 E のいずれかの値と一致する値を入力すると、それらのセル (列 E) の色が変わります。セル B1 を列 E に存在しない値に変更すると、書式設定が消えます。

于 2012-07-26T15:53:59.733 に答える