Arrays 排序、删除重复项和空格,仅在excel vba数组中返回数字

Arrays 排序、删除重复项和空格,仅在excel vba数组中返回数字,arrays,sorting,excel,vba,Arrays,Sorting,Excel,Vba,在userform中,我有一个启用了多行的文本框。我希望用户在文本框中输入数字,每个数字都在新行中,然后单击命令按钮。commandbutton应将文本存储到数组中,按升序排序,删除重复项、空格和非数字,然后从范围I3开始将数据返回excel工作表 我试着对它进行编码,但未能排序、删除空格和非数字。此外,excel工作表中的输出不被识别为数字:( 在我的简单代码中,当在文本框中输入以下文本时 1 2 3 4 6 5 excel工作表上的输出为 5 1 2 3 4 6 这是对我的审判……任

在userform中,我有一个启用了多行的文本框。我希望用户在文本框中输入数字,每个数字都在新行中,然后单击命令按钮。commandbutton应将文本存储到数组中,按升序排序,删除重复项、空格和非数字,然后从范围I3开始将数据返回excel工作表

我试着对它进行编码,但未能排序、删除空格和非数字。此外,excel工作表中的输出不被识别为数字:(

在我的简单代码中,当在文本框中输入以下文本时

1
2
3
4

6
5
excel工作表上的输出为

5

1
2
3
4
6
这是对我的审判……任何帮助都将不胜感激

Private Sub CommandButton1_Click()
Dim strText() As String

Dim i As Long, k As Long

k = 3
    strText = Split(TextBox3.Text, Chr(10))


    For i = 0 To UBound(strText)
        Sheet3.Cells(k, 9).Value = strText(i)
        k = k + 1
    Next i

With Sheet3
.Range("I3:I" & k).RemoveDuplicates Columns:=1, Header:=xlNo
.Range("I3:I" & k).Sort Key1:=.Range("I3"), Order1:=xlAscending
End With
End Sub
请尝试以下代码:

Private Sub CommandButton1_Click()
    Dim strText() As String
    Dim rng As Range
    Dim c As Range


    strText = Split(TextBox3.Text, Chr(10))
    With Sheet1
        'clear previous content
        .Range(.Cells(3, 9), .Cells(.Rows.Count, 9).End(xlUp)).ClearContents
        Set rng = .Cells(3, 9).Resize(UBound(strText)+1)
    End With

    rng = Application.Transpose(strText)
    rng.Replace Chr(13), ""
    For Each c In rng
        If Not IsNumeric(c) Then c = ""
    Next

    With rng
        .NumberFormat = "0"
        .Value = .Value
        .RemoveDuplicates Columns:=1, Header:=xlNo
        .Sort Key1:=.Cells(1, 1), Order1:=xlAscending
    End With

End Sub
注:

  • .Range(.Cells(3,9),.Cells(.Rows.Count,9).End(xlUp)).ClearContents
    从列
    I
  • Line
    rng=Application.Transpose(strText)
    不带循环地将所有数据写入列
    I
  • 如果值不是数字,我们将其替换为空字符串:
    如果不是数字(c),则c=“
    ,然后使用
    RemoveDuplicates
  • .NumberFormat=“0”
    设置范围内的数字格式。行
    .Value=.Value
    将所有“存储为文本的数字”转换为“存储为数字的数字”

  • 非常感谢!!效果非常好。我刚刚编辑了行Set rng=.Cells(3,9)。Resize(UBound(strText))以设置rng=.Cells(3,9)。Resize(UBound(strText)+1),因为它不会接受文本框中的最后一个条目,除非后面有一个新的空行。谢谢again@user3127527,我也注意到了这一点,并且已经更新了我的答案:)