2015-11-03 71 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 
相關問題