1

Excelプログラミングの初心者として、Excelで使用できる関数/ UDF / VBAをWebで検索して、セル内のサブ文字列を検索し、このセル内で太字/色付けしました。

このようなシートを下に持っています。-列Aには、部分的にフォーマットするテキストが含まれます。-列Bには、探しているサブ文字列が含まれます。-列Cには、文字列(A)内のサブ文字列(B)の位置が含まれます。

          A          B         C
1  ABCDEFGHIJKLM   FGHI      6-9
2  NOPQRSTUVWXYZ   UVWXY     8-12
...

ここで私が取得する必要があるもの:

          A          B         C
1  ABCDE**FGHI**JKLM   FGHI      6-9
2  NOPQRST**UVWXY**Z   UVWXY     8-12
...

行だけでなく列全体に適用することは可能ですか?

どんな助けやアドバイスも大歓迎です。ありがとう !

4

1 に答える 1

1
' just add a loop and some checkings
Sub t()

Dim heightA As Long
Dim heightB As Long
Dim height As Long
Dim i As Long

heightA = Cells(Rows.Count, 1).End(xlUp).Row
heightB = Cells(Rows.Count, 2).End(xlUp).Row
If heightA < heightB Then
    height = heightA
Else
    height = heightB
End If

If height > 1 Then
    For i = 1 To height
        Range("A" & i).Font.Bold = False
        ''Replace the formula with the full string
        Range("A" & i) = Range("A" & i).Value
        'Find the starting position of the string in B within the string produced by the formula
        If Range("B" & i).Value <> "" Then
            myPos = InStr(1, Range("A" & i).Value, Range("B" & i).Value, 1)
            If myPos > 0 Then
                'Bold the string from B column
                Range("A" & i).Characters(myPos, Len(Range("B" & i).Value)).Font.Bold = True
            End If
        End If
    Next i
End If
End Sub

編集:MASTER_STR、SUBSTR1、POS1(START-END)、SUBSTR2、POS2などの形式でPOSITIONを使用します

Sub t()

Dim heightA As Long
Dim heightB As Long
Dim height As Long
Dim i As Long
Dim length As Long
Dim tmp
Dim width As Long
heightA = Cells(Rows.Count, 1).End(xlUp).Row
heightB = Cells(Rows.Count, 2).End(xlUp).Row
If heightA < heightB Then
    height = heightA
Else
    height = heightB
End If

If height > 1 Then
    For i = 1 To height
        Range("A" & i).Font.Bold = False
        ''Replace the formula with the full string
        Range("A" & i) = Range("A" & i).Value
        'Find the starting position of the string in B within the string produced by the formula
        width = Cells(i, Columns.Count).End(xlToLeft).Column
        If width >= 3 Then
            For j = 3 To width Step 2
            If Cells(i, j).Value <> "" Then
                    tmp = Split(Cells(i, j).Value, "-")
                    myPos = CLng(tmp(0))
                    length = CLng(tmp(1)) - myPos + 1
                    'myPos = InStr(1, Range("A" & i).Value, Range("B" & i).Value, 1)
                    If myPos > 0 Then
                        'Bold the string from B column
                        Range("A" & i).Characters(myPos, length).Font.Bold = True
                    End If
                End If
            Next j
        End If
    Next i
End If
End Sub

サンプル入力

ABCDEFG A   1-1 C   3-5
ABCDEFG A   1-1 C   3-3
于 2012-12-13T05:13:46.563 に答える