我想知道是否有人可以帮助我。
我正在使用下面的代码搜索包含值“OVH”的任何单元格的命名范围(“ProjectName”)。找到此值后,脚本将从此范围创建一个唯一值列表,并将它们粘贴到命名范围“EnhancementsList”
Sub UniqueEnhancements()
Dim MyCell
With CreateObject("scripting.dictionary")
For Each MyCell In Range("ProjectName").Value
If InStr(1, MyCell, "OVH") > 0 Then
.Item(MyCell) = 1
End If
Next
Range("EnhancementsList").Resize(.Count) = Application.Transpose(.keys)
End With
Worksheets("Enhancements").Columns("B:B").AutoFit
Range("EnhancementsList").Sort Key1:=Range("EnhancementsList").Cells(2, 1), _
Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
End Sub
代码工作正常,但我想尽可能调整它,以便虽然它检查“OVH”文本字符串的“ProjectName”范围,但它会复制,并从列中创建唯一值列表向左移动一步,命名范围为“任务”,但我不知道如何做到这一点,尽管花了几天时间试图找到解决方案。
我尝试用我有限的知识来改变这一行:
.Item(MyCell) = 1
到
.Item(MyCell.offset -1) = 1
和
.Item.offset-1 (MyCell) = 1
但我收到不匹配错误。
我只是想知道是否有人可以看看这个请让我知道我哪里出错了。
非常感谢和亲切的问候
答案 0 :(得分:0)
问题是你为For Each循环使用.value而不是.cells。所以MyCell最终是一个字符串,你不能从一个字符串偏移
请改为尝试:
For Each MyCell In Range("ProjectName").Cells
If InStr(1, MyCell.Value, "OVH") > 0 Then
.Item(MyCell.Offset(0,-1)) = 1
End If
Next
(未经测试)
答案 1 :(得分:0)
Offset
的格式为
Offset([RowOffset],[ColumnOffset])
因此,如果您希望将值放在单元格左侧的一列,则需要执行以下操作
MyCell.Offset(0,-1)