Замена ячеек только пробелом с VBA - PullRequest
0 голосов
/ 04 февраля 2019

Исходный набор данных заполняется вручную.В результате пользователи добавляют пробел в пустую ячейку.Ищите способ заменить эту ячейку пустой ячейкой.

Пробовал TRIM в формульной форме, а также VBA, и, похоже, они не достигли цели.Также пытались заменить пробелы ничем, но это также удаляет пробелы, которые находятся в текстовых значениях.

Sub CleanKlussen()
    Worksheets("WorkSheetX").Select
    Range("AC2").Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, Selection.End(xlDown)).Select
        For Each cell In ActiveSheet.UsedRange
            cell.Value = Trim(cell)
        Next cell
End Sub

Для выбранного диапазона на выбранном листе я хотел бы иметь все ячейки, которые содержат только 1 или 2пробелы (никаких других значений), заменяемые ничем (создание пустой ячейки).

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

или другой подход, зациклите следующее, пока ничего не найдено

    dim r as excel.range

    set r = Range("A1:C3").Find(What:=" ", After:=Range("a1"), LookIn:=xlFormulas, LookAt _
            :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False)
   r.clearcontents
0 голосов
/ 04 февраля 2019

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

For Each cell In ActiveSheet.UsedRange
    Dim v As Variant
    v = cell.Value2
    If Not IsNumeric(v) Then
        v = Trim(v)
        If v = "" Then
            cell.ClearContents
        Else
            cell.Value2 = v
        End If
    End If
Next cell

NB. Избавьтесь от всех этих бесполезных Select утверждений в вашем коде.

0 голосов
/ 04 февраля 2019
Dim c As Range
For Each c In Selection
    If Len(WorksheetFunction.Trim(c.Value2)) = 0 Then c.ClearContents
Next c
...