Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如果ID为';s匹配在其他列中插入新行和总值_Excel_Insert_Spreadsheet_Subtotal_Vba - Fatal编程技术网

Excel 如果ID为';s匹配在其他列中插入新行和总值

Excel 如果ID为';s匹配在其他列中插入新行和总值,excel,insert,spreadsheet,subtotal,vba,Excel,Insert,Spreadsheet,Subtotal,Vba,我有一个电子表格,大约有19列,行的数量总是在变化。A列包含“商品ID”,N列包含“#已售出商品”,O列包含“#已售出商品”。我试图创建一个宏,每当a列中的“项目ID”发生变化时插入一行,并合计“#已售出项目数”和“#项目数”。如果可能的话,我还想将“Item ID”复制到这一新行中。如果有人能帮我,我将非常感激 更新:见下面电子表格示例的屏幕截图(我试图发布图像,但由于我是新手,我想我还没有这种访问权限) 电子表格现在的外观: 运行宏后我希望电子表格的外观: 数据是您的最佳选择► 小计。这是

我有一个电子表格,大约有19列,行的数量总是在变化。A列包含“商品ID”,N列包含“#已售出商品”,O列包含“#已售出商品”。我试图创建一个宏,每当a列中的“项目ID”发生变化时插入一行,并合计“#已售出项目数”和“#项目数”。如果可能的话,我还想将“Item ID”复制到这一新行中。如果有人能帮我,我将非常感激

更新:见下面电子表格示例的屏幕截图(我试图发布图像,但由于我是新手,我想我还没有这种访问权限)

电子表格现在的外观:

运行宏后我希望电子表格的外观:


数据是您的最佳选择► 小计。这是最省时的

之前:

1.小计在大纲组中:

2.详细信息:

之后:


ZygD,非常感谢您的帮助。我真的在寻找一个宏,因为这可能只是7个左右的宏之一,这些宏将被绑定到一个一键解决方案中,供没有时间/知识小计这些行的其他人使用

我想出了一个宏,将电子表格复制到临时工作表中。在该临时工作表中,每次ID更改时,它都会添加一个灰色行,并小计前面提到的两列。。。同时复制所有其他信息。然而,这导致Excel冻结了一段时间。。。因此,我让它删除除所需列之外的所有列,小计,并删除除灰色(小计)行之外的所有行。下面是我想到的宏(以防其他人也在寻找类似的宏):

小计()
我想我会坚持多久
模糊的行数等于长的行数
Dim j
应用
.ScreenUpdate=False
.EnableEvents=False
以
'将SellerTotals复制到SellerTotals(临时)
工作表(“卖方总额”)。选择
工作表(“卖方总计”)。之前复制:=工作表(“调整”)
工作表(“SellerTotals(2)”。选择
工作表(“SellerTotals(2)”)。Name=“SellerTotals(Temp)”
工作表(“SellerTotals(Temp)”)。激活
范围(“B:M,P:T”)。选择
选择。删除移位:=xlToLeft
'ID的数量
numberOfRows=单元格(Rows.Count,“A”).End(xlUp).Row
“先做最下面一排
单元格(numberOfRows+1,1).Value=单元格(numberOfRows,1).Value
单元格(numberOfRows+1,2)。公式1c1=“=SUMIF(R[-”&numberOfRows-1&“]C[-1]:R[-”&numberOfRows-(numberOfRows-1)和“]C[-1],”&Cells(numberOfRows,1)。值(“,R[-”&numberOfRows-1&“]C[0]:R[-”&numberOfRows-(numberOfRows-1)和“]C[0])”
单元格(numberOfRows+1,3)。公式1c1=“=SUMIF(R[-”&numberOfRows-1&“]C[-2]:R[-”&numberOfRows-(numberOfRows-1)和“]C[-2],”&Cells(numberOfRows,1)。值(“”),R[-”&numberOfRows-1&“]C[0]:R[-”&numberOfRows-(numberOfRows-1)和“]C[0])”
'转换为值
单元格(numberOfRows+1,2)。值=单元格(numberOfRows+1,2)。值
单元格(numberOfRows+1,3)。值=单元格(numberOfRows+1,3)。值
范围(单元格(numberOfRows+1,1),单元格(numberOfRows+1,3)).Interior.Color=RGB(192,192,192)
'在每组ID之间插入空行
'向后循环,因为我们正在插入行
对于i=第3步的行数-1
如果单元格(i,1).值单元格(i-1,1).值则
单元格(i,1).EntireRow.Insert xlShiftDown
'向下复制ID名称
单元格(i,1).Value=单元格(i-1,1).Value
'将公式放入总计和总计上限字段
单元格(i,2).公式1c1=“=SUMIF(R[-”&i-1&“]C[-1]:R[-”&i-(i-1)&]C[-1],“”“&Cells(i,1).Value&“”,R[-”&i-1&“]C[0]:R[-”&i-(i-1)&]C[0])”
单元格(i,3).公式1c1=“=SUMIF(R[-”&i-1&“]C[-2]:R[-”&i-(i-1)&]C[-2],“”“&Cells(i,1).Value&“”,R[-”&i-1&“]C[0]:R[-”&i-(i-1)&]C[0])”
'转换为值
单元格(i,2).值=单元格(i,2).值
单元格(i,3).值=单元格(i,3).值
范围(单元格(i,1),单元格(i,3)).Interior.Color=RGB(192,192,192)
如果结束
接下来我
'删除空行
对于j=范围(“A1”)。结束(xlDown)。第2行到第1步
如果单元格(j,1).Interior.Color RGB(192,192,192),则单元格(j,1).EntireRow.Delete
下一个j
端接头

1。您没有提到您正在处理的电子表格-它是Excel吗?2.您的数据是否格式化为实际的表对象?或者只是将值放入电子表格中并格式化,使其看起来像一个表,但没有创建真正的表对象?3.在标题中你提到了“列”,但不清楚你所说的4是什么意思。你到底想在哪里换一排?就在匹配的下面?在桌子的底部?在一张新的纸上?等等?1)这是Excel 2)数据只是电子表格中的值。。。格式为每行1条记录(无表格)3)电子表格包含不同的列。。。例如,列A将是一个项目ID(第1行类似于59575,第2行…59575,第3行…51738,等等)。4) 正如您所说,我希望每次列a中的值发生更改时都插入一行新行(例如,在我上次的回答中,由于项目ID发生更改,它将在第2行之后插入一行),再次感谢您的帮助回答是否有用?
Sub SubTotal()

