VBA / Excel-将范围名称设置为特定值

时间:2018-09-28 09:55:24

标签: excel vba

我具有以下数据结构:

+-----------------+---------------+
| 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”,则宏不需要替换它,而可以跳过该值。

谢谢

0 个答案:

没有答案