Excel: Специальная вставка> Добавление «пустой» ячейки с VBA - PullRequest
1 голос
/ 29 марта 2012

У меня большой набор данных, с которым я работаю в Excel. Около 1000+ столбцов и около 1 миллиона строк.

Моя проблема в том, что многие мои номера отформатированы как текст. Чтобы решить эту проблему, я использую технику копирования, добавления> добавления, добавляя пустую ячейку.

Моя проблема в том, что я пытаюсь макрос этой функции, но я не могу понять, как добавить пустую ячейку.

Я попытался стать хитрым, чтобы макрос создал новую строку, выполните добавление, а затем удалите эту строку. Но я не могу заставить это работать.

У кого-нибудь есть решение?

Ответы [ 3 ]

1 голос
/ 29 марта 2012

Вместо выбора всего диапазона вам нужно выбрать только ячейки со значениями в них. Я бы предложил функцию специальных ячеек:

  1. Выделите ячейку с # 1 в ней и скопируйте эту ячейку
  2. Выделите столбец ячеек для преобразования
  3. Нажмите F5> Перейти> Особые> Константы (возможно, вам придется поиграть с опциями, чтобы получить только нужные ячейки)
  4. ОК (теперь выделены только ячейки со значениями)
  5. Теперь выберите Специальная вставка> Умножить
0 голосов
/ 29 марта 2012

Следующий код делает то, что я искал.

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
0 голосов
/ 29 марта 2012

Используя VBA, вы можете условно преобразовать целевые значения в двойные (или другой тип по вашему выбору). В тестируемом примере ниже предполагается:

  1. вы работаете с Sheet1 в ActiveWorkbook
  2. числа, хранящиеся в виде текста в столбце A (1)
  3. преобразованные значения отображаются в столбце B (2)

В сторону: вероятно, всегда полезно сохранить свою работу перед запуском 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
...