我是Excel新手并被告知我可以在VBA中找到解决方案。 我正在处理一个系统生成的报告,我需要从中删除几列,但报告中包含前25行中的一些重要信息。在此信息之后,我们获得15到40行实际报告数据(行数因中心而异) 我需要通过删除空白列,按A到Z排序,然后在最后一列中插入'Average'来处理这些实际数据。 目前,我正在复制实际的报告数据,减少不必要的列,进行必要的更改,在上个月的报告中应用VLOOKUP来验证开放和结束计数是否匹配(它们几乎总是这样,但为什么要冒险?)然后粘贴在同一个位置。可以使用VBA完成吗?
报告格式
> For the period 01-11-2011 to 30-11-2011
> *Parameter Selection List
>From 01-11-2011
>Date 30-11-2011
> Partner SAM
>Code TWO
>Location 999
>Report For All
>Code : TWO
>Location : ABC
Product Name |LastCount|AddedInPeriod |Left In The Period |Net Total | Average
SUPER GLUE |123456 |0 | 0 | 234567 |
CRICKET BAT |345678 |0 | 0 | 346899 |
NICON |2345 |0 | 0 | 2456 |
OLD STICKS |45689 |0 | 0 | 56778 |
Total |517168 |0 | 0 | 640700 |
产品名称位于B列,C列为空白,最后计数位于D列,标题 AddedInPeriod 列于D列和F但数据在列F中,与在期间中的左侧相同(标题合并在列G和H中,但数据在列H中),列I为空,净总计在J中,Col K为空白,平均值在Col L中 标题下面的数据产品名称,最后计数和净总数是必要的,应该删除范围的其余部分。 (请注意,合并的单元格很少) 最终报告应如下所示
For the period 01-11-2011 to 30-11-2011
*Parameter Selection List
From 01-11-2011
Date 30-11-2011
Partner SAM
Code TWO
Location 999
Report For All
Code :TWO
Location : ABC
Product Name|Last Count |Net Total|Average
CRICKET BAT |345678 |346899 |346288.5
NICON |2345 |2456 |2400.5
OLD STICKS |45689 |56778 |51233.5
SUPER GLUE |123456 |234567 |179011.5
**Total |517168 |640700 |578934**
怎么做?
答案 0 :(得分:0)
这是一个函数,它将使用您建议的标题获取列的字母。
Function Letter(oSheet As Worksheet, name As String, Optional num As Integer)
If num = 0 Then num = 1
Letter = Application.Match(name, oSheet.rows(num), 0)
Letter = Split(Cells(, Letter).Address, "$")(1)
End Function
只需创建一个新变量,然后将标题传递给函数,即
newvar = letter(sheet(" Sheets1")," SUPER GLUE",4)
其中4是,你指的是可以找到标题的行,在这个例子中我放了第4行。一旦你有了这封信,那就用
Sheets("Sheet2").Range(newvar & "4:" & newvar & Range("A1").End(xlDown).Row).Copy Destination:=Sheets("Sheet2").Range("A1")
这将获取特定列的信息以及列标题,并将其粘贴到sheet2 A1
中