Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 基于另一单元格的内容将格式应用于单元格的一部分_Excel_Vba_Formatting - Fatal编程技术网

Excel 基于另一单元格的内容将格式应用于单元格的一部分

Excel 基于另一单元格的内容将格式应用于单元格的一部分,excel,vba,formatting,Excel,Vba,Formatting,我试图根据另一个单元格的内容,对单元格的一部分应用特定格式 我是VBA初学者,能够根据字符串中的位置将不同的格式应用于单元格的某些部分,但仅此而已 第1页F列有SKU字符串(用逗号分隔)。我希望在对该产品执行检查后,将单个SKU设置为粗体。 我正在将数据导入表2,其中D列包含已检查产品的SKU 总之,我希望第1页F列中字符串中的单个SKU以粗体显示,这是基于第2页D列中SKU的存在 任何人都可以协助使用VBA代码吗?如果有任何帮助,我将不胜感激 (我搜索了很多论坛,到目前为止还没有找到答案) 编

我试图根据另一个单元格的内容,对单元格的一部分应用特定格式

我是VBA初学者,能够根据字符串中的位置将不同的格式应用于单元格的某些部分,但仅此而已

第1页F列有SKU字符串(用逗号分隔)。我希望在对该产品执行检查后,将单个SKU设置为粗体。 我正在将数据导入表2,其中D列包含已检查产品的SKU

总之,我希望第1页F列中字符串中的单个SKU以粗体显示,这是基于第2页D列中SKU的存在

任何人都可以协助使用VBA代码吗?如果有任何帮助,我将不胜感激

(我搜索了很多论坛,到目前为止还没有找到答案)

编辑: 我发现了以下内容,可以使用它。但它基于设置变量,而非动态:

Sub test()

    For row_num = 1 To 13

        'Cell contents
        cell_text = Cells(row_num, 1)

        'Same contents split into three parts and saved in an array
        text_array = Split(cell_text, " ")

        'Length of part 1
        length_1 = Len(text_array(0))

        'Length of part 2
        length_2 = Len(text_array(1))

        'Set ITALICS for Part 1
        Cells(row_num, 1).Characters(1, length_1).Font.Color = vbGreen

        'Set BOLD for Part 2
        Cells(row_num, 1).Characters(length_1 + 2, length_2).Font.Bold = 
        True

    Next

End Sub
这仍然是一个假设问题,但下面的文件中有一个关于这两列内容的非常小的示例


好的,如果理解正确并基于您的文字“为了总结,我希望根据第2页D列中的SKU,将第1页F列字符串中的单个SKU加粗”您希望:

  • 循环浏览图纸(2)上D列中的行
  • 在工作表(1)的F列中找到任何匹配项
  • 突出显示字符串中的数字(粗体文本)
我会帮你找到正确的方向:

1)。首先,您需要动态循环工作表(2)上D列中的所有行。有很多方法可以做到这一点,但我个人喜欢使用
.UsedRange
。例如:

Dim CL As Range
For Each CL In Sheets(2).UsedRange.Columns(4).Rows
    'Your code Part 2
Next CL
2)。现在您必须在工作表(1)的F列中找到这些值的匹配项。一种智能/快速的方法是利用
.FindNext
查看价值部分。在实际操作中,这看起来像这样:

Dim CLL as Range
Dim FirstAddress as String
With Sheets(1).Columns(6)
    Set CLL = .Find(What:=CL.Value, LookIn:=xlValues, Lookat:=xlPart)
    If Not CLL Is Nothing Then
        FirstAddress = CLL.Address
        Do
            'You code Part 3
            Set CLL = .FindNext(CLL)
        Loop While Not CLL Is Nothing And CLL.Address <> FirstAddress
    End If
End With
Dim POS as Long
POS = InStr(1, CLL.Value, CL.Value)
“1”表示要从字符串中的哪个位置开始搜索。CLL.Value是我们查找的整个字符串,使CL.Value成为我们的搜索值

4)。现在,我们可以指示字符串的起始位置,我们想知道搜索值的长度,我们可以使用
.Len
函数生成数值

=Len(CL.Value)
差不多了,对吧?只需使用
.characters
将字符加粗即可。我们可以将
Bold
设置为
True
。它非常漂亮,使用方法如下:

CLL.Characters(POS, Len(CL.Value)).Font.Bold = True
POS
这里是我们的起始位置,而
LEn(CL.Value)
显然是我们需要的粗体长度

6)。我们到了。如果我们将所有这些结合起来:

Sub CreateBold()

Dim CL As Range, CLL As Range
Dim FirstAddress As String
Dim POS As Long

For Each CL In Sheets(2).UsedRange.Columns(4).Rows
    With Sheets(1).Columns(6)
        Set CLL = .Find(What:=CL.Value, LookIn:=xlValues, Lookat:=xlPart)
        If Not CLL Is Nothing Then
            FirstAddress = CLL.Address
            Do
                POS = InStr(1, CLL.Value, CL.Value)
                CLL.Characters(POS, Len(CL.Value)).Font.Bold = True
                Set CLL = .FindNext(CLL)
            Loop While Not CLL Is Nothing And CLL.Address <> FirstAddress
        End If
    End With
Next CL

End Sub
Sub-CreateBold()
尺寸CL As范围,CLL As范围
将第一个地址设置为字符串
变暗位置尽可能长
对于第(2)页中的每个CL,使用表列(4)行
附页(1)。列(6)
设置CLL=.Find(What:=CL.Value,LookIn:=xlValues,Lookat:=xlPart)
如果不是,那么CLL什么都不是
FirstAddress=CLL.Address
做
位置=仪表(1,刻度值,刻度值)
CLL.字符(位置、长度(CL.Value)).Font.Bold=True
设置CLL=.FindNext(CLL)
循环而非CLL为Nothing,CLL.Address为FirstAddress
如果结束
以
下一个CL
端接头

希望这确实回答了您的问题,并且已经足够清楚地理解了。

非常感谢您的帮助。它确实回答了我的问题,而你一步一步带我走过的方式非常有帮助!再次感谢你!