Страницы: 1
RSS
Нумерация объединенных ячеек, вставка строк после объединенных ячеек
 
Помогите, пожалуйста.  
 
Необходимо выполнить следующие действия: Ячейки столбцов А и В были объединены по значению. Необходимо вставить порядковый номер в столбец А (получается - пронумеровать диапазоны), а после этого под каждой такой слитой ячекой вставить 4 пустых строки.  
 
Нумеровать строки , когда они не объединены - получается, а с диапазонами нет. И со вставкой аналогично.. может я простоне пойму как правильно обращаться к диапазонам? :(  
 
В  файле уже есть некоторые кнопки, они мне были нужны для понимания того, что делаю )) не обращайте на них особого внимания :)
 
В том варианте что Вы написали совершенно не понятно что Вам надо...  
У нас несколько разный понятийный аппарат - Ячейки столбцов А и В были объединены по значению-? что это... Вних одинаковые значения и они действительно объеденены. Как их необходимо нумеровать и тд и тп....  
 
Тем более для обработки Ехс не очень любит объединенные ячейки, а ВБА - еще больше...(не любит)  
Может мы попробуем сформулировать задачу что Вам надо по описанию проблемы с приложением исходного варианта данных, процесс ввода и итогового...  
А форумчане попробуют предложить решение....
 
Приложила файл со страницами "как есть" и "как нужно чтобы стало"  
 
Проблема в том, что сам шаблон выгружается из другой программы и выгрузка очень слабо настраивается. На листе "как есть" повторяются значения столбцов А и В только потому что мне проще по значению объединить ячейки. Может конечно стоит заменить их на порядковый номер сразу, например, на k, где k=1- порядковый номер. Далее так же как при объединении - сравнивать значения ячеек B(n) с В(n+1), где n - номер строки. Если значения B(n)=В(n+1), то А(n)=k, иначе наращиваем k на единицу, а потом по тому же принципу провести объединение в столбцах? ..сейчас попробую. Только вот по 4 пустые строки надо обязательно сделать потом (хотя если найдется метод по которому можно их заранее всатвить - до объединения, а потом корректно обединить ячейки и пронумеровать их, то было бы здорово)
 
Вопрос с нумерацией решила, то что я написала выше - помогло :)  
 
вот что значит - утро вечера мудренее )  
 
 
вот как я с этим справилась:  
 
 
Dim n As Long, k As Long  
 
n = 7  
k = 1  
 
 
Do While Columns("B").Cells(n).Value <> vbNullString  
If Columns("B").Cells(n).Value = Columns("B").Cells(n + 1).Value Then  
Columns("A").Cells(n).Value = k  
n = n + 1  
Else  
Columns("A").Cells(n).Value = k  
n = n + 1  
k = k + 1  
End If  
 
Loop  
 
и дальше просто объединяем:  
 
 
'находим адрес последней непустой строки (ячейки)  
 
With ActiveSheet.UsedRange  
    iRow = .Row + .Rows.Count - 1  
    End With  
 
Application.DisplayAlerts = False 'чтобы не вылазило предупреждение  
'Объединяем  
Do While iRow > 6 'выполняем, начиная снизу и до 6 строки  
       iRow = iRow - 1  
       If Columns("A").Cells(iRow).Value = Columns("A").Cells(iRow - 1).Value Then Range((Columns("A").Cells(iRow)), (Columns("A").Cells(iRow - 1))).Merge  
       If Columns("B").Cells(iRow).Value = Columns("B").Cells(iRow - 1).Value Then Range((Columns("B").Cells(iRow)), (Columns("B").Cells(iRow - 1))).Merge  
         
       
  Loop  
     
  Application.DisplayAlerts = True  
 
 
 
 
Осталось справиться со вставкой... может ее тоже сделать до того как объединять ячейки...
 
Sub fourlines()  
Dim rng As Range, b As Boolean, nrow&, n&, rng_r As Range  
nrow = 7  
For Each rng In Intersect(ActiveSheet.UsedRange.Columns(1).Cells, Range(Cells(nrow, 1), Cells(Rows.Count, 1)))  
   If Not rng.Text = "" Then  
       If rng.MergeCells Then  
           If Not b Then b = True  
       Else  
           If b Then b = False  
       End If  
       rng.Offset(1).Resize(4).EntireRow.Insert  
       n = n + 1  
       rng.Value = n  
       Set rng_r = rng  
   End If  
Next  
rng_r.Offset(-1).EntireRow.Copy  
rng_r.Offset(1).Resize(4).EntireRow.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _  
       SkipBlanks:=False, Transpose:=False  
   Range("C80").Select  
Application.CutCopyMode = False  
End Sub
Живи и дай жить..
 
Слэн, спасибо тебе огромное!!! Все получилось. Рада несказанно - это то что нужно.  
 
МММУАА!!! :)
 
там строчку    
Range("C80").Select  
 
нужно удалить, а переменную nrow может быть передавать параметром
 
вся щека в помаде - жена убьет..   :)
Живи и дай жить..
 
nrow тут можно и строго задать. Она изначально известна и не измениться. А вот конечная строка не известна заранее, но не думаю что больше 100. В итоге это будет шаблон, в который выгрузятся из базы данные и по нажатию кнопки отформатируется все как надо - останется только на печать вывести :) Пользователи будут в восторге :)  
 
Спасибо еще раз!
 
Хотелось бы на этот сайт для коллекции написать ещё одно красивое решение, которое нашел в интернете:  
 
Можно так:    
В А1 ставим 1    
Выделяем A3:A30    
В строке формул пишем:    
Code  
=МАКС(A$1:A2)+1  
 
и жмем Ctrl+Enter
Страницы: 1
Читают тему
Наверх