【发布时间】:2020-07-14 04:10:42
【问题描述】:
我有一张如下图所示的 excel 表格:
我需要:
将每个职位的金额和成本相加(全部为 1,全部为 2,全部为 3,...)。
然后在 Actual 中查找“X”,然后合并该行上 Position 值相等的所有行,因此这应该是最后该位置的前导行和唯一剩余行。但它不应该在同一张纸上,而应该在一张新纸上。基本上,在这个例子中,会有第二张三行的工作表(因为这个例子中有 3 个位置)
它需要是动态的。这里可以有任意数量的职位
每个职位都应采用实际职位中带 X 的职位的描述、日期等。
还有更多的列和更多的计算需要做,所以添加计算条件应该很容易。
我不是 Excel Pro,我认为不编写 Makro 就无法解决这个问题,所以请随时证明我错了...
到目前为止,我根据我在网上找到的一些 sn-ps 编写了以下 VBA 代码,但不幸的是,我只能将特定行(具有相同的位置编号)相加并输出带有“x”的位置的总和实际:
Sub MergeRows()
Dim r_src As Range, r_dst As Range
' Pick 1st row and column of table
Set r_src = Sheets("Sheet1").Range("A2")
Set r_dst = Sheets("Sheet2").Range("A2")
Dim i As Integer, j As Integer
Dim N_rows As Integer, N_cols As Integer
'Find the size of the data
N_rows = CountRows(r_src)
N_cols = CountColumns(r_src)
'Resize source range to entire table
Set r_src = r_src.Resize(N_rows, N_cols)
Dim src_vals() As Variant, dst_vals() As Variant
'Get all the values from source
src_vals = r_src.Value2
ReDim dst_vals(1 To N_rows, 1 To N_cols)
Dim k As Integer
Dim x As Integer
k = 0
For i = 1 To N_rows
For x = 1 To 10
' Check first column
If Val(src_vals(i, 1)) = x Then
' Increment count
k = k + 1
' Copy row values
Dim qty As Integer
qty = qty + src_vals(i, 27)
src_vals(i, 27) = qty
For j = 1 To N_cols
If src_vals(i, 2) = "X" Then
dst_vals(k, j) = src_vals(i, j)
End If
Next j
End If
Next x
qty = 0
Next i
' Bring rows back into destination range
If k > 0 Then
r_dst.Resize(k, N_cols).Value2 = dst_vals
End If
End Sub
Public Function CountRows(ByRef r As Range) As Integer
CountRows = r.Worksheet.Range(r, r.End(xlDown)).Rows.Count
End Function
Public Function CountColumns(ByRef r As Range) As Integer
CountColumns = r.Worksheet.Range("A:DS").Columns.Count
End Function
【问题讨论】:
-
您能否创建与您想要的结果相同的屏幕截图?这将有助于了解究竟是什么分组/总和。 • 您是否尝试过使用数据透视表来生成您所期望的结果?
-
如果我对您的理解正确,您希望将标记为实际的每一行(根据每个位置只有一个)复制到另一个工作表,并总结所有 成本 和 Amount 值对应的位置是你复制的?
-
@Bryan,您打算向回答者提供反馈吗?
-
@HTH 你着急吗? 7小时前他才问。在有人回答之前,并非每个人都按 F5 键。通常我会写一个问题并在一天左右回来。
-
@Pᴇʜ,我不容忍那些不在乎谁帮助他们的人。你可以自己检查一下,他最近两个小时前回来了,但没有任何反馈,甚至没有“谢谢,我会去看看......”。而且我觉得我可以问任何我想问的问题,遵守规则
标签: excel vba loops for-loop datatables