Dim i As Long
Dim numberOfRows As Long
Dim j

With Application
    .ScreenUpdating = False
    .EnableEvents = False
End With

'Copies SellerTotals to SellerTotals(Temp)
Sheets("SellerTotals").Select
Sheets("SellerTotals").Copy Before:=Sheets("Pacing")
Sheets("SellerTotals (2)").Select
Sheets("SellerTotals (2)").Name = "SellerTotals(Temp)"
Worksheets("SellerTotals(Temp)").Activate

Range("B:M,P:T").Select
Selection.Delete Shift:=xlToLeft

' number of IDs
numberOfRows = Cells(Rows.Count, "A").End(xlUp).Row

' do bottom row first
Cells(numberOfRows + 1, 1).Value = Cells(numberOfRows, 1).Value
Cells(numberOfRows + 1, 2).FormulaR1C1 = "=SUMIF(R[-" & numberOfRows - 1 & "]C[-1]:R[-" & numberOfRows - (numberOfRows - 1) & "]C[-1],""" & Cells(numberOfRows, 1).Value & """,R[-" & numberOfRows - 1 & "]C[0]:R[-" & numberOfRows - (numberOfRows - 1) & "]C[0])"
Cells(numberOfRows + 1, 3).FormulaR1C1 = "=SUMIF(R[-" & numberOfRows - 1 & "]C[-2]:R[-" & numberOfRows - (numberOfRows - 1) & "]C[-2],""" & Cells(numberOfRows, 1).Value & """,R[-" & numberOfRows - 1 & "]C[0]:R[-" & numberOfRows - (numberOfRows - 1) & "]C[0])"

' convert to value
Cells(numberOfRows + 1, 2).Value = Cells(numberOfRows + 1, 2).Value
Cells(numberOfRows + 1, 3).Value = Cells(numberOfRows + 1, 3).Value

Range(Cells(numberOfRows + 1, 1), Cells(numberOfRows + 1, 3)).Interior.Color = RGB(192, 192, 192)

' insert blank row in between each group of IDs
' loop backwards because we are inserting rows
For i = numberOfRows To 3 Step -1
If Cells(i, 1).Value <> Cells(i - 1, 1).Value Then
  Cells(i, 1).EntireRow.Insert xlShiftDown

  ' copy ID name down
  Cells(i, 1).Value = Cells(i - 1, 1).Value

  ' put formula into Total & Total Cap field
  Cells(i, 2).FormulaR1C1 = "=SUMIF(R[-" & i - 1 & "]C[-1]:R[-" & i - (i - 1) & "]C[-1],""" & Cells(i, 1).Value & """,R[-" & i - 1 & "]C[0]:R[-" & i - (i - 1) & "]C[0])"
  Cells(i, 3).FormulaR1C1 = "=SUMIF(R[-" & i - 1 & "]C[-2]:R[-" & i - (i - 1) & "]C[-2],""" & Cells(i, 1).Value & """,R[-" & i - 1 & "]C[0]:R[-" & i - (i - 1) & "]C[0])"

  ' convert to value
  Cells(i, 2).Value = Cells(i, 2).Value
  Cells(i, 3).Value = Cells(i, 3).Value

  Range(Cells(i, 1), Cells(i, 3)).Interior.Color = RGB(192, 192, 192)

End If
Next i

  ' Delete Blank Rows

    For j = Range("A1").End(xlDown).Row To 2 Step -1
    If Cells(j, 1).Interior.Color <> RGB(192, 192, 192) Then Cells(j, 1).EntireRow.Delete

Next j

End Sub