在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