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