【问题标题】:How to check for repeated value in array in previous position?如何检查数组中先前位置的重复值?
【发布时间】:2019-06-14 15:25:42
【问题描述】:

我正在尝试检查数组中的先前值以查看它是否重复,如果是,则结束函数并继续下一个非重复值。 说你有

lRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    ReDim weeks(1 To lRow - 1)

    For i = 2 To lRow
        weeks(i - 1) = WorksheetFunction.WeekNum(Sheet1.Cells(i, "C"), vbMonday)
        'MsgBox lRow
    Next i

所以向量“周”有 (15,4,8,15,15,4,16)

lRow = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To sizeOf(weeks) 
    addHours= 0
    For j = 2 To lRow
        If WorksheetFunction.WeekNum(Worksheets("Sheet2").Cells(j, "B"), vbMonday) = weeks(i) Then
            addHours= addHours+ Worksheets("Sheet2").Cells(j, "C").Value
            Sheet1.Cells(i + 1, "F") = addHours

        End If
    Next j
    addHours= 0
Next i
WeekHours = addHours

当上面的代码点击“weeks(3)”时,它应该跳过它并检查下一个是否重复并继续跳过,如果没有,则进行添加。

任何帮助都会很棒

【问题讨论】:

  • 使用字典(您需要添加脚本参考库)。检查数组的每个元素(dictionary.exists(element))。如果没有,请添加它 (dictionary.add(element))。如果是,则为重复值。

标签: excel vba


【解决方案1】:

构建字典而不是数组。字典中没有重复的键。

Dim weeks as object, k as variant

lRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
set weeks = createobject("scripting.dictionary")

For i = 2 To lRow
    weeks.Item(WorksheetFunction.WeekNum(Sheet1.Cells(i, "C"), vbMonday)) = vbnullstring
Next i

for each k in weeks.keys
    debug.print k
next k

【讨论】:

  • 感谢您的回复。我去看看
  • 如何获得该对象周的大小?
  • weeks.count 产生计数。请注意,我修改了遍历字典键的 For Next。
  • 顺便说一句,如果您只想将字典键传输到常规变体数组,那么 arr = weeks.keys.
猜你喜欢
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多