Arrays 排序、删除重复项和空格,仅在excel vba数组中返回数字
在userform中,我有一个启用了多行的文本框。我希望用户在文本框中输入数字,每个数字都在新行中,然后单击命令按钮。commandbutton应将文本存储到数组中,按升序排序,删除重复项、空格和非数字,然后从范围I3开始将数据返回excel工作表 我试着对它进行编码,但未能排序、删除空格和非数字。此外,excel工作表中的输出不被识别为数字:( 在我的简单代码中,当在文本框中输入以下文本时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 这是对我的审判……任
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
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,我也注意到了这一点,并且已经更新了我的答案:)