2013-07-01 101 views
1

我想我的Excel文件:比较并插入行(VBA)

比较列G和H
- 如果他们有相同的文字 - >转到下一行继续比较
- 如果它们没有相同的文本 - >在G下插入一行,然后继续比较。

其结果将是这样的:

运行宏之前(第一列是G,第二列是H):

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'将其设置为第一行数 尽管Range(“H”&lCounter )“Range”(“I”&lCounter).Value <>“” If Range(“H”&lCounter).Value <> Range(“I”&lCounter)Then Range(“H “&lCounter&”:A&lCounter)。插入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

您的数据是否与样本中显示的一样?我的代码将运行在列G1中的尽可能多的单元格 – 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