【问题标题】:Extracting unique values from row in Excel从Excel中的行中提取唯一值
【发布时间】:2018-06-03 12:58:24
【问题描述】:

我需要将行中的唯一值汇总到同一行中的列中。我的目标是在附件图像的第二行,其中T:Z 包含数据,AA:AC 包含摘要(我为演示输入了值)。第一行是当前发生的情况,我尝试对大于零的值使用嵌套的 if 函数,但我也尝试使用索引匹配函数无济于事。问题是我要么在AA:AC 中收到重复项,要么没有包含所有值。

目前使用 Excel 2016

【问题讨论】:

  • “糟糕的结肠准备”从何而来?这不在您的源数据中。
  • 想告诉我们这些列中摘要单元格的决策吗?
  • 您好,Patrick,我需要汇总列中的数据,因为我强制将新数据提取到旧数据集中。旧数据集只有一个原因。我的希望是简单地将新的原因列添加到旧数据集中。蒂姆,“糟糕的结肠准备”可能在 S 列中。

标签: arrays excel vba if-statement duplicates


【解决方案1】:

因此,如果我理解正确,您将拥有一张数据行。您想查看 T:Z 列,然后在 AA:AC 列中生成唯一值(非零)列表。我假设你知道你永远不会有超过 3 个唯一值,但我不能确定这不仅仅是一个遗漏。

不管怎样,下面的代码应该可以工作:

Sub Find_Uniques()
    Dim X As Integer, Y As Integer, Z As Integer
    Dim Temp_Strings() As String
    For X = 1 to 10000 'This assumes you don't have more than 10,000 rows of data
        ReDim Temp_Strings(1 to 5) As String
        For Y = 20 to 26
            If Range(Cells(X,Y).Address).Value <> "" And Range(Cells(X,Y).Address).Value <> 0 Then
                For Z = 1 to 5
                    If Temp_Strings(Z) = "" Then
                        Temp_Strings(Z) = Range(Cells(X,Y).Address).Value
                        Exit For
                    End If
                    If Temp_Strings(Z) = Range(Cells(X,Y).Address).Value Then Exit For
                Next Z
            End If
        Next Y
        For Z = 1 to 5
            If Temp_Strings(Z) <> "" Then Range(Cells(X,Z+26).Address)).Value = Temp_String(Z)
        Next Z
    Next X
End Sub

【讨论】:

    【解决方案2】:

    感谢大家的帮助。我没有从行中提取数据,而是编写了一个宏,将零更改为空白,删除空白单元格,并将它们移到左侧。之后,很容易剪切范围并将其粘贴到要分析的旧数据集中。

    Sub clean_data()
    Sheets("Reason data").Range("H:Z").Replace 0, ""
    
    Call delete_blanks
    End Sub
    Sub delete_blanks()
    
    Sheets("Reason data").Range("H:Z").SpecialCells(xlCellTypeBlanks).Delete (xlToLeft)
    
    Call move_data
    
    End Sub
    Sub move_data()
    'Copies reason data and pastes it into data worksheet
    
    Sheets("Reason data").Range("A3:K3", Sheets("Reason data").Range("A3:F3").End(xlDown)).Cut _
    Sheets("Data").Range("A1").End(xlDown).Offset(1)
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 2018-04-20
      • 1970-01-01
      相关资源
      最近更新 更多