2012-02-21 124 views
1

我有一个棘手的情况。我有只有标题的列A和列B包含文本。现在我想让列B中的文本从列A开始。如果列A中有文本,则B将始终为空。Excel VBA - 合并

A   B 
Title 1 
      Text 1 
      Text 2 
Title 2 
      Text 1 
      Text 2 

我怎么能得到它,所以列B中的文本放在列A.范围设置,直到找到一个完整的空行。 (A1到S1在单元格中没有值=空行) 我在考虑合并单元格,但这可能并不整齐。

+0

[你尝试过什么?(http://mattgemmell.com/2008/12/08/what-have-you-tried/) – 2012-02-21 16:45:00

回答

1

是否这样?这使用合并,并考虑到A和B都填满了。

Sub Sample() 
    Dim ws As Worksheet 
    Dim LastRow As Long 

    Set ws = Sheets("Sheet5") 

    With ws 
     LastRow = .Range("B" & .Rows.Count).End(xlUp).Row 

     For i = 1 To LastRow 
      If Application.WorksheetFunction.CountA(.Range("A" & i & ":" & "B" & i)) = 1 And _ 
      Len(Trim(.Range("A" & i).Value)) = 0 Then 
       With .Range("A" & i & ":" & "B" & i) 
        .Merge 
       End With 
      End If 
     Next i 
    End With 
End Sub 

跟进

如果你不想合并和A将一直保持为空时,有在B的值那么我们可以从色柱B值移入柱A这样

Sub Sample() 
    Dim ws As Worksheet 
    Dim LastRow As Long 

    Set ws = Sheets("Sheet5") 

    With ws 
     LastRow = .Range("B" & .Rows.Count).End(xlUp).Row 

     For i = 1 To LastRow 
      If Len(Trim(.Range("A" & i).Value)) = 0 Then 
       .Range("A" & i).Value = .Range("B" & i).Value 
       .Range("B" & i).ClearContents 
      End If 
     Next i 
    End With 
End Sub 
+0

所以LASTROW在B的第一行是完全空的? (A到S)你似乎合并了A和B,但是如果我想将值剪切/粘贴到A中,那会是怎样呢? – CustomX 2012-02-21 16:25:51

+0

没有lastrow是列B中非空的最后一行,用您最近的请求更新代码。 – 2012-02-21 16:26:56

+0

你不想要“S”,因为你打算从“B”而不是“S”移动价值。假设“S”直到第100行,“B”直到第15行,然后没有点循环到100,因为从B16到B100的单元将为空。 – 2012-02-21 16:38:05