Возможно ли, чтобы VBA обнаружил, что столбец не имеет значения, и прекратил табулирование его%? - PullRequest
1 голос
/ 23 февраля 2012

Теперь я могу табулировать% после сопоставления значений из листа 1 с листом 2 с помощью Sid. Но сейчас я сталкиваюсь с этой проблемой,

Ниже приведено изображение проблемы, с которой я сталкиваюсь в настоящее время.

В Image1 это просто некоторые результаты теста, которые будут сведены в таблицу в%. enter image description here

После большой помощи я теперь могу составить ее таблицу, но если вы заметите после столбца H, результат будет продолжать табулировать, потому что я установил параметры до столбца Z. enter image description here

Я должен подготовиться к тестам с большим количеством столбцов, поэтому я установил значение для столбца Z. Мне интересно, возможно ли очистить все # DIV / 0! когда больше нет результатов?

Еще раз спасибо!

Продолжение: Мой код как ниже:

Sub Macro3()

Dim ws As Worksheet
Dim wsData As String
Dim SearchText As String, Excludetext As String
Dim LastRow As Long, i As Long, j As Long
Dim MyArray() As String
Dim boolContinue As Boolean

'start making Yield_summary into %
'~~> Add/Remove the text here which you want to ignore
Excludetext = "Split,Grade,Wafer,temp,Qty. In,Qty. Out,Bin1,Bin2,Bin3,Bin4,Bin5,Bin6"

'~~> Change this to the relevant sheetname which has the data
wsData = "Sheet1"

MyArray = Split(Excludetext, ",")

Set ws = Sheets("Sheet2")
LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row

'Set Column B into %
For i = 1 To LastRow
    boolContinue = True

    For j = 0 To UBound(MyArray)
        SearchText = MyArray(j)
        If ws.Range("A" & i).Value = SearchText Then
            boolContinue = False
            Exit For
        End If
    Next j

    If boolContinue = True Then
        With ws.Range("B" & i)
            .Formula = _
            "=OFFSET(INDIRECT(ADDRESS(INDEX(MATCH(A" & i & _
            "," & wsData & "!$A$1:$A$50,0),1,0),1,1,TRUE,""" & _
            wsData & """)),0,1)/" & wsData & "!B5"
            .NumberFormat = "0.00%"
        End With
    End If
Next i

'Set Column C into %
For i = 1 To LastRow
    boolContinue = True

    For j = 0 To UBound(MyArray)
        SearchText = MyArray(j)
        If ws.Range("A" & i).Value = SearchText Then
            boolContinue = False
            Exit For
        End If
    Next j

    If boolContinue = True Then
        With ws.Range("C" & i)
            .Formula = _
            "=OFFSET(INDIRECT(ADDRESS(INDEX(MATCH(A" & i & _
            "," & wsData & "!$A$1:$A$50,0),1,0),1,1,TRUE,""" & _
            wsData & """)),0,2)/" & wsData & "!C5"
            .NumberFormat = "0.00%"
        End With
    End If
Next i
End sub'

Ответы [ 2 ]

3 голосов
/ 23 февраля 2012

Я могу видеть из ответа Сида на ваш предыдущий вопрос, что вы помещаете формулу в свои клетки следующим образом:

    With Range("B" & i)
        .Formula = _
        "=OFFSET(INDIRECT(ADDRESS(INDEX(MATCH(A" & i & _
        ",$A$1:$A$45,0),1,0),1,1,1,'Duplicated_Sheet1')),0,1)/$B$5"
        .NumberFormat = "0.00%"
    End With

Вы можете проверить, вернула ли формула ошибку (например, #DIV/0!), и, если да, удалить формулу, поскольку она бесполезна:

    If IsError(Range("B" & i)) Then
        Range("B" & i).ClearContents
    End If
2 голосов
/ 23 февраля 2012

Вы можете проверить наличие ошибок с помощью функции iferror, если используете 2007 или 2010. Использование выглядит следующим образом:

=iferror(YourFunction,"")

Это вернет вашу функцию, если она не выдаст ошибку, и пустую строку, если это произойдет.

Если у вас есть Excel до 2007 года, вы можете сделать то же самое, но менее эффективно.

=if(iserror(YourFunction),"",YourFunction)

EDIT

Чтобы включить в ваш код, который просто пишет форум для вас, отредактируйте:

"=OFFSET(INDIRECT(ADDRESS(INDEX(MATCH(A" & i & _
            "," & wsData & "!$A$1:$A$50,0),1,0),1,1,TRUE,""" & _
            wsData & """)),0,1)/" & wsData & "!B5"

Быть

"=IFERROR(OFFSET(INDIRECT(ADDRESS(INDEX(MATCH(A" & i & _
            "," & wsData & "!$A$1:$A$50,0),1,0),1,1,TRUE,""" & _
            wsData & """)),0,1)/" & wsData & "!B5,"""""")"

С другой стороны, мне кажется, что гораздо проще использовать CHAR (34) для добавления двойной кавычки при написании формул.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...