我具有以下数据结构:
+-----------------+---------------+
| ExcelRangedName | Default Value |
+-----------------+---------------+
| Name1 | |
| Name2 | FALSE |
| Name3 | TRUE |
| Name4 | 0 |
| Name5 | Alpha |
| Name6 | |
| Name7 | |
| Name8 | |
| … | … |
+-----------------+---------------+
请注意,“ ExcelRangedName”列实际上是数千行。
我有一个宏,该宏会将“ ExcelRangedName”列的范围名称设置为相应的“ Default Value”列。为简单起见,我将上表称为“ RangeMappingTbl”:
For i = 1 To MaxRowCount
Range(Range("RangeMappingTbl").Cells(i, 1).Value).Value = Range("RangeMappingTbl").Cells(i, 2).Value
Next i
其中MaxRowCount是表中输入的最大行数。
现在,这非常有效,因为范围名称值可能已经等于默认值,并且上面的宏将简单地替换该值。我想包含一个检查它是否等于值,然后跳过-但是,使用VBA这样做会 not 加快过程,因为效率低下是由于调用范围名称引起的,即每次调用时:
Range(Range("RangeMappingTbl").Cells(i, 1).Value).Value
宏会变慢。
我正在尝试在excel上创建“检查”列,如果范围名称的值已经等于默认值,则该列返回TRUE。然后宏将查看此列,并且仅在列值为FALSE时重复。但是,我要做的唯一选择是使用INDIRECT函数,该函数非常慢。有没有人有办法解决这个问题,或者没有使用
的更好的解决方案Range(Range("RangeMappingTbl").Cells(i, 1).Value).Value
例如,如果范围名称“ Name5”等于“ Alpha”,则宏不需要替换它,而可以跳过该值。
谢谢