首页 > 解决方案 > 如何避免第一个逗号和框出希望的范围

问题描述

在 VBA 中进行大量尝试后,我可以将正确的数据分配给我想要的范围(D1:E6)。现在,我不知道如何避免第一个逗号(1.问题)以及为什么突然整张纸被框起来而不是标记的范围(2.问题)。我以为我向系统发出命令“将 Range rng2 设置为 E:E,UP 设置为之前过滤数据的范围”-不幸的是,我根本没有这样做,而且对我来说确实很清楚。我只是命令将 rng2 设置为 E:E 直到最后,但我不知道如何在两者之间建立桥梁。

Set rng2 = ActiveSheet.Range("E:E", ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp))

A:B 不是一个固定的数据框,因此它会根据我下载到 Excel 中的数据而改变,因此我不能只命令从 D1:E6 放置一个框,它必须根据 A:B 的输入数据灵活。但这不应该是问题(?),因为 for 循环。

我要做的就是将 rng2 与 Loop 结合起来,对吗?

你有什么方法可以建议我吗?非常感谢。

在此处输入图像描述

我的代码

    Sub Duplicate()

Dim nA As Long, nD As Long, i As Long, rc As Long
Dim s As String, j As Long

Range("A:A").Copy Range("D1")
    Range("B1").Copy Range("E1")
    Range("D:D").RemoveDuplicates Columns:=1, Header:=xlYes
    rc = Rows.Count
    nA = Cells(rc, 2).End(xlUp).Row
    nD = Cells(rc, 4).End(xlUp).Row
    
       For i = 2 To nD
        v = Cells(i, 4)
        v2 = ""
        For j = 2 To nA
            If v = Cells(j, 1) Then
                v2 = v2 & "," & Cells(j, 2)
            End If
        Next j
        Cells(i, 5) = Mid(v2, 1)
    Next i

'neu

Dim rng2 As Range:
Set rng2 = ActiveSheet.Range("E:E", ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp))
    rng2.HorizontalAlignment = xlLeft

With rng2.Borders()
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
        
End With

    
End Sub

标签: excelvbarange

解决方案


为避免第一个逗号,如果您不介意末尾的逗号,您可以将连接更改为:

        If v = Cells(j, 1) Then
            v2 = v2 & Cells(j, 2) & "," 
        End If

或为首次进入添加额外条件

  For i = 2 To nD
    v = Cells(i, 4)
    v2 = ""
    For j = 2 To nA
        If v = Cells(j, 1) Then
        If v2 = "" Then
       v2 = Cells(j, 2)
       Else
           v2 = v2 & "," & Cells(j, 2)
  End If
        End If
    Next j
    With Cells(i, 5)
     .NumberFormat = "@"
    .Value = Mid(v2, 1)
    End With

Next i

推荐阅读