Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 循环范围并基于计数附加值_Excel - Fatal编程技术网

Excel 循环范围并基于计数附加值

Excel 循环范围并基于计数附加值,excel,Excel,搜索网页等等,但找不到对我有帮助的答案。希望一个直接的问题能给社区带来启示 我想创建一个代码,该代码查看一个范围(列标题),检测重复项,然后在每个重复项后面追加计数 例如,我的列标题如下所示: 卖主 追踪号码 陈列 类型 呼叫报告标志 类型 应得的 创建人 创造 创建人 创造 运行代码后,我希望它们看起来像这样: 卖主 追踪号码 陈列 类型1 呼叫报告标志 类型2 应得的 由1创建 创建1 由2创建 创建2 非重复项被保留,重复项被当前计数追加 我尝试了一些代码,它使用“for each

搜索网页等等,但找不到对我有帮助的答案。希望一个直接的问题能给社区带来启示

我想创建一个代码,该代码查看一个范围(列标题),检测重复项,然后在每个重复项后面追加计数

例如,我的列标题如下所示:

  • 卖主
  • 追踪号码
  • 陈列
  • 类型
  • 呼叫报告标志
  • 类型
  • 应得的
  • 创建人
  • 创造
  • 创建人
  • 创造
运行代码后,我希望它们看起来像这样:

  • 卖主
  • 追踪号码
  • 陈列
  • 类型1
  • 呼叫报告标志
  • 类型2
  • 应得的
  • 由1创建
  • 创建1
  • 由2创建
  • 创建2
非重复项被保留,重复项被当前计数追加

我尝试了一些代码,它使用“for each cell in my range”(我的范围内的每个单元格)计算重复数,但一旦它附加了该计数,它就不再将其视为重复,因此当它移动到下一个单元格时,它不会附加

以下是我的代码(尽管我认为我可能需要从一个不同的策略开始):

Sub TestSub()


希望有人能帮忙。

这使用了以下公式的基础:

=IF(COUNTIF(1:1,A1)>1,A1&COUNTIF($A$1:A$1,A1),A1)
要想做你想做的事:

Sub TestSub()

Dim Cell As Range
Dim Headers As Range
Dim Headers2 As Range
With Worksheets("TEST SHEET")
    Set Headers = .UsedRange.Rows("1:1")
    Headers.Copy .Range("A" & Worksheets("Sheet3").Rows.Count)
    Set Headers2 = .UsedRange.Rows(.Rows.Count & ":" & .Rows.Count)

    For Each Cell In Headers.Cells
        If WorksheetFunction.CountIf(Headers2, Cell.Value) > 1 Then
            Cell.Value = Cell.Value & WorksheetFunction.CountIf(Range("A" & .Rows.Count, .Cells(.Rows.Count, Cell.Column)), Cell.Value)
        End If
    Next Cell
    Headers2.ClearContents

End With
End Sub
我们需要将标题复制到另一个位置,以便在COUNTIF()中使用。否则,一旦第一个值被更改,其他值都将不相等,countif无法找到多个值


这使用了这个公式的基本原理:

=IF(COUNTIF(1:1,A1)>1,A1&COUNTIF($A$1:A$1,A1),A1)
要想做你想做的事:

Sub TestSub()

Dim Cell As Range
Dim Headers As Range
Dim Headers2 As Range
With Worksheets("TEST SHEET")
    Set Headers = .UsedRange.Rows("1:1")
    Headers.Copy .Range("A" & Worksheets("Sheet3").Rows.Count)
    Set Headers2 = .UsedRange.Rows(.Rows.Count & ":" & .Rows.Count)

    For Each Cell In Headers.Cells
        If WorksheetFunction.CountIf(Headers2, Cell.Value) > 1 Then
            Cell.Value = Cell.Value & WorksheetFunction.CountIf(Range("A" & .Rows.Count, .Cells(.Rows.Count, Cell.Column)), Cell.Value)
        End If
    Next Cell
    Headers2.ClearContents

End With
End Sub
我们需要将标题复制到另一个位置,以便在COUNTIF()中使用。否则,一旦第一个值被更改,其他值都将不相等,countif无法找到多个值


谢谢你,斯科特。这可能有用。让我再问一个问题。有没有一种方法可以代替将头复制到另一个位置,将原始头存储在一个数组中?有,但是COUNTIF将不起作用,我们需要做更多的循环和逻辑来使它起作用。我假设表中最后一行没有数据,这取决于65000或1000000左右的版本;你回答了。您上面的代码引用了“Sheet3”-这是错误吗?(假设这是“测试表”)@JTaylor请参见编辑。您可能需要刷新页面。@JTaylor如果这对您有效,请记住标记为已回答。谢谢Scott。这可能有用。让我再问一个问题。有没有一种方法可以代替将头复制到另一个位置,将原始头存储在一个数组中?有,但是COUNTIF将不起作用,我们需要做更多的循环和逻辑来使它起作用。我假设表中最后一行没有数据,这取决于65000或1000000左右的版本;你回答了。您上面的代码引用了“Sheet3”-这是错误吗?(假设这是“测试表”)@JTaylor请参见编辑。您可能需要刷新页面。@JTaylor如果这对您有效,请记住标记为已回答。