Sub consolidate()
Dim x As String
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim m As Integer
x = InputBox("enter form/procedure/process", "enter type", "form")
'take input string as variable
m = 1
'this variable to increment number o row
For Each Worksheet In ThisWorkbook.Worksheets
'iterate through all worksheets
k = WorksheetFunction.CountA(Range("A:A"))
'k is to find last row
For j = 1 To k
'iterate through all rows
If Range("b" & j).Value = x Then
Range("A" & j & ":" & "B" & j).Copy
' copy the rows
Worksheets("result").Range("A" & m & ":" & "B" & m).PasteSpecial Paste:=xlPasteValues
'paste the rows
m = m + 1
End If
Next j
Worksheet.Activate
Debug.Print Worksheet.Name
2 回答
我会假设你和很多人一样,对如何开始感到困惑,而不是你试图将这个站点用作免费的宏库 .
考虑到这一点,我将为您自己提供链接和工具 . 我将讨论用于解决此问题的VBA类型,以便您可以查找可用的术语 .
首先,您需要一个命令按钮 . 获得此功能的最简单方法是使用功能区上的“开发人员”选项卡 . 你可以了解here . 获得按钮后,您需要为其指定一个宏 . 关于here的更多信息 . 我建议使用Form Control按钮,因为它更容易一些,可以很好地处理你的任务 .
但是,在分配宏之前,需要构建宏 . Excel-Easy将向您展示如何通过GUI访问VBA编辑器,或者您可以按ALT F11 .
首先,您需要一个输入框 . 有关该信息,请访问MSDN . 那篇文章也有一些例子可以让它运行起来 .
您需要在OzGrid将输入分配给这些变量 . 根据你的描述,我会说你想要一个string .
现在,你需要一个
For Each...Next
loop . 像这样的东西:为此,您需要了解Worksheet,ThisWorkBook和Worksheets .
在该循环内部,您需要找到每个工作表的最后一行 . 使用Excel时这是很常见的事情,可以找到很多地方,例如The Spreadsheet Guru . 一旦你想要使用最后一行定义一个范围 . 最后一个链接也可以帮助你 .
一旦你've got your range, it'的时间使用Find方法 . 该页面上的第一个示例就是您使用该变量,我们将输入设置为较早而不是数字2,您不需要替换它 . 它使用
With
statement,If
statement (article at Tech On The Net),Do While
loop和Not
operator .现在,每次找到它,你都想移动它 . 为了确保你现在想要为你的第一页设置最后一行 . 然后,您可以使用
Value
property快速轻松地将数据从原位移动到第一张纸 . 传输值时,请务必在最后一行添加1,否则只会将其传输到最后一行而不是下一行 .祝好运!
注意:我特别提到了我从这些链接获得的一些网站 . 这些都是很好的参考 . 有关更多参考,请查看here . 此外,Google是你的朋友;) . 如果您对此任何部分感到特别困难,您可以随时将其作为该特定问题的新问题发布 .
以下是答案 . 只是想学习VBA
下一个工作表
结束子