我试图用一列包含几个信息块的列(即6个列表,在同一列中用4-5行的空格分隔),并将标识符粘贴到列表中的每个条目旁边。在这种情况下,标识符是相同的,因为这是将1个信息块中的所有条目匹配为单个名称的一种方法。
每个列表都包含1个篮子内的债券,因此为了使每个债券与其篮子匹配,我使代码在列表的每个条目旁边输入篮子的名称。
代码转到列表中的第一个条目,在紧挨着它的单元格中输入一个标识符(例如“ ECB”),然后将该输入向下扩展直到最后一行。但是,我希望代码只扩展到列表中的最后一个条目(例如,从I5到I3457)。下一段代码(在本例中为“ ECB扩展”)将从I13504到I17046。
在第一个单元格中执行Selection.AutoFill Destination:=Range(Selection, Selection.End(xlDown))
代码时,会出现问题,它不会在列表的最后一个条目中停止,但是会下降到整个工作表的最后一行(例如I140454) :
Sub GCPooling_Basket_Matching()
Macro3 Macro
Sheets("GC").Select
'ECB
Range("I5").Select
ActiveCell.FormulaR1C1 = "ECB"
Range("I5").Select
Selection.AutoFill Destination:=Range(Selection, Selection.End(xlDown))
'ECB Extended
Range("I3504").Select
ActiveCell.FormulaR1C1 = "EXT"
Range("I3504").Select
Selection.AutoFill Destination:=Range(Selection, Selection.End(xlDown))
'INT MXQ
Range("I17204").Select
ActiveCell.FormulaR1C1 = "MAXQ"
Range("I17204").Select
Selection.AutoFill Destination:=Range(Selection, Selection.End(xlDown))
'Equity
Range("I19204").Select
ActiveCell.FormulaR1C1 = "Equity"
Range("I19204").Select
Selection.AutoFill Destination:=Range(Selection, Selection.End(xlDown))
End Sub
有人知道将“ ECB”从I5扩展到I3457并使其停在I3457的方法吗?
答案 0 :(得分:1)
我认为您可以使用Offset来避免问题,并在现有数据上使用XlDown。例如,如果您只有A和B列,并且想像这样在C上自动填充ECB和ETF:
您可以使用此代码,而您将避免使用BruceWayne告诉您的有关最佳实践的信息:
Sub jason()
Range(Range("B5").Offset(0, 1), Range("B5").End(xlDown).Offset(0, 1)) = "ECB"
Range(Range("B22").Offset(0, 1), Range("B22").End(xlDown).Offset(0, 1)) = "ETF"
End Sub
答案 1 :(得分:1)
如果您不知道范围从哪里开始,可以尝试这样的方法。我不太了解您的代码如何适应块数,因此可能需要调整位。
Sub x()
Dim r As Range, v As Variant, i As Long
v = Array("ECB", "EXT", "MAXQ", "Equity")
For Each r In Columns(1).SpecialCells(xlCellTypeConstants).Areas
r.Offset(, 1) = v(i)
i = i + 1
Next r
End Sub
答案 2 :(得分:0)
有关如何处理此类问题的几种想法,请参见下面的链接。
https://www.ablebits.com/office-addins-blog/2014/05/02/fill-blanks-excel/
此外,请考虑打开Macro Recorder,然后再单击所有步骤以获取代码来一遍又一遍地执行此类操作。