2013-07-09 2 views
1

У меня 2 поля в книге Excel:VBA: диапазон Excel всегда подходит как пустой?

1. МЕД - Диапазон ("J13: K13")

формулу: = ЕСЛИ (Д5 = 1, "X", "")

2. НЕ-МЕД - Диапазон ("L13: М13")

формула: = ЕСЛИ (Д5 = 2, "Х", "")

При использовании ниже код, поля всегда придумывают, как не пусто, тем самым экономя значение «1»:

'1. Med 
    If Not IsEmpty(range("J13:K13").value) Then 
     Worksheets("FeedSamples").range("AK" & newRow).value = 1 
    Else 
     Worksheets("FeedSamples").range("AK" & newRow).value = 0 
    End If 
    '2. Non-Med 
    If Not IsEmpty(range("L13:M13").value) Then 
     Worksheets("FeedSamples").range("AL" & newRow).value = 1 
    Else 
     Worksheets("FeedSamples").range("AL" & newRow).value = 0 
    End If 

Я попытался использовать следующее в моем IF заявление, но граф всегда ' 1 ':

'1. Med 
    If WorksheetFunction.CountA(range("J13:K13")) = 0 Then 

У кого-нибудь есть идеи? Если поле имеет значение «Х» для значения (или длины 1), тогда мне нужно сохранить «1» на другом листе. Если поле пусто (или количество длин 0), тогда мне нужно сохранить «0» на другом листе.

Я заблудился, почему мой чек на IsEmpty() работает неправильно.

ответ

5

Я не думаю, что вы можете использовать IsEmpty в диапазоне ячеек. Я могу реплицировать это поведение, всякий раз, когда я передаю диапазон из 2+ ячеек, функция IsEmpty возвращает False.

Попробуйте использовать If Application.WorksheetFunction.CountA(Range("J13:K13")) = 0

Это будет проверять на наличие любых значений в диапазоне, и возвращает значение 0 только тогда, когда все клетки не содержат значения (диапазон пуст), в противном случае он будет возвращать ненулевое значение, указывающее, что диапазон не пуст.

Редакция

Присутствие формулы в диапазоне, даже формула, которая возвращает нулевую строку ("") значение будет учитываться функцией COUNTA.

Вы можете быть в состоянии использовать функцию COUNTIF:

If Application.WorksheetFunction.CountIF(Range("J13:K13"),"") = Range("J13:K13").Cells.Count 

Это позволит избежать подсчета формул, возвращающих пустую строку.

Этот оператор оценивает True тогда и только тогда, когда все ячейки являются пустыми/пустыми строковыми значениями.

+0

Вы продолжаете избивать меня этими ответами – chancea

+0

@chancea Я должен вернуться к работе сейчас :) Я дам вам несколько! –

+0

Это странная вещь. Я проверил значения как «J13», так и «K13» по отдельности (вверху как пустое), но когда я запускаю «CountA (Range (« J13: K13 »)), значение всегда появляется как« 1 ». :/ –

Смежные вопросы