搜索上面关键字的单元格以复制和替换另一个关键字下面

时间:2018-04-12 01:04:34

标签: excel vba excel-vba

我需要帮助来创建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

任何帮助将不胜感激!

image

不确定如何以及为什么,我让它使用了这个

    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

感谢您的帮助!

1 个答案:

答案 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