Excel VBA如何在一列中拾取整数

时间:2014-06-17 04:39:16

标签: excel vba excel-vba

如何在列中分隔整数和文本?像:

12      44
abc     566
41      vvv
132     788
-12     -45
cbgd    -13
33      sut

有这么多列这样的,如何在列中拾取所有整数并在频率中粘贴其他表格?像:

12      44
41      566
132     788
-12     -45
33      -13

3 个答案:

答案 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 |
+---+------+-----+

之后,你得到了上表:

  1. 打开Excel“转到特殊”对话框(按:F5>特殊)。
  2. 选择“常量”,然后选择“文字”复选框。这有助于你 选择所有非数字单元格。
  3. 打开Execl'删除'对话框(按:CTRL和减号 - )。
  4. 选择'shift cells up'。
  5. 完成!!!

  6. [已编辑/已添加]感谢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")))