2015-06-03 124 views
3

我的项目工作存在类似于下面描述的问题。Excel VBA合并/合并同名列

我的数据集是这样 enter image description here

我想是这样的(最后一栏) enter image description here

我有像“Is_paid”,“作业”同名的很多列。 我要的是创建一个新列“TOT”,它结合了所有这些“Is_Paid”,并在一个特殊的方式,如“招聘”,

  1. 将所有“Is_Paid”一栏为“Is_Paid_total”
  2. 将所有 “工作” 列到Job_total

  3. 和代码格式(不正确)

    Private Sub CommandButton1_Click() 
    
    Dim MyWorksheetLastColumn As Byte 
    
    MyWorksheetLastColumn = Worksheets(1).Cells(1, Columns.Count).End(xlToLeft).Column 
    Worksheets(1).Cells(1, MyWorksheetLastColumn + 1).Value = "Tot_Employment" 
    
    
    
    Dim rngTemp As Range 
    
    Set rngTemp=Cells.Find("*",SearchOrder:=xlByRows,SearchDirection:=xlPrevious) 
    
    With rngTemp 
    
    
    For Each cel In Range(Cells(1, 1), rngTemp) 
    
    '****************MERGING STEPS********************** 
    
    If cel.column(Is_Paid_total)="NonPaid" then 
    
    Tot=Is_Paid 
    
    else Tot=Job_total 
    

结束如果 未来切尔 尾随着 结束小组

步骤3将在for循环

我不知道如何合并/结合起来,得到Is_Paid_Total和Job_Total。 另外我知道我写的if语句是错误的。请帮我解决这个问题。

+0

为什么不循环遍历行寻找“nonpaid”并将其放在列中,否则查找第二个非空白,并将其放置在列中? – Raystafarian

+0

请问为什么需要使用VBA来完成这项工作? – chancea

+0

我尝试了所有的排列和组合。我想念一些东西。你能否以编码形式写作? –

回答

2

我想象有人可以给你一个更好的答案,但我能想到的最好的办法,以符合标准在最后的评论是设置数据了像这样的表:enter image description here

公式对于“总计”栏是:

=IF(OR([@[is_paid]]="NonPaid",[@[is_paid2]]="NonPaid",[@[is_paid3]]="NonPaid"),"NonPaid",[@Job]&[@Job2]&[@Job3])

+0

我可以使用vba获得这个吗? –

+0

不确定,希望别人能够评论或回答这个问题。 – Clif

2

我有一个不同的公式,但这个想法几乎是相同的:

你的最后一列应该有这个公式

IF(ISERROR(MATCH("NonPaid",$A2:$G2,0)),OFFSET(INDIRECT(ADDRESS(ROW($D2),MATCH("Paid",$A2:$G2,0))),0,1),"NonPaid") 

您需要调整以满足您的栏目,在我为例我的数据最后一栏为G,这样的公式是对列H.

我想你也可以通过使用它的VBA范围()。formula =“= ......” 然后使用所有范围的缩进