我目前正在尝试使用Excel中的VBA规范化数据。因此,我的工作簿导入了几个csv文件,并将它们写在不同的工作表中,所有这些都是这样构建的。
现在我想将所有列从2到n标准化(除以每列的最大值)。这是我到目前为止使用的功能:
Sub NormalizeData(dataName)
cs = Worksheets(dataName).UsedRange.SpecialCells(xlCellTypeLastCell).Column
rs = Worksheets(dataName).UsedRange.SpecialCells(xlCellTypeLastCell).Row
For col = 2 To cs
maxValue = Application.WorksheetFunction.Max(Worksheets(dataName).Columns(col))
For r = 2 To rs
Worksheets(dataName).Cells(r, col) = Worksheets(dataName).Cells(r, col) / maxValue
Next r
Next col
End Sub
这种方法有效,但由于数据量很大,因此非常慢。有没有办法提高速度?我已经切换了屏幕更新。
非常感谢你的帮助!!!
答案 0 :(得分:3)
使用另一张表和PasteSpecial。 假设ws1包含您的数据且ws2当前未使用:
with ws2.Range(.Cells(2,2), .Cells(rs, cs))
.value = maxValue
.copy
end with
ws1.Range(.Cells(2,2), .Cells(rs, cs)).PasteSpecial _
Operation:=xlPasteSpecialOperationDivide
Application.CutCopyMode = False
答案 1 :(得分:2)
这是一个对矩形范围内的数字进行归一化的子程序。您可以决定要标准化的范围,然后将该范围传递给该子范围:
@objc class NewClass: NSObject, WCSessionDelegate {
...
@available(iOS 9.3, *)
func updateContent(username: String, password: String) throws {
guard let session = session where session.state == .Activated else { // app is crashing on this line
return
}
do {
...
} catch {
throw error
}
...
}
@available(iOS 9.3, *)
func session(session: WCSession, state: WCSessionActivationState, error: NSError?) {
do {
...
} catch
print(error)
}
}
...
}
这比您目前拥有的效率更高,因为它在批量传输中在电子表格和VBA之间移动值,而不是通过大量的单个读/写。它还可以避免屏幕更新问题和根据这些值重新计算函数的内容。