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

时间:2011-06-02 15:08:37

标签: excel vba excel-vba if-statement excel-2007

我有一个文件,我只想在整个文件中以一种模式提取单元格B9,B19,B29等等。我最好将它提取到一个不同的excel文件或某种方式,以便我可以只使用另一个excel工作表中的那些单元格。

潜在地,我可能有几个excel文件,我可能需要这样做,所以如果有一种方法,我在很多文件中有相同的格式,我总是可以提取单元格B9,B19,B29会很好。任何帮助赞赏

我尽可能寻找语法

修改

正在考虑我是否可以以某种方式制作一个excel IF声明,如果Row中有一个9并且该行是B然后将其打印到某个地方,但我希望它打印在一列中

编辑2 我只想要B列而不是我之前提到的A。 B9,B19,B29,B39通过整个文件

3 个答案:

答案 0 :(得分:1)

以防万一你想用代码来做:

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

答案 1 :(得分:0)

取决于你想要做的频率取决于你需要怎么做,如果它是其中一个简单的excel命令可能有帮助。

e.g。

在Cell 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.

希望这有帮助。

答案 2 :(得分:0)

您可以使用INDIRECT功能。它将单元格引用作为文本字符串,并返回该单元格中的值。所以不要使用

=data!a9

要获取单元格a9中工作表“data”中的值,请使用

=indirect("data!a9")

您还可以使用r1c1表示法,如下所示:

=indirect("data!r9c1",false)

从那里你可以使用ROW和COLUMN函数来执行10:

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

如果你将这个公式放在输出表的A1中,然后将其复制并粘贴到其中,它将为您提供数据中的值!A9,数据!A19,数据!A29,......在单元格A1中, A2,A3 ...根据您的输出排列方式,您可能需要修改单元格引用字符串。