Страницы: 1
RSS
VBA удаление пустых строк после объединения ячеек
 
Здравствуйте Скажите пожалуйста что не так в макросе .
Выделяю диапазон, объединяю ячейки,  удаляю пустые ячейки со сдвигом вверх по столбику , хотя, как я понимаю, должна удаляться вся строчка . Почему удаляется не строчка, а только ячейки? Мне нужно удалить именно строку, пустую строку , в которой ранее было значение
Код
Sub MergeToOneCelldell()
   Const sDELIM As String = " " 
   Dim rCell As Range
   Dim sMergeStr As String
   Dim n As Long, i As Long
   If TypeName(Selection) <> "Range" Then Exit Sub   'если выделены не ячейки - выходим
   With Selection
 For Each rCell In .Cells
sMergeStr = sMergeStr & sDELIM & rCell.Text  'собираем текст из ячеек
           rCell = "" '(добавляем строку)
 Next rCell
 Application.DisplayAlerts = False   'отключаем стандартное предупреждение о потере текста
       '.Merge Across:=False       'объединяем ячейки (комментим эту строку)
 Application.DisplayAlerts = True
 .Item(1).Value = Mid(sMergeStr, 1 + Len(sDELIM))    'добавляем к объед.ячейке суммарный текст
   n = .Rows.Count
    For i = n To 1 Step -1
        If .Rows(i).Text = "" Then .Rows(i).Delete
    Next
   
   End With

End Sub
Изменено: vikttur - 27.08.2021 21:50:11
 
SSL, посмотрите приложенный рисунок
 
Посмотрите:
https://docs.microsoft.com/ru-ru/office/vba/api/excel.range.entirerow
https://docs.microsoft.com/ru-ru/office/vba/api/excel.worksheetfunction.counta
 
New, спасибо

artemkau88, а эти статьи точно должны помочь в решении? Потому как информация знакома эта, нотне улавливаю что я не так сделал пропустил
 
SSL, вам намекают, что есть свойство EntireRow (в переводе СТРОКА_ЦЕЛИКОМ), которое говорит Excel, что нужно использовать всю строку целиком, возможно вам  надо использовать это свойство у свойства Row в вашем коде, приблизительно вот так

Код
    For i = n To 1 Step -1
        If .Rows(i).Text = "" Then .Rows(i).EntireRow.Delete 'удалить строку целиком, а не только в Selection
    Next

так же вам намекают, что есть функция листа СЧЁТЗ(), она же на английском COUNTA(), она подсчитывает кол-во непустых ячеек в указанном в скобках диапазоне.
То есть, если надо узнать сколько во второй строке непустых ячеек, то можно ввести в ячейку формулу (желательно вводить эту формулы не на второй строке) =СЧЁТЗ(2:2), если эта функция возвращает число 0, то вообще вся указанная строка пустая - нет ни одной заполненной ячейки в этой строке, а в макросе это будет так

Код
    For i = n To 1 Step -1
        If WorksheetFunction.CountA(.Rows(i)) = 0 Then 'вот тут мы использует СЧЁТЗ (COUNTA), чтобы проверить всю строку на пустоту
            .Rows(i).EntireRow.Delete 'а вот тут мы используем свойство EntireRow, которую можно перевести СТРОКА_ЦЕЛИКОМ
        End If
    Next
Изменено: New - 28.08.2021 02:28:01
 
New, спасибо. Не доголался к чему жто
Попробую. Хотя тогда не понимаю если не использовать обьеденение строк, строка целиком удаляется при таком написании как сейчас.
     If .Rows(i).Text = "" Then .Rows(i).Delete

Я пологаю значит что то не так пишу в строках
With selection
Тут где то ошибка.
Согласны?

Ps пишу с телефона, в формат кода не получается перевести. Извините
Изменено: SSL - 29.08.2021 00:15:24
 
Если честно, то мы с вами можем тут переписываться ещё пару месяцев, пока вы не приложите файл-пример и не скажите нам какую задачу вы решаете (что хотите сделать).
Грубо говоря, вы написали кривой код и хотите, чтобы мы его исправили, но мы пока не поняли, что вы решаете и что находится на листе.
Мне вот не понятны вот эти вещи: зачем вы объединяете ячейки, зачем вы используете Selection, что такое в вашем коде rows(i).Text = ""
Если наши советы выше не помогут вам, то прикладывайте файл и опишите вашу задачу, а мы уже напишем свой код или поправим ваш код.
Изменено: New - 29.08.2021 22:52:33
 
SSL, посмотрите файл пример. В модуле этого фала 2 макроса: Ваш и исправленный. Протестируйте, посмотрите на результат. В файле на 1 листе, кроме диапазона для объединения есть еще непустые ячейки.

Если использовать Ваш вариант, то удаляется не вся строка целиком ( можно убедиться, посмотрев на изменение ячеек столбцов К, М и R).
Изменено: artemkau88 - 29.08.2021 10:03:05
 
artemkau88, Да верно то что нужно , спасибо
Страницы: 1
Наверх