所以这就是我正在使用的概念。
我的Sheet1上有许多键和值:
然后在sheet2上,我一直在使用SUMIF函数来计算sheet1的总值:
这只是一个例子,实际的数据集要大得多。我需要设计一个宏,它将自动生成并将SUMIF公式插入到sheet2中的正确单元格中。谁能想到办法做到这一点?
答案 0 :(得分:2)
即使不知道任何其他要求或您正在做什么,或者有多少列或按键,您也可以:
如果有100多列,那么它是单调乏味的,你需要一个宏来循环它,但我不知道你有什么/需要。
答案 1 :(得分:1)
这是一个解决方案。
With [sheet1!a1:index(sheet1!a:a,count(sheet1!a:a))]
[b1:index(sheet2!b:b,count(sheet2!a:a))].Offset(1).Formula = _
"=sumif(sheet1!" & .Offset(1).Address & ",a2,sheet1!" & .Offset(1, 1).Address & ")"
End With
这假设sheet2上的A列已经就位。同样,它假设sheet2上B列的Header已经就位,B列的其余部分为空白,将由上面的代码填充。
它也假设数字键。
如果任何假设错误,可以轻松调整此解决方案。请告诉我。
答案 2 :(得分:0)
我会从第一张纸上读取数据,然后构建第二张纸。您需要为adodb记录集添加引用。在工具下拉菜单的VBA IDE中选择引用。选择“Microsoft ActiveX Data Objects 2.8 Library”。
Private Sub CommandButton10_Click()
Dim rs As New ADODB.Recordset
Dim ws As Excel.Worksheet
Dim lRow As Long
Dim lLastRowSheet1 As Long
Set ws = ActiveWorkbook.Sheets("Sheet1")
'Add fields to your recordset for storing data.
With rs
.Fields.Append "Row", adInteger
.Fields.Append "Key", adInteger
.Fields.Append "Val", adInteger
.Open
End With
lLastRowSheet1 = ws.UsedRange.Rows.count
lRow = 1
'Loop through and record what is in the columns
Do While lRow <= ws.UsedRange.Rows.count
rs.AddNew
rs.Fields("Row").Value = lRow
rs.Fields("Key").Value = ws.Range("A" & lRow).Value
rs.Fields("Val").Value = ws.Range("B" & lRow).Value
rs.Update
lRow = lRow + 1
ws.Range("A" & lRow).Activate
Loop
If rs.EOF = False Then
rs.MoveFirst
End If
'Switch to the second worksheet
Set ws = Nothing
Set ws = ActiveWorkbook.Sheets("Sheet2")
'Now go through the data from sheet one and build the list of keys
Dim iLastKey As Integer
lRow = 1
Do While rs.EOF = False
'For each unique key add a row to the second sheet.
If rs.Fields("Key").Value <> iLastKey Then
ws.Range("A" & lRow).Value = rs.Fields("Key").Value
ws.Range("B" & lRow).Formula = "=sumif(sheet1!$A$2:$A$" & lLastRowSheet1 & ",A" & lRow & ",Sheet1!$B$2:$B$" & lLastRowSheet1 & ")"
lRow = lRow + 1
End If
iLastKey = rs.Fields("Key").Value
rs.MoveNext
Loop
End Sub
答案 3 :(得分:0)
这是我最后使用的:
UPDATE F
SET F.ExtractedId = E.Id
FROM Feature as F
INNER JOIN ExtractedFeature as E
ON F.ExtractedId = E.Number
问题是它真的很慢,有没有人知道如何更快地运行?欢呼声