2015-11-03 19 views
2

我有一个电子表格,每天更新一个公司在不同破产州(**text**)的列表。这些状态可能会有所不同,可以添加新的状态。从列中选择状态以填充另一列

什么宏观要做的是填补column A与公司目前的破产状态,且从column B删除。一个例子,前:

column A column B 
      **Bankruptcy Required** 
      Company 1 
      Company 2 
      Company 3 
      **Bankruptcy Decreed** 
      Company 4 
      Company 5 
      **Extinct Bankruptcy Process** 
      Company 6 
      **Required Reorganization** 
      Company 9 
      Company 10 
      Company 11 
      **Judicial Recovery Upheld** 
      Company 12 
      Company 14 
      Company 15 
      Company 16 

后:

column A       column B 
Bankruptcy Required    Company 1 
Bankruptcy Required    Company 2 
Bankruptcy Required    Company 3 
Bankruptcy Decreed    Company 4 
Bankruptcy Decreed    Company 5 
Extinct Bankruptcy Process  Company 6 
Required Reorganization   Company 9 
Required Reorganization   Company 10 
Required Reorganization   Company 11 
Judicial Recovery Upheld   Company 12 
Judicial Recovery Upheld   Company 14 
Judicial Recovery Upheld   Company 15 
Judicial Recovery Upheld   Company 16 

任何想法?

+0

在你的文档中,它会字面上说'**破产需要**'等?还是有一个技术标记记录下来?当它发现一些文本(“**破产”或“**司法”)时,想法是遍历B列中的每个单元格,将其放在A列中,并复制下面的所有单元格,直到下一个“破产”部分和重复。编辑:这也可以用公式来完成,因为“列A”部分的不同类型。你有尝试过什么吗?如果是这样,请告诉我们。 – BruceWayne

回答

0

遍历行和检查什么是在列B

Private Sub FixData() 
    Dim ws As Excel.Worksheet 
    Set ws = ActiveWorkbook.Sheets("Sheet2") 
    Dim lastRow As Long 
    Dim szStatus As String 
    Dim lrow As Long 
    lrow = 1 

    lastRow = ws.Cells(ws.Rows.count, "B").End(xlUp).Row 

    'Loop through the rows 
    Do While lrow <= lastRow 
     'Check if the value in column B is bold 
     If ws.Range("B" & lrow).Font.Bold = True Then 
      'Get the value 
      szStatus = Trim(ws.Range("B" & lrow).Value) 
      'Delete that row 
      ws.Rows(lrow).EntireRow.Delete 
     Else 
      'If it does not have ** in it we get to here 
      If ws.Range("B" & lrow).Value <> "" Then 
       'Write the status we got from the line we deleted into column A. 
       ws.Range("A" & lrow).Value = szStatus 
      End If 
      lrow = lrow + 1 
     End If 
    Loop 

End Sub 
+0

关闭@MatthewD!但是**只是表示该行中的文本是粗体的。字符*不在那里。任何想法如何做,你没有检查粗体文字的线? – AYJK

+0

当然@AYJK我相信它是Range()。Font.Bold = True。我会对答案做出改变,以便你可以尝试,但直到明天我才能测试它。 – MatthewD

+0

非常感谢@MatthewD!它的作品非常完美。有什么“竖起大拇指”,我可以做你的答案? – AYJK

0

可能的,而不VBA,例如通过加入一个额外的列:

SO33508293 example

在A2之中的公式:

=IFERROR(SEARCH("Bankruptcy",C2),IFERROR(SEARCH("Required",C2),IFERROR(SEARCH("Judicial",C2),))) 

和B2:

=IF(A2>0,C2,B1) 

如果式被转换为从公式然后不启动0行得到的值可被该辅助柱(A)也被删除,然后。

+0

正如我所说,“这些地位可能会有所不同,并且可能会增加新的”,所以它应该是灵活的,我的意思是,不限于“破产”,“需要”和“司法”。 – AYJK

+0

@AYJK是的,我看过的OP - 只是赌博不会有* *是更多的(即不包括任何这三个方面的!),并且您可以添加“奇一或两个”,因为他们出现了。所以我认为你真的要求代码(检测并采取粗体字体),但还没有发布任何内容 - 所以在这里没有真正关注主题,并有风险降低投票和收到投票。 – pnuts

+0

谢谢你的回应pnuts。也许我因为我的英语不好而感到粗鲁,但我不是故意的。我同意你的看法,但是我真的是VBA的新手,我的知道代码是不可显示的! – AYJK

0

我会再试一次,仍然没有VBA。定义一个名字,说大胆,如:

=GET.CELL(20,OFFSET(INDIRECT("RC2",FALSE),0,1)) 

然后在A2输入(添加列,因为我的其他答案):

=BOLD 

和变化B2公式:

=IF(A2,C2,B1) 

然后像以前一样继续,但删除TRUE行,而不是非0

0

也许这可以帮到你。

Sub CleanAndTransfer2() 
    Dim ws As Excel.Worksheet 
    Set ws = ActiveWorkbook.Sheets("Sheet1") 
    Dim bankruptcy As String 
    ws.Activate 
    Dim i As Integer 
    i = 2 
    Do Until IsEmpty(Cells(i, 2)) 
     If Cells(i, 2).Font.Bold = True Then 
      bankruptcy = Cells(i, 2) 
      Rows(i).EntireRow.Delete 
     End If 
     Cells(i, 1) = bankruptcy 
     i = i + 1 
    Loop 
End Sub