如何在列中分隔整数和文本?像:
12 44
abc 566
41 vvv
132 788
-12 -45
cbgd -13
33 sut
有这么多列这样的,如何在列中拾取所有整数并在频率中粘贴其他表格?像:
12 44
41 566
132 788
-12 -45
33 -13
答案 0 :(得分:2)
实际上,您的任务可以在没有VBA编程的情况下完成。
这里假设您的数据存储在2列中, (如果没有,请将其转换如下:您可以使用Excel“文本导入向导”拆分1列数据,并选择“空格”作为分隔符。)
+---+------+-----+
| | A | B |
+---+------+-----+
| 1 | 12 | 44 |
+---+------+-----+
| 2 | abc | 566 |
+---+------+-----+
| 3 | 41 | vvv |
+---+------+-----+
| 4 | 132 | 788 |
+---+------+-----+
| 5 | -12 | -45 |
+---+------+-----+
| 6 | cbgd | -13 |
+---+------+-----+
| 7 | 33 | sut |
+---+------+-----+
之后,你得到了上表:
[已编辑/已添加]感谢L42 +1并提醒我应提供VBA解决方案。
这是用于删除非数字单元格和Shift-up的非常简化的VBA代码。 逻辑类似于上面的手动方法,您也可以通过Excel宏录制器获得类似的代码。
假设您在Excel中有一个类似于上面的表,那么您可以运行它。记住在运行代码之前选择单元格区域。
Sub DeleteNonNumericCellShiftup()
Dim rCell As Range
Dim rRng As Range
Set rRng = Selection
For Each rCell In rRng.Cells
If Not (IsNumeric(rCell)) Then rCell.Delete (xlShiftUp)
Next rCell
End Sub
答案 1 :(得分:1)
试试这个:
Sub test()
Dim rng As Range, rng2 As Range, cel As Range
Dim intOnly, i As Long
If TypeName(Selection) = "Range" Then
Set rng = Selection
For i = 0 To rng.Columns.Count - 1 '~~> to handle multiple columns
Set rng2 = rng.Offset(0, i).Resize(, 1)
For Each cel In rng2 '~~> generate an array of integers
If IsNumeric(cel.Value) Then
If Not IsArray(intOnly) Then
intOnly = Array(cel.Value)
Else
ReDim Preserve intOnly(UBound(intOnly) + 1)
intOnly(UBound(intOnly)) = cel.Value
End If
End If
Next
'~~> pass the array to Range, change the sheet name to suit
Sheet3.Range("A1:A" & UBound(intOnly) + 1) _
.Offset(0, i) = Application.Transpose(intOnly)
intOnly = "" '~~> re-initialize variable
Next
End If
End Sub
上面的代码复制Sheet3中当前选择的所有整数 这是你在尝试的吗? HTH
答案 2 :(得分:0)
IsNumeric功能是一个很好的起点。对于已格式化为文本的数字(例如,使用单引号'在它们之前),尝试测试是否可以将它们格式化为数字,例如
IsError(Trim(Format(The_Value, Format:="0.0")))