excel - 如何确定连续值组?

标签 excel vba

我在 A 列中有一些数据,如下所示

ColA
Z
A

Z
A

Z
A
A
B
B
B

Z
B
B

Z
C
C
C
D
D
我想在 B 列打印
  • "0"如果 A 中的单元格 = "Z"
  • 当 A 中的单元格为空时为空
  • 例如,当一个组以字母 A 开头时,所有接下来的 A 都应标记为 1。
  • 当下一组开始时,即用字母 B,然后用 2 标记所有后面的 B,
  • 当开始一个新组时,即用字母 C,再次用值 1 标记,依此类推。
  • A 列中的值不是按字母顺序排列的字母。只是一个例子。我只知道“Z”的值,组可以有任何字符串

  • 也就是说,为每个新组交替分配值 1 和 2。我希望有意义。
    这是我当前的代码
    Sub t1()
    Dim dict As Object
    
    Set dict = CreateObject("Scripting.Dictionary")
    
    For i = 1 To 24
        If Cells(i, "A") = "Z" Then
            Cells(i, "B") = "0"
        ElseIf Cells(i, "A") <> "Z" And Cells(i, "A") <> "" Then
            counter = counter + 1
            dict.Add Key:=Cells(i, "A"), Item:=1
            
            If Not dict.Exists(Cells(i, "A")) Then
                If counter Mod 2 = 1 Then
                    Cells(i, "B") = "1"
                Else
                    Cells(i, "B") = "2"
                End If
            End If
        End If
    Next
    End Sub
    
    我在 B 列中的当前输出和我在列单元格中的预期输出
    ColA ColB    ColC
    Z      0     0
    A      1     1
               
    Z      0     0
    A      2     1
               
    Z      0     0
    A      1     1
    A      2     1
    B      1     2
    B      2     2
    B      1     2
               
    Z      0     0
    B      2     2
    B      1     2
               
    Z      0     0
    C      2     1
    C      1     1
    C      2     1
    D      1     2
    D      2     2
    
    也许有人可以帮助我。谢谢

    最佳答案

    Hello, no. Imagine Z and empty values don't exist. Then we have this input A,A,A,B,C,C,C,C,D,D,A,E,E,E,B,A. I only want the alternation between 1 and 2 for each new group. Doesn't matter if A has appeared before, should be taken as new group. With this input the, output should be 1,1,1,2,1,1,1,1,2,2,1,2,2,2,1,2 – Ger Cas 9 hours ago


    试试这个疯狂的公式(我相信这可以变得更简单)。将其放入单元格 B2如下图所示=IF(ISBLANK(A2),"",IF(A2="Z",0,IF(A2=A1,B1,IF(OR(A1="Z",ISBLANK(A1)),IF(ISERROR(INDEX($A$1:$A1,AGGREGATE(14,6,ROW($1:1)/($A$1:$A1=A2),1))),IFERROR((A1+1),1),IF(OR(INDEX($A$1:$A1,AGGREGATE(14,6,ROW($1:1)/($A$1:$A1=A2),1)+1)="Z",INDEX($A$1:$A1,AGGREGATE(14,6,ROW($1:1)/($A$1:$A1=A2),1)+1)=""),INDEX(B:B,MATCH(A2,$A$1:$A1,0),1),1)),IF(B1=1,2,IF(B1=2,1,""))))))假设您的数据看起来像这样
    enter image description here
    解释
    按照以下顺序进行一系列检查
  • ISBLANK(A2) : 检查单元格是否为空。如果它为空,则保持输出为空。
  • A2="Z" :检查单元格是否有“Z”。输出 0 .
  • A2<>A1 :检查 A 列中的值是否发生变化。如果没有,则从顶部获取值。如果它发生变化,请查看下一个检查
  • 然后我们使用 INDEXAGGREGATE()进行反向匹配以查找该值的出现,如果找到匹配项,则从列 B 中提取相应的值
  • 关于excel - 如何确定连续值组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63083653/

    相关文章:

    excel - 找不到类型 'Microsoft.Office.Tools.Ribbon.RibbonTab' 错误阻止设计器打开

    excel - 根据另一列中的条件从一列中获取所有值并自动更新

    excel - VBA 第一次创建类

    vba - 使用 FileDialog 选择文件名

    vba - 如何使用 VBA 添加 MS Outlook 提醒事件处理程序

    excel - 同步功能区下拉菜单以显示事件工作表

    java - 内存不足错误(Java): Java heap space

    excel - excel中日期时间相减

    file - 使用 VBA (excel) 将特殊的 ascii 字符插入到文件中

    vba - 如何使用 VBA 从 MS-Word 文档中提取特定表格?