已筛选区域(filterRange)作为激活区域(usedRange)这部分代码怎么写?

阅读次数 103

简单来说就是初步筛选掉不符合的数据,更进一步缩小遍历范围。 试了好几天晕了没头绪了。

4 Answers

是希望对筛选区域做处理吗?

筛选数据之后, 可以直接对整个 UsedRange 做处理, 隐藏的数据不会受影响的

不行,用筛选语句以后,activesheets.usedrange获取到的依旧不是筛选后的区域,而是整表。

可以通过这种方式获取筛选后的区域

const visibleRange = Range("A2:B10").SpecialCells(xlCellTypeVisible)

visibleRange.Each((r) => {
  r.Value = "100"
})

image.png

那么我如果要获取整表的筛选区域的范围怎么写?我想要如下面的示例获取一个具体的范围数值。

// 定义使用区域 var UsedRange = API.ActiveSheet.UsedRange;

var firstCol = UsedRange.Column; var lastCol = UsedRange.ColumnEnd; var firstRow = UsedRange.Row;
var lastRow = UsedRange.RowEnd;

// 打印激活区域的范围 console.log( '[' + 'firstCol: ' + firstCol + ']',
'[' + 'lastCol: ' + lastCol + ']',
'[' + 'firstRow: ' + firstRow + ']',
'[' + 'lastRow: ' + lastRow + ']'
)

这里有一个打印筛选出来的行的代码示例。如果足需求望采纳。

const userRange = Application.ActiveSheet.UsedRange
const rangeInfo = `${Application.Base10To26(userRange.Column)}${userRange.Row}:${Application.Base10To26(userRange.ColumnEnd)}${userRange.RowEnd}`
const visibleRange = Range(rangeInfo).SpecialCells(xlCellTypeVisible)

const rows = []
let lastRowIndex = 0
visibleRange.Each((r) => {
  if (lastRowIndex != r.Row) {
    rows.push(r.Row)
  }
  lastRowIndex = r.Row
})
console.error(rows)