Возвращая # ЗНАЧЕНИЕ! цикл предназначен для сравнения значений в списке через запятую? - PullRequest
0 голосов
/ 27 июня 2019

Я сравниваю разделенный запятыми список, чтобы увидеть, соответствует ли какое-либо из значений одному значению. Я считаю, что проблема возникает с этой строкой кода:

If INDEXLIST(damageListCell, ",", n) = CStr(Range(damageTypeCell).Value) Then

INDEXLIST - это функция, которая возвращает строку строку, которая является концом от начала списка, разделенного запятыми. Этот список находится по адресу damageListCell, который является строкой, которая ссылается на блок в Excel.

damageTypeCell - это аргумент, который передается в эту функцию в виде строки и является идеей блока в Excel, например, "D5".

Я не думаю, что CStr(Range(damageTypeCell).Value) возвращает строку данных и соответствующую ячейку, и поэтому выражение просто не работает.

Я пробовал все способы, которыми могу придумать, чтобы передать эту продажу, и в качестве строки это включает: CStr(Range(damageTypeCell).Value) Range(damageTypeCell) Range(damageTypeCell).Value

For i = 1 To list_langth
    n = n + 1
    If INDEXLIST(damageListCell, ",", n) = CStr(Range(damageTypeCell).Value) Then
    Damage_Fill = 1
        Exit For
    Else
        Damage_Fill = 0
    End If
Next i

End Function

Function INDEXLIST(strList As String, strSeparator As String, lngIndex As 
Long) As String
'Syntax
'=INDEXLIST(List,Separator,Index)

Dim ListArray() As String

ListArray() = Split(strList, strSeparator)

INDEXLIST = ListArray(lngIndex - 1)

    End Function

Public Function CountChrInString(Expression As String, Character As String) As Long
'
' ? CountChrInString("a/b/c", "/")
'  2
' ? CountChrInString("a/b/c", "\")
'  0
' ? CountChrInString("//////", "/")
'  6
' ? CountChrInString(" a / b / c ", "/")
'  2
' ? CountChrInString("a/b/c", " / ")
'  0
'
    Dim iResult As Long
    Dim sParts() As String

    sParts = Split(Expression, Character)

    iResult = UBound(sParts, 1)

    If (iResult = -1) Then
    iResult = 0
    End If

    CountChrInString = iResult

End Function

Excel возвращает # ЗНАЧЕНИЕ! Однако, когда эта функция запускается, она должна возвращать 1 или 0.

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

lngIndex As Long изменено на lngIndex As Integer в функции INDEXLIST.

If INDEXLIST(damageListCell, ",", n) = CStr(Range(damageTypeCell).Value) Then изменено на If INDEXLIST(damageListCell, ",", i) = INDEXLIST(damageTypeCell, ",", 1) Then и полностью удалить переменную n

0 голосов
/ 27 июня 2019

В функции INDEXLIST измените

ListArray() = Split(strList, strSeparator)

на

ListArray() = Split(Range(strList), strSeparator)

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