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