Excel:选择性粘贴>使用VBA添加“空白”单元格

时间:2012-03-28 21:05:17

标签: excel text numbers format zero

我有一个大型数据集,我正在使用excel。大约1000多列,接近100万行。

我的问题是我的许多号码都被格式化为文字。要解决此问题,我一直在使用复制粘贴>添加技术,添加一个空白单元格。

我的问题是我正在尝试宏此功能,但我无法弄清楚如何添加空白单元格。

我试图变得狡猾并让宏创建一个新行,执行添加,然后删除该行。但是,我似乎无法让它工作。

任何人都有解决方案吗?

3 个答案:

答案 0 :(得分:1)

您需要仅选择包含值的单元格,而不是选择整个范围。我建议特殊细胞功能:

  1. 突出显示包含#1的单元格并复制该单元格
  2. 突出显示要转换的单元格列
  3. F5>转到>特别>常量 (您可能必须在此处使用选项才能获得所需的单元格)
  4. 确定(现在只选择具有值的单元格)
  5. 现在选择选择性粘贴>乘法

答案 1 :(得分:0)

使用VBA,您可以有条件地将目标值转换为双倍(或您选择的其他类型) 下面测试的例子假设:

  1. 您正在使用Sheet1
  2. 中的ActiveWorkbook
  3. 在A(1)列中以文本形式存储的数字
  4. 转换后的值显示在B(2)列
  5. 抛开:在运行VBA之前保存你的工作可能总是一个好主意。干杯,快乐的编码。

    Option Explicit
    
    Sub convert_to_dbl()
        Dim r As Long
        Dim ws As Worksheet
        Set ws = ActiveWorkbook.Sheets(1)
    
        For r = 1 To FindLastRow(ws)
            With ws
                If .Cells(r, 1).Value <> "" Then
                    .Cells(r, 2).Value = CDbl(.Cells(r, 1).Value)
                End If
            End With
        Next r
    End Sub
    
    Function FindLastRow(ws As Worksheet)
        Dim LastRow As Long
        If WorksheetFunction.CountA(Cells) > 0 Then
            LastRow = Cells.Find(What:="*", After:=[A1], _
                  SearchOrder:=xlByRows, _
                  SearchDirection:=xlPrevious).Row
        End If
        FindLastRow = LastRow
    End Function
    

答案 2 :(得分:0)

以下代码可以满足我的需求。

Sub psAdd()

    Dim x As Range 'Just a blank cell for variable
    Dim z As Range 'Selection to work with

    Set z = Cells
    Set x = Range("A65536").End(xlUp).Offset(1)
    If x <> "" Then
        Exit Sub
    Else
        x.Copy
        z.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd
        Application.CutCopyMode = False 'Kill copy mode
    End If
    x.ClearContents 'Back to normal

End Sub