在Excel中填充空白单元格

时间:2017-03-27 04:15:57

标签: excel excel-vba vba

我有.csv数据,如

 ID | Weight
  A | 10 
  B |
  C | 30
  D | 40
  C | 
  A | 
  B | 20

我想填写Weight ID的相应值

 ID | Weight
  A | 10 
  B | 20
  C | 30
  D | 40
  C | 30
  A | 10
  B | 20

我的数据非常庞大,有人可以帮我做一下吗?

下面是我原始数据的快照,左边是ID,右边是权重,我想用相应ID的权重填充空格,可以通过向下滚动找到。数据非常巨大所以我必须找到一个快速的方法。

enter image description here

3 个答案:

答案 0 :(得分:2)

假设所有唯一ID至少有一个权重,要填写其余的ID,您可以使用以下宏。

请阅读宏中的注释,以帮助了解其工作原理。

我们首先列出所有具有权重的唯一ID。然后我们使用该列表填充没有权重的ID。

因为“工作”是在VBA数组中完成的;并且查找是使用Dictionary对象完成的,它应该运行得非常快,即使在大型数据库上也是如此。

原始数据的订购方式没有任何区别。

在代码中,我假设你的数据在Sheet A的A列和A列中。 B.如果不是这种情况,则需要更改代码的那一部分。

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

答案 1 :(得分:0)

如果您真的只想让体重反映出ID#* 10,您可以转到重量下的第一个细胞,并在公式标签中输入= A2 * 10(在下面提供的示例中) 。然后要应用于所有数据,只需抓住放置公式的单元格左下角的小方框,然后将其向下拖动到要应用公式的所有单元格中!

希望这有帮助!

Example of basic formula for excel

P.S。

如果重量不是ID * 10那么可以放置你想要的重量等式,你可以按照相同的过程。

答案 2 :(得分:0)

希望我不要误解这一点。空白单元格的ID出现在列的前面,并且您希望使用与先前单元格中的ID对应的权重填充空白单元格。

&#34;重量&#34;中有空白单元格。柱。对于&#34;重量&#34;中的细胞列,它在&#34; ID&#34;中具有与其对应的ID。柱。你想找到&#34; Weight&#34;中的空白单元格。列,检查它的ID,并查找列中较早出现的ID,然后从中检索权重值。

此宏用一个公式填充B列中的所有空白单元格,该公式搜索相应ID的早期外观,然后检索权重。

Sub KavanWeightID()

    On Error Resume Next

    Columns("B").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=INDIRECT(""B""&MATCH(RC[-1],C[-1],0))"

End Sub