Excel 基于另一单元格的内容将格式应用于单元格的一部分
我试图根据另一个单元格的内容,对单元格的一部分应用特定格式 我是VBA初学者,能够根据字符串中的位置将不同的格式应用于单元格的某些部分,但仅此而已 第1页F列有SKU字符串(用逗号分隔)。我希望在对该产品执行检查后,将单个SKU设置为粗体。 我正在将数据导入表2,其中D列包含已检查产品的SKU 总之,我希望第1页F列中字符串中的单个SKU以粗体显示,这是基于第2页D列中SKU的存在 任何人都可以协助使用VBA代码吗?如果有任何帮助,我将不胜感激 (我搜索了很多论坛,到目前为止还没有找到答案) 编辑: 我发现了以下内容,可以使用它。但它基于设置变量,而非动态:Excel 基于另一单元格的内容将格式应用于单元格的一部分,excel,vba,formatting,Excel,Vba,Formatting,我试图根据另一个单元格的内容,对单元格的一部分应用特定格式 我是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列中找到任何匹配项
- 突出显示字符串中的数字(粗体文本)
.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
端接头
希望这确实回答了您的问题,并且已经足够清楚地理解了。非常感谢您的帮助。它确实回答了我的问题,而你一步一步带我走过的方式非常有帮助!再次感谢你!