2015-11-03 2 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 и скопируйте все ячейки ниже, до следующего «банкротства», часть и повторение. Изменить: это также можно сделать с помощью формулы, учитывая разные типы «Столбец А». Вы что-то пробовали? Если да, сообщите нам. – BruceWayne

ответ

0

Loop по строкам и исследовать то, что в колонке В.

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

Формула в А2 существа:

=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

Спасибо за ваш ответ. Может быть, я был очень груб из-за моего плохого английского, но я не это имел в виду. Я согласен с вами, но я действительно новичок в VBA, и мои коды для ознакомления не подлежат публикации! – AYJK

0

Я попробую еще раз, но без VBA. Определить имя, скажем, BOLD, как:

=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 
Смежные вопросы