我在Excel中将一些数据分组到一列中的数据块中。每个块都有一个标识在顶部的序列号,然后是一个空格,然后是相关的数据。格式类似于以下内容:
20204
0.009447773
0.008672609
0.04769611
0.041069839
-0.035158783
-0.06094639
0.059548043
0.029640036
8081
0.003970223
-0.024156246
0.063038863
0.005341972
0.124618374
0.005495709
0.098642513
0.005636186
0.063350961
0.128130779
106663
0.115009077
0.049194194
-0.057100467
0.037476741
0.063087314
0.072773643
0.003909923
0.000448073
0.008006874
0.008718021
0.009883258
-0.022708477
0.028655466
块以规则的间隔出现并且长度相同(间隔为2007个单元)。因此,第一个序列号出现在D19,下一个出现在D2026,然后是D4033等。这延伸了几千行。
我想根据序列号将每个数字块乘以不同的数量。所以我希望将第一个块中的所有内容乘以0.5,将第二个块中的所有内容乘以2,将第三个中的所有内容乘以1.2,等等,根据如下表格:
Serial Scalar
20204 0.5
8081 2
106663 1.2
通过VBA或相邻单元格中的公式,最有效的方法是什么?
答案 0 :(得分:1)
您可以展开Areas
对象
Range
属性
Option Explicit
Sub main2()
Dim iArea As Long
Dim serialToScalarTable As Range, cell As Range
Dim multiplier As Double
Set serialToScalarTable = Range("A2:B4") '<--| table where you have serial/scalar correspondence
With Range("D19", Cells(Rows.count, 4).End(xlUp)).SpecialCells(xlCellTypeConstants, xlNumbers)
For iArea = 2 To .Areas.count Step 2
multiplier = Application.VLookup(.Areas(iArea - 1).Value, serialToScalarTable, 2, False)
For Each cell In .Areas(iArea)
cell.Value = cell.Value * multiplier
Next
Next
End With
End Sub