2016-11-21 3 views
1

У меня возникли проблемы с этим, и я думаю, что это комбинация незнания тонны VBA и, возможно, не просить Google правильные ключевые слова. У меня есть некоторые данные, которые разбиваются на разделы с заголовками, дублируемыми для каждого раздела. То, что я хочу сделать, это создать еще один прослушиватель над дублированным, который представляет собой комбинацию текста и различных ячеек из новых разделов. Каждый новый заголовок будет зависеть от данных в его собственном разделе. Если бы я собирался использовать формулу Concatenate для 1-го вновь созданного раздела, было бы:VBA Создавайте заголовки с каждым новым разделом

=CONCATENATE("Contract# ",J3," -- SiteID# ",L3) 

код у меня есть для вставки пустых строк после каждого изменения в определенном столбце ниже. Он также дублирует исходный заголовок для каждого нового раздела. Я думаю, что могу комбинировать код, который я ищу, с тем, что у меня есть. Если только проще будет прорезать каждый раздел и вставить новую строку над каждой из них?

lr = Range("A" & Rows.Count).End(xlUp).Row 
For i = lr To 3 Step -1 
    If Cells(i - 1, "J").Value <> Cells(i, "J").Value Then 
     Cells(i, "J").Resize(2).EntireRow.Insert 
     Rows(1).Copy Destination:=Rows(i + 2) 
    End If 
Next i 

Извините. Я знал, что что-то забыл. Ниже приведен снимок экрана. Имейте в виду, что единственной константой является то, сколько столбцов будет содержать данные. Сколько секций есть и сколько строк в каждом разделе будет меняться изо дня в день.

enter image description here

В соответствии с просьбой, вот небольшой пример того, что я хотел бы, чтобы она выглядела как.

enter image description here

+0

Можете ли вы предоставить скриншот данных? –

+0

только что добавил скриншот. Извини за это! –

ответ

2

Я не думаю, что было бы легче перебрать каждую секцию - Я думаю, что вы на правильном пути.

Это может быть не совсем то, что вы хотите, но, надеюсь, это даст вам идею:

For i = lr To 3 Step -1 
    If Cells(i - 1, "J").Value <> Cells(i, "J").Value And Cells(i, "J").Value <> "" Then 
    Cells(i, "J").Resize(2).EntireRow.Insert 
    Rows(1).Copy Destination:=Rows(i + 1) 
    Range("A" & i).Value2 = "Contract# " & Range("J" & i + 2).Value2 & _ 
     " -- SiteID# " & Range("L" & i + 2).Value2 
    End If 
Next i 

Это предполагает поле вы хотите в строке заголовка в колонке А, выше скопированной строки заголовка.

- EDIT 11/22/2016 -

обратная связь Per OP о желании сохранить две пустые строки, то это должно достигнуть этого.

For i = lr To 3 Step -1 
    If Cells(i - 1, "J").Value <> Cells(i, "J").Value And Cells(i, "J").Value <> "" Then 
    Cells(i, "J").Resize(4).EntireRow.Insert 
    Rows(1).Copy Destination:=Rows(i + 3) 
    Range("A" & i + 2).Value2 = "Contract# " & Range("J" & i + 4).Value2 & _ 
     " -- SiteID# " & Range("L" & i + 4).Value2 
    End If 
Next i 

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

+0

Удивительный! Я подумал, что могу добавить еще одну строку к тому, что у меня было. Единственное, чего это не делает, это сохранить 2 пустых строки между разделами. Мне также понадобится это, чтобы добавить информацию о Контракте и SiteID выше 1-го раздела. Я мог бы немного поиграть с ним, чтобы это было только одно наблюдение. Код, который я изначально написал, ищет разностный текст в столбце J, затем вставляет 2 пустые строки, скопируйте строку заголовка из строки А над каждым разделом. На всякий случай я этого не сделал! :) –

+0

Я думаю, что понимаю - просто чтобы быть ясным, можете ли вы отправить четыре строки в качестве образца вывода - одну строку данных и то, что вы хотите, чтобы три строки над ней выглядели (даже если один из них следующий ряд данных, который я не ** думаю **, но хочу быть уверенным). – Hambone

+0

. Спасибо!!! –

Смежные вопросы