找到文本字符串时从列复制值

时间:2013-08-02 15:54:49

标签: excel-vba excel-2013 vba excel

我想知道是否有人可以帮助我。

我正在使用下面的代码搜索包含值“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

但我收到不匹配错误。

我只是想知道是否有人可以看看这个请让我知道我哪里出错了。

非常感谢和亲切的问候

2 个答案:

答案 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)