Vba Excel从某些单元格中提取数据

Vba Excel从某些单元格中提取数据,vba,excel,if-statement,excel-2007,Vba,Excel,If Statement,Excel 2007,我有一个文件,我只想提取细胞B9,B19,B29等在整个文件的模式。我希望它能被提取到另一个excel文件中,或者以某种方式,这样我就可以在另一个excel工作表中只使用这些单元格 我可能有几个excel文件,我可能需要做这类事情,所以如果有一种方法,我在很多文件中使用相同的格式,我总是可以提取单元格B9,B19,B29,那就太好了。谢谢你的帮助 如果可能的话,我正在寻找语法 编辑 我在想,我是否可以制作一个excel if语句,如果行中有一个9,而行是B,那么将它打印到某个地方,但我希望它打印

我有一个文件,我只想提取细胞B9,B19,B29等在整个文件的模式。我希望它能被提取到另一个excel文件中,或者以某种方式,这样我就可以在另一个excel工作表中只使用这些单元格

我可能有几个excel文件,我可能需要做这类事情,所以如果有一种方法,我在很多文件中使用相同的格式,我总是可以提取单元格B9,B19,B29,那就太好了。谢谢你的帮助

如果可能的话,我正在寻找语法

编辑

我在想,我是否可以制作一个excel if语句,如果行中有一个9,而行是B,那么将它打印到某个地方,但我希望它打印在一列中

编辑2 我只想要B栏,不像我之前提到的A栏。
B9、B19、B29、B39贯穿整个文件

取决于您希望执行的频率这取决于您需要执行的方式,如果是其中之一,一些简单的excel命令可能会有所帮助

e、 g

在单元格C1中输入以下内容:

=MOD(ROW(),10)
然后将其复制到数据的底部。该命令将把数字1返回到0。然后可以过滤C列中的数据,其中值为9,然后选择可见行并将数据复制到新工作表中

ROW()  ' this returns the ROW number of cell the command is in.
MOD(number, divisor) ' this basically divides one number by the other and returns the remainder. so row 9 / 10 = 0 remainder of 9, row 19 / 10 = 1 remainder of 9.

希望这有帮助。

您可以使用间接功能。它将单元格引用作为文本字符串,并返回该单元格中的值。因此,与其使用

=data!a9
要获取单元格a9中图纸数据中的值,请使用

=indirect("data!a9")
您也可以使用r1c1表示法,如下所示:

=indirect("data!r9c1",false)
在此基础上,您可以使用行和列函数执行以下10个步骤:

=INDIRECT("data!r"&-1+10*ROW()&"c"&COLUMN(),FALSE)

如果你把这个公式放在输出表的A1中,然后复制粘贴下来,它会给你数据中的值!A9,数据!A19,数据!A29,。。。在单元格A1、A2、A3中。。。根据您希望输出的排列方式,您可能需要修改单元格引用字符串。

以防您需要使用代码:

Sub Test()
  'Assumes Sheet1 has your values and Sheet2 will be the data extracted from every row ending in 9
  Dim iCounter As Long
  Dim newSheetRow As Long
  Dim aValue As String
  Dim bValue As String

  newSheetRow = 1
  'Start and nine and increment by 10 till you reach end of sheet
  For iCounter = 9 To Sheet1.Rows.Count - 1 Step 10 'NOTE:  You may not want to do it by RowCount, but just showing you could
      aValue = Sheet1.Range("A" & iCounter)
      bValue = Sheet1.Range("B" & iCounter)

      Sheet2.Range("A" & newSheetRow).Value = "We were on row: " & iCounter
      Sheet2.Range("B" & newSheetRow).Value = aValue
      Sheet2.Range("C" & newSheetRow).Value = bValue
      newSheetRow = newSheetRow + 1
  Next iCounter

  MsgBox "Done"
End Sub

问题是,还有其他列C、D、E,它们也将有一行与第9、19、29、39、49、59行关联。我不确定您的答案是否有帮助,因为我有点困惑它是否能满足我的需要。@Tyler31我猜您希望在新的工作表/工作簿中包含a列到E列第9行、第19行、第29行等-如果您将=modrow,10在最后一列中过滤,例如F列,然后你可以只将可见的过滤行复制到新的工作表/工作簿我只需要B列。B0、B9、B19、B29、B39等给我一个REF错误,但如果我想在B中尽快完成,我需要复制并粘贴=间接数据!r&-1+10*行和c&COLUMN,从列B的顶部开始为FALSE这里没有数据,因为如果我把它放在有数据的单元格中,它只会覆盖它?然后将它拖到列中?如果您想要的数据在单元格A9、B9、C9、A19…的工作表数据中,并且您想要在单元格A1、B1、C1、A2…的工作表输出中的输出,。。。,然后把这个公式放在A1、B1、C1、A2单元格的表格输出中,……感谢您的帮助,并对所有的问题表示歉意:我只想要整个文件中B9、B19、B29、B39的值。这应该可以做到,因为您只需要第2列:=间接数据!R&-1+10*行和C2,好的,让我解释一下它在做什么:我想要表1 B9、b19等上的数据。你想让我把公式放在工作表2aka中点击底部的链接打开另一张工作表在单元格A1中输入公式,上面写着REF!好像它不知道它在哪里。对不起,我想加上B0,B9,B19。。。等等…我真的希望如此D