-1

我正在尝试构建一个函数来返回 xlFillSeries 的结束字符串/单元格值。有没有办法在不实际写入工作表然后选择最后一个单元格的情况下做到这一点?我想避免操纵工作表/工作簿。

这是生成系列的代码:

 Dim SeqStart As String, SeqInt As Integer
 SeqStart = "XYZ100"
 SeqInt = 42 ' Function should return XYZ141
 With Range("A1")
  .Value = UCase(SeqStart)
  If SeqInt > 1 Then
   .AutoFill Destination:=Range("A1").Resize(SeqInt), Type:=xlFillSeries ' Will cause error if only 1 sample sequence
  End If
 End With

我想利用 XlFillSeries 因为它可以很好地处理奇数数据,例如:如果我的 SeqStart =A1B100那么我不能使用正则表达式将其分解为数字,执行数学运算,然后将其重新组合在一起,因为B中间有字符串。我确实知道该系列将/应该始终以数字结尾,但是我在不知道字符串长度和/或字母数字怪异的混合的情况下,努力从字符串的右手中剥离数字部分。

所以我想我的问题可以通过弄清楚如何从字符串的右侧去除数字然后做数学并将字符串重新组合在一起来回答。数字是递增的。

或者,我只是利用XlFillSeries但没有实际写入工作簿。目前我只是将其设置为写入“临时表”,然后捕获最后一个单元格并删除临时表,但我想知道是否有更好的方法。

4

1 回答 1

0

具体来说XlFillSeries,如果不写入必须是“真实单元格”的 Range,就无法使用它。因此,最好的方法是使用“临时表”并返回最后一个单元格。可以利用函数从字符串的右侧剥离数字,然后重新构建字符串,但我XlFillSeries更相信并且已经辞职只使用“临时表”。

这是我的功能:

注意:有一些自定义函数我不会包括在内,但是您可以根据名称猜测它们的作用!

Public Function EndOfXlFillSeries(SeqStart As String, SeqInt As Integer) As String
 Dim DestSheet As Worksheet
 WorksheetCreateDelIfExists ("XLFillSeriesTmp")
 Set DestSheet = Worksheets("XLFillSeriesTmp")
 With DestSheet.Range("A1")
  .Value = UCase(SeqStart)
  If SeqInt > 1 Then
   .AutoFill Destination:=DestSheet.Range("A1").Resize(SeqInt), Type:=xlFillSeries ' Will cause error if only 1 SeqInt
  Else
   EndOfXlFillSeries = SeqStart
  End If
 End With
 Dim lRow As Integer
 lRow = lRowOfCol(1)
 EndOfXlFillSeries = DestSheet.Range("A" & lRow).Value
 Call WorksheetDelete(DestSheet)
End Function
于 2021-02-04T23:24:38.960 回答