1

我为一个包含 7 张工作簿的工作簿录制了一个宏。两张表从许多文本文件中导入数据并按顺序排列。其他表格使用此数据和给定的其他一些公式,并生成带有多项式方程的图表。所以宏程序相当大。我有看起来像这样的数据

      A   B   C   D   E
R8    0   #   *   @   $
R9   0.05 #   *   @   $
R10  0.1  #   *   @   $
.     .   .   .   .   .
.     .   .   .   .   .
.     .   .   .   .   .
R108 5.0  #   *   @   $

上述数据中:
第8行到第108列A、B列是导入数据
,C、D、E由公式给出。

我的问题是我在导入的 A 列(0~5)中没有相同的数据。

数据不断变化,如 0~12、0~16 和 0~40。所以最终的行号也每次都会改变。因此,每次数据更改时,我都需要为所有其他数据记录宏。

我可以编辑我记录的宏,使其不会停在第 108 行(或 5.0),而是让它停在作为输入给出的最后一个值(比如“R88”或 40.0 或“R168”或 16.0 ETC。)?

此外,第 8 行中给出的 C、D 和 E 中给出的公式应该扩展到作为输入给出的最后一行。

例如,假设我在 sheet2 的 A 和 B 列中导入具有 0~40 或 0~16 值的文本文件。现在我希望工作表 1 第 8 行 A 和 B 列中的这些值以及 C、D 和 E 列中给出的相应公式应该延伸到第 88 行或第 168 行。工作表 1 中的值必须随着变化发生而变化导入的文本文件与行数或递增的步长值无关。

       A   B   C   D   E                    A   B   C   D   E
R8     0   #   *   @   $             R8     0   #   *   @   $
R9    0.2  #   *   @   $             R9    0.25 #   *   @   $
R10   0.4  #   *   @   $             R10   0.5  #   *   @   $
.      .   .   .   .   .             .      .   .   .   .   .
.      .   .   .   .   .             .      .   .   .   .   .
.      .   .   .   .   .             .      .   .   .   .   .
R88  16.0  #   *   @   $             R168  40.0  #   *   @   $

请帮我解决这个问题..

4

2 回答 2

2

如果您的数据每张工作表上的同一个单元格开始,那么您可以使用一些基本的 Excel 选择命令来获取所有数据。

'Set up a range object.
Dim rng As Range
'Select the first cell in which data is going to be.  This example uses cell "A1".
Range("A1").Select
'The following line is equivalent to pressing Shift-End-DownArrow, which selects
'everything in the current column until an empty cell is encountered.
Range(Selection, Selection.End(xlDown)).Select
'The following line is equivalent to pressing Shift-End-RightArrow, which selects
'everything in the current row until an empty cell is encountered.
Range(Selection, Selection.End(xlToRight)).Select
'This selection is then a range containing all the continuous entries starting at cell A1.
'Set the Range variable to the current selection.
Set rng = Selection

Set在为对象变量赋值时,在 VBA中使用关键字很重要。

将此数据粘贴到目的地后,您可以使用类似的方法来获取它所占据的范围,并使用以下函数来确定您应该将公式复制到哪里。

Range.Column返回范围中的第一列号。
Range.Columns.Count返回指定范围内的列数。
Range.Row返回范围中的第一行。
Range.Rows.Count返回范围内的行数。
在上述所有函数中,您将替换Range为您的实际范围对象。

于 2012-09-04T18:32:16.753 回答
0

如果从文本文件中编译数据的代码是高效的,即工作表从单元格 A1 开始,不跳过任何行或列,并且没有超出预期数据范围的杂散非空白单元格,最简单的方法是:

Set rng = ActiveSheet.UsedRange

或者

Set rng = ActiveSheet.Range("A1").CurrentRegion

要指定从单元格 C8 到末尾的范围,用于填写公式:

With ActiveSheet.UsedRange
  Set rng = .Offset(7, 2).Resize(.Rows.Count - 7, 3)
End With

如果公式已存在于单元格 C8:E8 中,则此

With ActiveSheet.UsedRange
  .Offset(7, 2).Resize(.Rows.Count - 7, 3).FillDown
End With
于 2015-09-11T20:13:11.800 回答