我需要帮助来创建Excel的VBA代码,这将使我的日常工作更轻松。 我需要找到关键字"提交"并将细胞放在它上方,复制细胞。
将单元格粘贴到另一个关键字" Totals"下面。并循环它,以便继续寻找下一个"提交"和"总计"
我没有在VBA任教。 我通常只是复制并粘贴我在网上找到的代码。 我的代码可能很乱,而且到处都是
我的代码不起作用,它使用第一个关键字"提交"上面的单元格。并粘贴在所有" Totals"下面的单元格上,这不是我想要的。我希望单元格上的值(日期格式:1/2/2018)高于第一个"提交"在第一个" Totals"和第二个以上的单元格的价值"提交"在第二个以下的小区" Totals"并继续。它们都在同一列(A列)
Sub Macro1()
'
' Macro1 Macro
'
Application.ScreenUpdating = False
Dim x
Dim y
For x = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row To ActiveCell.Row Step -1
For y = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row To ActiveCell.Row Step -1
If Cells(x, 1) = "Submissions" Then
If Cells(y, 1) = "Totals" Then
ActiveCell(x - 1, 1).Copy ActiveCell(y + 1, 1)
Application.CutCopyMode = False
End If
End If
Next
Next
Application.ScreenUpdating = True
End Sub
任何帮助将不胜感激!
不确定如何以及为什么,我让它使用了这个
Application.ScreenUpdating = False
Dim x
Dim y
Dim y_start
Dim x_start
y_start = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
x_start = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
For x = x_start To ActiveCell.Row Step -1
If Cells(x, 1) = "Submissions" Then
For y = x_start To ActiveCell.Row Step -1
If Cells(y, 1).Value = "Totals" Then
ActiveCell(x - 1, 1).Copy ActiveCell(y + 1, 1)
Application.CutCopyMode = False
x_start = x + 2
Exit For
End If
Next
End If
Next
Application.ScreenUpdating = True
感谢您的帮助!
答案 0 :(得分:1)
为了得到一个好的答案,请更好地描述您想要做的事情。即如何格式化数据,这通常是了解如何完成数据的必要条件。 但是我会尽力帮助你。要做到这一点,您需要了解vba中的一些基本结构。第一个是For或While循环:
For i = 1 to 10
'Do this code
Next i
Do While condition = True
'Do this code
Loop
上面的for循环将运行您的代码10次,因此如果您确切知道要检查的单元格数,则需要使用此代码。如果您不知道在运行之前需要检查多少个单元格,直到条件停止为真,请使用while循环。
您还需要知道如何引用符合以下格式的单元格。范围被引用为工作簿中的公式,而单元格从左上角开始采用(行,列)参数。如果您在同一张纸中,则可以删除表格(“Sheet1”)。离开前面并使用范围(“A1”)。值或单元格(1,1)。值相反。
Sheets("Sheet1").Range("A1").Value
Sheets("Sheet1").Cells(1, 1).Value
您可以使用这些值从单元格中取出值或更改单元格值。
最后,你需要知道if语句,它通过arguments =,>,<,<>来比较两个输入。最后一个意思不相等
If arg1 = arg2 Then
'This runs if the condition is true
Else
'This runs if the condition is false
'The Else is optional
End If
将这些放在一起你应该能够让代码为你工作。
修改
我看到你现在要做的事情。你需要一个Exit For来打破Totals循环。我稍微修改了你的代码
Sub Macro1()
Application.ScreenUpdating = False
Dim x
Dim y
Dim y_start
y_start = 1
For x = 1 To Range("A1").End(xlDown).Row
If Cells(x, 1) = "Submissions" Then
For y = y_start To Cells(y_start, 1).End(xlDown).Row
If Cells(y, 1) = "Totals" Then
Cells(x - 1, 1).Copy Cells(y + 1, 1)
Application.CutCopyMode = False
y_start = y + 1
Exit For
End If
Next
End If
Next
Application.ScreenUpdating = True
End Sub