excel - 测试和更改用户范围输入的行号和工作表索引的 VBA 函数
问题描述
我正在尝试使用 VBA 中的自定义函数执行一项非常简单的任务。
我有一个宏,它遍历大型 Excel 数据文件,这些文件被分成 50,000 行的表格。
不幸的是,我无法将这些全部拼接在一起并循环列,因为这通常超过了 excel 中每张工作表的 1,048,576 行限制。
我的宏将循环遍历数据,直到满足条件,并记录其行号以供将来参考。显然,当它到达任何 >50,000 的行时,它需要移动到下一张表并继续迭代过程。
但是,我无法处理 50,000 限制的任一侧的值,例如:sheets(3).Cells(50021,2)
.
我需要的是这样的:
输入:
customfunction(sheets(3).Cells(50021,2))
输出:
sheets(4).Cells(21,2)
解决方案
Public Type SheetPositions
SheetIndex As Long
RowNumber As Long
End Type
Public Function TranslateRange(ByVal c As Range) As Range
With TranslatePositions(c.Worksheet.Index, c.Row)
Set TranslateRange = c.Worksheet.Parent.Worksheets(.SheetIndex).Cells(.RowNumber, c.Column)
End With
End Function
Public Function TranslatePositions(ByVal SheetIndex As Long, ByVal RowNumber As Long) As SheetPositions
Const ROWS_PER_SHEET As Long = 50000
If RowNumber <= ROWS_PER_SHEET Then
TranslatePositions.SheetIndex = SheetIndex
TranslatePositions.RowNumber = RowNumber
Else
TranslatePositions.SheetIndex = SheetIndex + RowNumber \ ROWS_PER_SHEET
TranslatePositions.RowNumber = RowNumber Mod ROWS_PER_SHEET
End If
End Function
Dim r As Range
Set r = Worksheets(2).Cells(50021, 1)
Set r = TranslateRange(r)
With TranslatePositions(3, 50021)
MsgBox "Sheet " & .SheetIndex & " row " & .RowNumber
End With
推荐阅读
- r - R-3.6 上的 RDCOMClient 安装问题
- javascript - 解析 Webpack 模块中的 SCSS 文件
- javascript - 将字符串拆分为 N 个长度的部分
- ios - 当我验证我的应用程序时,CFBundleDocumentTypes 键必须是字典数组
- r - 如何根据 R 中的单元格字符格式化 xlsx 中的整行
- python - 在 Panda 中将位置拆分为城市、州代码和国家
- reporting-services - SSRS IIF 表达式 - 未声明 IFF?
- c# - 从模型显示时在 DropDownListFor 中设置默认值
- c# - 将 ViewModel 命令绑定到另一个窗口视图?
- python - 提取目录中的特定文件 - Windows