使用左功能[VBA]

时间:2011-12-01 11:21:02

标签: excel vba

我正在尝试创建一个简单的宏,它会复制列中每个单元格中的两个第一个数字,并将它们打印在不同的列中。这是一个包含多个工作表的excel文档。我已经尝试了一段时间来编写代码,但由于没有任何经验,我很难搞清楚要做什么。我知道“left()” - 函数能够做到这一点,但我不知道如何定义从哪个列中绘制数据以及将要打印哪个列。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:10)

由于没有编写VBA代码的经验,我建议你坚持使用公式方法。老实说,即使你熟悉VBA,你仍然可以选择使用公式。

将公式放入您希望复制值的实际单元格中。

=LEFT(sourceCell, #of characters you want)

它的外观如下:

=LEFT(Sheet1!A1, 2)

想想它说“这个单元格应该等于单元格OO中的前n个字符,从左边开始”。

完成公式后,如果您不再需要将其绑定到源(如果sourceCell更改,使用LEFT公式的单元格也会更改),则可以突出显示单元格,Ctrl + C复制,然后右键单击并选择选择性粘贴。然后选择 VALUE 并点击“确定”,现在单元格将使用它们显示的值进行硬编码,就像您自己输入一样。

掌握了使用公式后,下一步就是VBA。如果您不习惯使用= LEFT,请不要因为跳入VBA并为范围等编写代码而使自己感到困惑。一步一步,在你知道它之前你将成为一名专业人士。 :)

答案 1 :(得分:2)

这是一个快速示例子,可以帮助您入门:

Public Sub LeftSub()

    Dim SourceRange As Range, DestinationRange As Range, i As Integer

    'Define our source range as A1:A10 of Sheet1
    Set SourceRange = Sheet1.Range("A1:A10")

    'Define our target range where we will print.
    'Note that this is expected to be of same shape as source
    Set DestinationRange = Sheet1.Range("B1:B10")

    'Iterate through each source cell and print left 2 bits in target cell
    For i = 1 To SourceRange.Count

        DestinationRange(i, 1).Value = Left(SourceRange(i, 1).Value, 2)

    Next i

End Sub

答案 2 :(得分:2)

怎么样

Sub foo()
    Dim cell        As Range
    Dim sourceRange As Range

    '//define the source column - looks for contiguous downward data from A1;
    Set sourceRange = Range(Sheets("Sheet1").Range("A1"), Selection.End(xlDown))

    '//iterate each cell
    For Each cell In sourceRange
        If IsEmpty(cell.Value) Then Exit For

        '//example to place the value in corresponding row of column B in sheet 2
        Sheets("Sheet2").Range("B" & cell.Row).Value = Left$(cell.Value,2)
    Next
End Sub

或等效公式(在目标单元格中​​)

=LEFT(Sheet1!A1,2)