2017-08-07 87 views
0

我有一个Excel文档,我想写一个宏来完成与单元格的值列。例如:Excel VBA宏到自动完成列复制上面的值

figure 1

在图1中,我有A列中值1我想有一个Visual Basic按钮,当我点击它,它会自动完成该列的剩余细胞值1,直到找到一个非空的单元格。在列b中我有value3 value4和value5粗体黑色。当我点击按钮时,vb代码会自动完成具有te红色值的单元格。对不起,我的英语,它不是我的母语。总而言之,在开始时我只有黑色值,当我点击按钮时,它应该自动添加红色值。你能帮我吗?我有这样的代码:

Sub split() 
Dim columns As Range, i As Long 

Set columns = Selection 

i = 1 

For i = 1 To columns.Rows.Count 
    If columns.Cells(i, 1).Value = "" Then 
     columns.Cells(i, 1).Value = columns.Cells(i - 1, 1).Value 
    End If 
Next 

末次

它的工作只选定列,我希望它适用于整个工作簿。我怎样才能改变这一点?

+0

你有你已经尝试过的代码?如果你这样做,请包括在你的问题,所以我们可以看到需要做出什么样的变化:) – seadoggie01

+0

如果你想有人为你写代码,那么我建议你聘请一个开发人员。 –

+0

谢谢大家,我真的很感谢你的帮助:) – user2357735

回答

0

这是如何工作的?它应该比通过细胞循环更快一点,因为我们可以在一个随时随地使用SpecialCells()选择空白单元格:

Sub copyDown() 
Dim lastRow As Long, firstRow As Long, lastCol As Long, i As Long 
Dim rng As Range, totalCell As Range 
Dim cols As Variant 

cols = Split(InputBox("What columns do you want? Use space to separate." & vbCrLf & vbCrLf & "I.e. 'A C D F'"), " ") 

'Set totalCell = Range("A:A").Find(what:="SubTotal :", LookIn:=xlPart) 

If Not Application.IsNA(Application.Match("SubTotal *", Range("A:A"), 0)) Then 
    Set totalCell = Cells(Application.Match("SubTotal :", Range("A:A"), 0), 1) 
End If 

For i = LBound(cols) To UBound(cols) 
    firstRow = Cells(1, cols(i)).End(xlDown).Row 

    Set rng = Range(Cells(firstRow, cols(i)), Cells(totalCell.Row - 1, cols(i))) 
    rng.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=r[-1]C" 
    rng.Value = rng.Value 
Next i 

End Sub 
+0

非常感谢你的先生。我现在处于移动状态,无法尝试您的代码。明天我会试一试,希望你的代码能够完成这项工作,我也会将你的答案标记为解决方案。你对最后一行是对的,我也会澄清它。谢谢再次先生,我真的很感谢你的帮助。 – user2357735

+0

先生让我说我需要使用前5列(这将是伟大的,如果我可以编写代码来选择columnd A和C和D例如),我需要填充表单,直到包含单词'total' 。欲了解更多信息,请参阅此链接附带的图片:[插图画面](http://imgur.com/a/1PGs6)。先谢谢先生! – user2357735

+0

@ user2357735 - 请参阅编辑。 – BruceWayne