如何编辑录制的宏程序,以便在我更改导入的输入文件时识别并获取最后一个值?

时间:2012-09-04 03:53:28

标签: excel excel-vba excel-2003 vba

我已经录制了一张包含7张工作簿的宏。两张纸从许多文本文件导入数据并按顺序排列。其他表使用此数据和一些其他公式给出并生成具有多项式方程的图表。所以宏程序非常大。我的数据看起来像这样

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

在上述数据中:
A栏和A栏第8行到第108行的B是导入数据
C,D& E由式给出。

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

数据不断变化,如0~12,0~16& 0〜40。所以最后的行号也会每次都改变。因此,每当数据发生变化时,我都需要为所有其他数据记录宏。

我可以编辑我录制的宏,它不会在第108行(或5.0)停止,但会在输入的最后一个值(例如'R88'或40.0或'R168)处停止'或16.0等)?

C,D& C中给出的公式第8行中给出的E应该延伸到作为输入给出的最后一行。

例如,假设我在A列和A列中导入值为0~40或0~16的文本文件。 B表2。现在我想在表1的第8行A列和A列中找到这些值。 B以及C,D和C列中给出的相应公式。 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  #   *   @   $

请帮我解决这个问题..

2 个答案:

答案 0 :(得分: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

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

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

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

答案 1 :(得分: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