2013-07-01 3 views
1

Я стараюсь Ехчел к:Сравнить и вставить строку (VBA)

Сравнить столбцы G и H
- Если они имеют один и тот же текст -> перейти на следующую строку, чтобы продолжить сравнение
- Если у них нет одинакового текста -> Вставьте строку ниже G, а затем продолжите сравнение.

Результат будет следующим образом:

Перед запуском макро (первый столбец G, вторая колонка представляет собой Н):

http://img541.imageshack.us/img541/5196/c49u.jpg

После запуска макроса:

http://img153.imageshack.us/img153/9527/dwkj.jpg

Можете ли вы мне помочь, пожалуйста?

Большое спасибо.

+3

Опубликуйте свой код, чтобы показать нам, что у вас есть. –

+0

Я даже не знаю, нахожусь ли я на хорошей дорожке: Dim lCounter As Long '<-' ALIGN COLUMNS lCounter = 11 'установить это на номер первой строки Do While Range ("H" & lCounter) .Value <> "и Range (" I "& lCounter) .Value <>" " Если диапазон (« H »и lCounter). Значение <> Диапазон (« I »& lCounter) Затем Диапазон (« H "& lCounter &": A "& lCounter) .Insert Shift: = xlDown End If lCounter = lCounter + 1 Loop – Ric

+0

Кстати, у colums есть разные, сейчас я работаю с другим документом. – Ric

ответ

0

Что-то вроде этого

Sub CompArray() 
Dim G 
Dim H 
Dim X 
Dim lngCnt As Long 
Dim lngMark As Long 

G = Range([g1], Cells(Rows.Count, "G").End(xlUp)) 
H = Range([H1], Cells(Rows.Count, "H").End(xlUp)) 
X = H 

For lngCnt = 1 To UBound(X, 1) 
If G(lngCnt - lngMark, 1) = H(lngCnt, 1) Then 
X(lngCnt, 1) = G(lngCnt - lngMark, 1) 
Else 
lngMark = lngMark + 1 
X(lngCnt, 1) = vbNullString 
End If 
Next 

[g1].Resize(UBound(X), 1) = X 

End Sub 
+0

Я не могу заставить его работать до сих пор, он входит в бесконечный цикл, но я могу начать работать с этим. Большое спасибо! :) – Ric

+0

Ваши данные, как вы показали в своем примере? Мой код будет работать так же, как и многие ячейки в столбце G – brettdj

+0

Да, это то же самое. На самом деле это был не бесконечный цикл, который произошел с другим кодом, извините. Копирование/вставка кода и его запуск удаляют все в столбце G. – Ric

0

Вы можете выбрать диапазон, который вы хотите посмотреть и затем цикл по строкам. Сравните ячейки, если они не совпадают, выберите правую ячейку. Затем вставьте новую ячейку и переместите все в 1 ячейку вниз Этот код немного медленный, потому что он выбирает весь столбец. Вы можете изменить операционную смету, чтобы сделать другой сравнения.

Dim rngCompare As Range 
Dim rowCount As Long 
Dim iCount As Long 

Set rngCompare = ActiveSheet.Columns("D:E") 
rowCount = rngCompare.Rows.Count 
For iCount = 1 To rowCount 
If StrComp(rngCompare.Cells(iCount, 1), rngCompare.Cells(iCount, 2), vbTextCompare) <> 0 Then 
    rngCompare.Cells(iCount, 1).Select 
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 

End If 
Next iCount 
+0

Эй, неважно, если это займет некоторое время. :) Но то, что он делает, спрашивает меня, хочу ли я продолжать, потому что операция заставит некоторые объединенные ячейки разомкнуться, а затем переместит четвертый столбец вниз в бесконечный цикл. – Ric

+0

Кажется, что это работает, если все значения из G присутствуют в H. Но когда значения в G нет, он начинает вставлять белые строки в бесконечный цикл. – Ric

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