我需要一个生成工作表名称列表的函数,我已经有一个可以将工作表编号转换为工作表名称的函数,但它不能处理数组
我想要转换的函数是
Function SHEETNAME(number As Variant) As String
SHEETNAME = Sheets(number).Name
End Function
我希望它接受以下输入
=SHEETNAME(SEQUENCE(SHEET()-1))
这将输出当前工作表之前的所有工作表的列表
例如(假设默认名称)如果我们在 Sheet4 上,则输出将是 {Sheet1; Sheet2; Sheet3}
答案1
如果您需要从第一个到指定表的名称,那么使用 SEQUENCE() 是不合理的,宏可以轻松地在指定的边界内循环:
Function getListNames(endSheet As Long) As Variant
Dim aResult As Variant
Dim i As Long
ReDim aResult(1 To ThisWorkbook.Sheets.Count, 1 To 1)
For i = 1 To ThisWorkbook.Sheets.Count
aResult(i, 1) = ThisWorkbook.Sheets(i).Name
If i >= endSheet Then Exit For
Next i
getListNames = aResult
End Function
使用{=GETLISTNAMES(SHEET()-1)}
答案2
不确定你的问题是什么。
SEQUENCE
will => 数字数组- 循环将
SEQUENCE
每个数字转换为工作表名称 - 存储工作表名称在一些方便的对象中(
array
,,,)arraylist
collection
dictionary
- 将函数名称等同于数组(如果想要垂直输出则转置)
不清楚您所说的“当前工作表之前”是什么意思。您应该知道,工作表编号代表工作表的顺序,如在 Excel 窗口底部所见,如果您重新排序这些工作表,工作表编号将会改变。
例如:
Option Explicit
Function SheetNames(SN) As Variant
Dim AL As Object
Dim V
Set AL = CreateObject("System.Collections.ArrayList")
For Each V In SN
AL.Add ThisWorkbook.Worksheets(V).Name
Next V
'Transpose => vertical array
SheetNames = WorksheetFunction.Transpose(AL.toarray)
End Function