0

誰かが私を助けてくれるのではないかと思います。

以下のコードを使用して、値「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」範囲をチェックしますが、列から一意の値のリストをコピーして作成するようにしたいと思います。名前付きの範囲「Task」が残っていますが、解決策を考え出すために数日を費やしたにもかかわらず、これを行う方法がわかりません。

私が持っている限られた知識で、この行を変更しようとしました:

.Item(MyCell) = 1

.Item(MyCell.offset -1) = 1

.Item.offset-1 (MyCell) = 1

しかし、不一致エラーが発生します。

誰かがこれを見て、どこが間違っているのか教えてください。

多くの感謝と親切な敬意

4

2 に答える 2

0

のフォーマットOffset

Offset([RowOffset],[ColumnOffset])

したがって、セルの 1 列左の値を取得する場合は、次の手順を実行する必要があります。

MyCell.Offset(0,-1)
于 2013-08-02T16:21:44.037 に答える
0

問題は、For Each ループに .cells の代わりに .value を使用していることです。したがって、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

(未検証)

于 2013-08-02T16:21:16.003 に答える