Vba 搜索关键字上方的单元格以复制和替换另一关键字下方的单元格
我需要帮助为Excel创建VBA代码,这将使我的日常工作更轻松。 我需要找到关键字“提交”,并采取的权利,上面的单元格,复制单元格 将单元格粘贴到另一个关键字“Totals”下面。并循环它,以便它继续查找下一个“提交”和“总数” 我没学过VBA。 我通常只是复制和粘贴我在网上找到的代码。 我的代码可能乱七八糟,到处都是 我的这段代码不起作用,它使用第一个关键字“Submissions”上面的单元格,并粘贴到所有“Totals”下面的单元格,这不是我想要的。我想要第一个“总计”下的第一个“提交”单元格上面的单元格值(日期格式:2018年1月2日)和第二个“总计”下的第二个“提交”单元格上面的单元格值,然后继续。它们都在同一列(A列) 任何帮助都将不胜感激 不知道是怎么回事,为什么,我是用这个工作的Vba 搜索关键字上方的单元格以复制和替换另一关键字下方的单元格,vba,excel,Vba,Excel,我需要帮助为Excel创建VBA代码,这将使我的日常工作更轻松。 我需要找到关键字“提交”,并采取的权利,上面的单元格,复制单元格 将单元格粘贴到另一个关键字“Totals”下面。并循环它,以便它继续查找下一个“提交”和“总数” 我没学过VBA。 我通常只是复制和粘贴我在网上找到的代码。 我的代码可能乱七八糟,到处都是 我的这段代码不起作用,它使用第一个关键字“Submissions”上面的单元格,并粘贴到所有“Totals”下面的单元格,这不是我想要的。我想要第一个“总计”下的第一个“提交”单
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
谢谢你的帮助 为了得到一个好的答案,请更好地描述一下你想做什么。ie如何格式化数据,这通常是理解如何处理数据所必需的。 不过我会尽力帮你的。为此,您需要了解vba中的一些基本结构。第一个是For或While循环:
For i = 1 to 10
'Do this code
Next i
Do While condition = True
'Do this code
Loop
上面的for循环将运行您的代码10次,因此,如果您确切知道要检查多少个单元格,则需要使用该循环。如果在条件停止为真之前,不知道需要检查多少单元格,请使用while循环
您还需要知道如何引用单元格,这些单元格将遵循与下面类似的格式。范围像工作簿中的公式一样被引用,单元格的参数(行、列)从左上角开始。如果您在同一张图纸中,可以放下图纸(“图纸1”)。不在前面,而是使用范围(“A1”).值或单元格(1,1).值
Sheets("Sheet1").Range("A1").Value
Sheets("Sheet1").Cells(1, 1).Value
您可以使用这些值从单元格中取出值或更改单元格值
最后,您需要知道if语句,它通过参数=,>,比较两个输入,记录一个宏并检查生成的代码。不是基于关键字标准,一些样本数据的图像(之前和之后)可能会更好地描述您需要完成的工作。单元格上的值是日期格式。关键词都在同一列(A列)很好的答案,但是,你不应该提及(并教)其他人放下工作表(“Sheet1”)。关闭-这是最常见的问题之一,因为不明确限定工作表(和工作簿)的代码将使用Activesheet,这是大多数问题出现的地方。另外,为了更有用,你的答案应该是一个完整的子函数或函数的形式(如问题中所示)。不知何故,当我运行这段代码时,没有任何反应,没有任何东西被复制。我发现了问题。在开始宏时,之前使用的引用假定光标位于某个位置。我对它进行了编辑,使其在整个列上循环。如果它没有在单元格A1中开始,您将需要更改该引用。奇怪的是,调整范围后也没有反应
Sheets("Sheet1").Range("A1").Value
Sheets("Sheet1").Cells(1, 1).Value
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
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