我正在尝试根据文本比较将文本值复制并粘贴到excel中的特定数量的单元格中。
请参阅以下说明:
我有2列A(空白)和B(带值)
在宏之后,这将是最终结果:
它基本上在检测到水果柱并将细胞值粘贴到A行后取底部细胞。注意,在它到达下一个细胞后,它会获取下一个(底部)细胞值。 F123,F124等。
有人可以提供excel vba代码吗?感谢。
答案 0 :(得分:4)
我不会使用VBA来解决这个问题。我会输入:
=IF(AND(LEFT(B2,1)="F",B2<>"Fruits"),B2,A1)
进入A2并复制下来。这似乎会产生你所寻求的效果。
如果您真的想使用VBA,测试的代码是:
Dim CellValue As String
Dim RowCrnt As Integer
Dim RowMax As Integer
With Sheets("Sheet1") ' Replace Sheet1 by the name of your sheet
RowMax = .Cells(Rows.Count, "B").End(xlUp).Row
For RowCrnt = 2 To RowMax
CellValue = .Cells(RowCrnt, 2).Value
If Left(CellValue, 1) = "F" And CellValue <> "Fruits" Then
.Cells(RowCrnt, 1).Value = CellValue
Else
.Cells(RowCrnt, 1).Value = .Cells(RowCrnt - 1, 1).Value
End If
Next
End With
以下内容解释了上述代码中可能对新手不明确的那些方面。
宏录像机几乎总是使用范围(“A5”)或范围(“A5:C10”)来指代范围。
似乎有一些命令(对不起,不记得是哪个),这种格式是强制性的,但对于大多数用途,单元格(行,列)更方便。
如果要为工作表“Sheet1”的“A5:C10”范围内的每个数值添加1,下面显示如何使用单元格执行此操作:
Dim CellValue as String
Dim ColCrnt As Integer
Dim RowCrnt As Integer
With Sheets("Sheet1")
For RowCrnt = 5 to 10
For ColCrnt = 1 to 3 ' "A" to "C"
CellValue = .Cells(RowCrnt, ColCrnt).Value
If IsNumeric(CellValue) Then
.Cells(RowCrnt, ColCrnt).Value = CellValue + 1
End If
Next
Next
End With
访问工作表中的单元格会有时间损失,但我更多地使用了CellValue,因为代码可能会因为过多的单元格引用而变得混乱。
注意:在“A5”中,列首先出现,但在单元格(5,1)中,该行首先出现。
您可以使用单元格定义范围。以下将活动表格的“A5:C10”设置为粗体:
Range(Cells(5,1), Cells(10,3)).Font.Bold = True
要解决活动工作表最后一行的A列:
Cells(Rows.Count,"A")
要解决第1行的最后一列:
Cells(1,Columns.Count)
Ctrl +向上,Ctrl +向下,Ctrl +向左和Ctrl +向右可用于从空单元格跳转到下一个单元格,其值在指示的方向上。您可以在VBA中执行相同的操作。但更有用的是,你可以获得光标跳转到的行或列的值,而不会有移动光标的时间代价。
如果光标位于最后一行的B列并按Ctrl + Up,则光标将跳转到最后一行,其中包含B列中的值。以下内容将RowMax设置为活动工作表的行号:< / p>
RowMax = Cells(Rows.Count, "B").End(xlUp).Row
获取第27行的最后一列:
ColMax = Cells(27,Columns.Count).End(xlToRight).Column
答案 1 :(得分:0)
尝试我的宏
Option Explicit
Sub test()
Dim My_st$
Dim Ro%, Lr%
With Sheets("Sheet1") ' Replace Sheet1 by the name of your sheet
Lr = .Cells(Rows.Count, "B").End(xlUp).Row
Range("a2").Resize(Lr).ClearContents
For Ro = 2 To Lr
My_st = .Cells(Ro, 2).Value
.Cells(Ro, 1) = _
IIf(My_st Like "[A-Z]#*", My_st, .Cells(Ro - 1, 1))
Next
End With
End Sub