Excel 执行vba代码后出现的垃圾号

Excel 执行vba代码后出现的垃圾号,excel,vba,Excel,Vba,我有下面的代码,它从一个范围(这里是D3到D30)复制数字(没有颜色),然后从第1行开始粘贴到F列中,并进行一些百分位数计算 问题是,我注意到第一行的F列中出现了一个杂散的数字“5”,即使在我的D3-D30范围内没有这样的数字 Sub TPNoRedpass50tablet() Dim cel As Range Dim Rng As Range Dim arr As Variant Dim i As Long Application.Sc

我有下面的代码,它从一个范围(这里是D3到D30)复制数字(没有颜色),然后从第1行开始粘贴到F列中,并进行一些百分位数计算

问题是,我注意到第一行的F列中出现了一个杂散的数字“5”,即使在我的D3-D30范围内没有这样的数字

   Sub TPNoRedpass50tablet()

     Dim cel As Range
     Dim Rng As Range
     Dim arr As Variant
     Dim i As Long
     Application.ScreenUpdating = False
       For Each cel In Sheets("TP").Range("TP!$D$3:$D$30")
         If cel.Font.Color = 0 Then
         If Rng Is Nothing Then
         Set Rng = cel
     Else
         Set Rng = Union(cel, Rng)
         End If
         End If
      Next cel
      ReDim arr(Rng.count - 1)
        If Not Rng Is Nothing Then
            For Each cel In Rng
               arr(i) = cel
               i = i + 1
      Next cel
     Sheets("TP").Range("F1").Resize(UBound(arr) + 1).Value = Application.Transpose(arr)
     Set Rng = Sheets("TP").Range("F1:I" & Sheets("TP").Cells(Rows.count, "F").End(xlUp).Row)
     Sheets("WBR").Range("AH101").Formula = "=PERCENTILE.INC(" & Rng.Address(, , , True) & ",50%)*24"
     Sheets("WBR").Range("AH101").Value = Sheets("WBR").Range("AH101").Value


      End If
      Application.ScreenUpdating = True
 End Sub
试试这个:

   Sub TPNoRedpass50tablet()

     Dim cel As Range
     Dim Rng As Range
     Dim arr As Variant
     Dim i As Long

     Application.ScreenUpdating = False
       For Each cel In Sheets("TP").Range("TP!$D$3:$D$30")
         If Rng Is Nothing Then
         Set Rng = cel       
         If cel.Font.Color = 0 Then
     Else
         Set Rng = Union(cel, Rng)
         End If
         End If
      Next cel
      ReDim arr(Rng.count - 1)
        If Not Rng Is Nothing Then
            For Each cel In Rng
               arr(i) = cel
               i = i + 1
      Next cel
     Sheets("TP").Range("F1").Resize(UBound(arr) + 1).Value = Application.Transpose(arr)
     Set Rng = Sheets("TP").Range("F1:I" & Sheets("TP").Cells(Rows.count, "F").End(xlUp).Row)
     Sheets("WBR").Range("AH101").Formula = "=PERCENTILE.INC(" & Rng.Address(, , , True) & ",50%)*24"
     Sheets("WBR").Range("AH101").Value = Sheets("WBR").Range("AH101").Value


      End If
      Application.ScreenUpdating = True
 End Sub

问题似乎出现在每个循环的第一个循环中。您有一个并集,它仅在未设置Rng时第一次执行。

您将乘以24作为百分位数。因此,你的范围内有0.21吗?没有。不管范围是什么,我得到了“F”中第一行的数字“5”。我不确定这是一个结转还是我代码中的一个错误范围内的值是多少(“TP!$D$3)?F中的第一行从那里转置。它是6 2 3 4 5 6 8 9(6,2,3,4是彩色数字)…所以在F中,我得到5(垃圾),然后是5 6 8 9