如何根据标题中的文本复制和处理列中的数据,但标题不在第一行

时间:2016-12-23 09:13:43

标签: excel excel-vba vba

我是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**

怎么做?

1 个答案:

答案 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