我有.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的权重填充空格,可以通过向下滚动找到。数据非常巨大所以我必须找到一个快速的方法。
答案 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