Пустые ячейки отображаются как непустые при попытке заполнения - PullRequest
1 голос
/ 04 августа 2020

У меня есть файл Excel с 3 столбцами, первые 2 были объединены в 3-й.

Затем я запустил этот VBA, чтобы сделать пустые ячейки равными указанной выше заполненной ячейке.

Sub fillempty()


With Selection.SpecialCells(xlCellTypeBlanks)
.FormulaR1C1 = "=R[-1]C"
.Value = .Value
End With
End Sub

Говорят, что пустых ячеек нет, хотя они кажутся пустыми. Поэтому, если я возьму так называемые непустые ячейки, но видимое пустое и чистое содержимое, и снова запущу VBA, он заполнится.

Проблема возникает из-за того, что у меня сотни тысяч значений.

Если я запускаю VBA независимо для 1-го или 2-го столбца, работает, но не для конкатенированного. Кажется, что некоторые ячейки пусты невооруженным глазом, но если их содержимое не будет очищено, скрипт не будет работать ...

C2 = IF(A2 <> "", CONCATENATE(A2, B2), "") затем перетащил его на сотни тысяч значений

Любая помощь будет более чем оценена. Спасибо

Ответы [ 2 ]

2 голосов
/ 04 августа 2020
Dim c As Range

For Each c in Selection.Cells
    if Len(Trim(c.value))=0 Then c.value=c.offset(-1,0).value
Next c

или быстрее, если вам не нужно сохранять формулы:

Dim r as long, c as long, data, cols as long
data = selection.value
cols = ubound(data, 2)
for r=2 to ubound(data, 1)
    for c = 1 to cols
        if Len(Trim(data(r, c))) = 0 Then data(r, c) = data(r-1, c)
    next c
next r

selection.Value = data
1 голос
/ 04 августа 2020

Функция isEmpty() тоже удобна. Он возвращает FALSE, если в нем есть формула (но ячейка пустая). Выглядит так:

Sub IsA1ReallyEmpty()
    If IsEmpty(Range("A1").Value) = True Then
        MsgBox "Yep, A1 is empty."
    Else
        MsgBox "Nope, it has stuff in it."
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...