如何遍历列并检查该值是不是与下一个值匹配然后追加?

Posted

技术标签:

【中文标题】如何遍历列并检查该值是不是与下一个值匹配然后追加?【英文标题】:How do I loop through a column and check if the value matches the next value then append?如何遍历列并检查该值是否与下一个值匹配然后追加? 【发布时间】:2021-08-27 21:06:51 【问题描述】:

我正在尝试遍历一列。如果列中的项目与列中的下一个项目匹配。如果它们相同,我将获取与第一行项目关联的值并将其附加到下面几行中的内容。

我尝试过使用嵌套的 if 循环来遍历一列。忽略我的代码的一些功能,但我不确定为什么我的比较不起作用。

For bigLoop = 1 To Length + 1
    firstString = Workbooks("VBA_Basics.xlsm").Worksheets("TestSheet").Cells(bigLoop, 24).Value
    Cells(bigLoop, 28).Value = Cells(bigLoop, 26)
    Debug.Print firstString
    
    
    For smallLoop = 1 To Length + 1
        secondString = Workbooks("VBA_Basics.xlsm").Worksheets("TestSheet").Cells(smallLoop + 1, 4).Value
        
        
        Debug.Print secondString

        myComp = StrComp(firstString, secondString, vbBinaryCompare)
        If myComp = 0 Then
            Cells(bigLoop, 28).Value = Cells(bigLoop, 26).Value & " :) " & Cells(smallLoop + 1, 26).Value
        End If
        
        Debug.Print myComp
    Next smallLoop
Next bigLoop

【问题讨论】:

您混合了显式工作表引用和隐式 ActiveSheet 引用。可能是您没有比较您认为的单元格。 【参考方案1】:

请对您的列进行排序!然后试试这个:

Option Explicit
Option Base 1

Private Const NITEMS As Integer = 11
' Column "A"
Private Const COLUMN As Integer = 1
' Column "B"
Private Const TARGET_COLUMN As Integer = 2

' Please sort your column!
Public Sub X()
Dim I As Integer
Dim J As Integer
Dim V1 As Variant
Dim V2 As Variant

   I = 1
   While I <= NITEMS
      V1 = ActiveSheet.Cells(I, COLUMN).Value
      ActiveSheet.Cells(I, TARGET_COLUMN).Value = V1
    
      J = I + 1
      V2 = ActiveSheet.Cells(J, COLUMN).Value
      While V1 = V2 And J <= NITEMS
         ActiveSheet.Cells(I, TARGET_COLUMN).Value = _
                      ActiveSheet.Cells(I, TARGET_COLUMN).Value & " :) " & V2
         J = J + 1
         V2 = ActiveSheet.Cells(J, COLUMN).Value
      Wend
      
      I = J
   Wend
   
End Sub

【讨论】:

以上是关于如何遍历列并检查该值是不是与下一个值匹配然后追加?的主要内容,如果未能解决你的问题,请参考以下文章

检查文件是不是存在然后追加记录

如何遍历数据框的行并检查列行中的值是不是为 NaN

如何检查哈希中是不是存在特定值?

如果所有值都相同,则循环遍历 bash 测试中的列 - AWK

如何检查sql的第一列或第二列中是不是存在一个特定值?

如何在匹配器组而不是整个模式上追加替换?