在Excel中填充空白单元格
我有.csv数据像
ID | Weight A | 10 B | C | 30 D | 40 C | A | B | 20
我想从ID
这样的填充相应的Weight
值
ID | Weight A | 10 B | 20 C | 30 D | 40 C | 30 A | 10 B | 20
我的数据非常庞大,有人可以帮我做吗?
下面是我的原始数据的快照,左边是身份证,右边是权重,我想通过向下滚动可以find相应的ID的权重来填充空格。 数据是非常巨大的,所以我要find一个快速的方法。
假设所有的唯一ID至less有一个权重,填写剩下的就可以使用下面的macros。
请阅读macros中的注释以帮助理解它是如何工作的。
我们首先列出所有具有权重的唯一ID。 然后,我们使用该列表来填充没有权重的ID。
由于“工作”是在VBAarrays内完成的, 并且使用Dictionary对象完成查找,即使在大型数据库上,它也应该运行得非常快。
原始数据的排列方式也不会有什么不同。
在代码中,我假设你的数据在A和B列的Sheet1上。如果不是这种情况,你将需要改变那部分代码。
Option Explicit Sub Weights() Dim Dict As Object Dim V As Variant Dim WS As Worksheet Dim R As Range Dim I As Long Set Dict = CreateObject("scripting.dictionary") Set WS = Worksheets("sheet1") 'set to the sheet with the data With WS Set R = .Range(.Cells(1, 1), .Cells(.Rows.Count, "A").End(xlUp)).Resize(columnsize:=2) End With 'Read the original data into VBA array V = R 'Collect the unique ID's into a dictionary ' if and only if they are associated with a weight 'Key = ID; Value = Weight For I = 2 To UBound(V, 1) If Not Dict.Exists(V(I, 1)) And _ V(I, 2) <> "" Then _ Dict.Add Key:=V(I, 1), Item:=V(I, 2) Next I 'Fill in the blanks For I = 2 To UBound(V, 1) If V(I, 2) = "" Then V(I, 2) = Dict(V(I, 1)) Next I 'Write the results back to the worksheet R = V End Sub
如果你的字面意思只是想让体重反映ID#* 10,那么你可以去权重下的第一个单元格,在公式标签中input= A2 * 10(在下面我提供的例子中)。 然后申请所有的数据,只需抓住单元格左边的小盒子,把公式放进去,把它拖到所有你想要应用公式的单元格中!
希望这可以帮助!
Excel的基本公式示例
PS
如果重量不是ID * 10那就好了,只要放上你想要的重量的方程式,你就可以按照相同的过程。
希望我不会误解这一点。 空白单元格的ID出现在列的较早部分,并且您想要使用与之前单元格中的ID相对应的权重填充空白单元格。
“重量”栏中有空白单元格。 对于“权重”列中的单元格,在“ID”列中具有与其相对应的ID。 您想要在“权重”列中find空白单元格,检查它的ID,并在列中查找ID的外观,然后从中检索权重值。
这个macros使用一个公式来填充列B中的所有空白单元格,该公式search相应ID的较早出现,然后检索权重。
Sub KavanWeightID() On Error Resume Next Columns("B").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=INDIRECT(""B""&MATCH(RC[-1],C[-1],0))" End Sub