【问题标题】:How can I replace several Data cells with the same cell when they have a equivalent identifying cell?当多个数据单元具有等效的识别单元时,如何用相同的单元替换它们?
【发布时间】:2014-07-27 08:12:54
【问题描述】:

所以我对 VBA 很陌生,所以我为我糟糕的编码表示歉意。我一直在寻找几个小时来找到这个看似简单的问题的答案,我可能已经遇到过它,但只是不明白它是什么。

基本上我想要做的是使用一个识别变量来对一组变量进行分类。我拥有的数据看起来像相册中的顶部图像,而我需要的数据看起来像相册中的第二张图像(除了我有超过 20,000 个点)。如果有人能帮助我,我将不胜感激。

到目前为止我有:

Sub Try_3()
SessionID_Cell = Value.Range("D3:D10047")
SessionID_Change = Value.Range("I2:I5748")
Name_Change = Value.Range("J2:J5748")

For Each SessionID_Cell In Range("D2:D10047")

If SessionID_Cell = SessionID_Change Then
SessionID_Cell.Value = Replace(SessionID_Cell, SessionID_Change, Name_Change)
Else
End If

Next SessionID_Cell


End Sub

【问题讨论】:

    标签: vba excel excel-formula excel-2007


    【解决方案1】:

    试试这个:

    Sub test()
        Dim idcs As Range, idc As Range
        Dim rng As Range, idns As Variant
        Dim i As Long
    
        With Sheet1 '~~> Sheet where your data reside, change to suit
            Set idcs = .Range("C2", .Range("C" & .Rows.Count).End(xlUp))
            Set rng = .Range("B2", .Range("B" & .Rows.Count).End(xlUp))
            '~~> pass name id's to array
            idns = Application.Transpose(rng)
        End With
    
        With CreateObject("Scripting.Dictionary")
            '~~> Dump id's and equivalent city on Dictionary
            For Each idc In idcs
                If Not .Exists(idc.value) Then
                    .Add idc.Value, idc.Offset(0, 1).Value
                End If
            Next
            '~~> replace all name id's with equivalent city
            '~~> using the info dumped in the Dictionary
            For i = LBound(idns) To UBound(idns)
                If .Exists(idns(i)) Then idns(i) = .Item(idns(i))
            Next
            '~~> Change this part if you want to dump new data in another sheet
            rng = Application.Transpose(idns)
        End With
    End Sub
    

    这会将所有名称标识符替换为实际所在的城市。
    这就像在 C 和 D 设置的条件下一次查找和替换。
    如果标识符没有匹配的城市,它将保持原样。
    这是你正在尝试的吗?

    【讨论】:

      【解决方案2】:

      我觉得宏有点矫枉过正......为什么不使用简单的VLOOKUP?

      =VLOOKUP(B2,$C$2:$D$4,2,FALSE)
      

      这是下面的例子,其中参数的含义

      B2 是要搜索的值

      $C$2:$D$4 是要查看的表格范围

      2是上述范围的列索引为返回值

      FALSE - 完全匹配

      【讨论】:

      • 是的,完全矫枉过正。我也是这么想的。碰巧我有一个逻辑相似或非常接近的代码,所以我忍不住发布了。
      • 我看到@L42。不用担心,有问题的替代解决方案是件好事。我知道涉及 VBA,但 OP 可能不知道解决方案是一个简单的 VLOOKUP
      猜你喜欢
      • 2019-06-16
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多