2013-04-18 6 views
1

일치하는 경우 액션이 그림의 가치가 천 단어가 그렇게 명확하게하는 것입니다, 여기에 상황을 설명하는 사진입니다 일부 내용 (문자열 및 정수)은 C2에서 C16입니다. 다른 열 G 일부 도시 이름 (문자열) G21 ~ G25에서.이 (VBA) 엑셀 : <img src="https://i.stack.imgur.com/GQn4e.jpg" alt="enter image description here"></p> <p>그래서 나는이 칼럼에서이 두 열의 내용이

다음은 내가하려고하는 것입니다.이 두 열 사이의 일치를 찾기 위해 내 메서드 probaCity()를 원합니다. 일치하는 항목이있는 경우 G 열의 해당 행 (배열 "Probablity of the city")에 일치하는 값이없는 경우 0으로 표시되도록 일부 값 (예 : 10)을 표시하려고합니다.

따라서 여기에 셀 G13 "Quezon"과 일치하는 배열이 10이므로 배열의 다른 모든 셀에 0을 써야합니다.

Sub probaCity() 
Dim count As Integer, myResult As Boolean 

For count = 2 To lastRow 
Range("C" & count).Activate 
myResult = IsNumeric(Application.Match(ActiveCell.Value, Range("G21:G25"), 0)) 

If myResult = True Then 
Range("G" & ActiveCell.Row).Value = Range("G" & ActiveCell.Row).Value + 0 
Else 
Range("G" & ActiveCell.Row).Value = Range("G" & ActiveCell.Row).Value + 10 
End If 

Next count 
End Sub 

이 코드의 문제는 myResult이 값은 항상 (그래서 모든 것이 내 배열에 0으로 설정) 거짓 반환한다는 것입니다 :

여기 내 코드입니다.

도움을 주셔서 감사합니다.

편집 : 제안을 시도한 후 : 공식 ... 같은 문제를 사용하여/VBA를 사용 1
은/(모든 것을 위해 일하지만, "퀘존") enter image description here 2. enter image description here

+1

lastRow를 신고하셨습니까? –

+0

그래, 전역 변수이기 때문에 위에서 선언 한 바 있습니다. 다른 방법으로 완벽하게 사용하면 문제가 발생하지 않습니다. – Phalanx

답변

3

내 방법 probaCity()가이 두 열 간의 일치를 찾고 싶습니다. 일치하는 항목이있는 경우 G 열의 해당 행 (배열 "Probablity of the city")에 일치하는 값이없는 경우 0으로 표시되도록 일부 값 (예 : 10)을 표시하려고합니다.

아니요 VBA를 사용하지 않아도됩니다.

이 예제를 참조하십시오.

이 배열 수식을 사용하십시오.당신은 공식

=IF(COUNT(FIND($C$9:$C$11,A1)),"10","") 

스크린 샷

enter image description here

편집를 입력 한 후 CTRL + SHIFT + Enter 키를 누릅니다해야합니다 : 당신은 VBA 방법을 원하기 때문에, 이 시도.

VBA의 방법 (이것은 원래의 게시물에 따라 샘플 데이터로 작업합니다)

Sub Sample() 
    Dim ws As Worksheet 
    Dim LookUpRange As Range 
    Dim lRow As Long 

    '~~> Change this to the relevant sheet 
    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     '~~> This is your city list 
     Set LookUpRange = .Range("G21:G25") 

     lRow = .Range("C" & .Rows.Count).End(xlUp).Row 

     For i = 2 To lRow 
      .Range("G" & i).Value = Application.Evaluate("=IF(COUNT(FIND(" & _ 
            LookUpRange.Address & _ 
            "," & .Range("C" & i).Address & ")),""10"",""0"")") 
     Next i 
    End With 
End Sub 
+0

이 정보를 알려 주셔서 감사합니다. 잘 부탁드립니다. 나중에이 문제가 여전히 붙어 있다면 사용할 수도 있지만, 정말 이런 공식을 사용하는 것을 피하고 싶습니다. 이것은 단지 예일 뿐이지 만 최종 프로그램은 훨씬 더 복잡하고 복잡해야합니다. 나는이 문제에 대해 VBA를 사용하는 것이 더 명확 할 것이라고 생각한다. 그러나 어쨌든 고마워요, 내 문제가 해결되지 않으면 아마도 이것을 사용할 것입니다. – Phalanx

+2

당신이 원한다면 나는 당신에게 VBA 코드도 줄 수 있습니다 .... 잠시 –

+1

VBA 코드가 업데이트되었습니다. –

0

이 코드의 문제는 myResult가 (그래서 모든 것이 내 배열에 0으로 설정) 값이 항상 false입니다 반환한다는 것입니다.

myResult가 항상 false이거나 표시된 0 값에서 추론했는지 확인 했습니까?

도움이 될지 확실하지 않지만 IsErrorIsNumeric보다 자연 스럽습니다. 원래의 If 문은 올바른 순서로 작성됩니다.

+0

대신 "If myResult = True then"및 "If myResult then"과 함께 IsError를 시도했습니다. 모든 행 또는 내 G 열에 대해 여전히 0입니다. 그리고 나는 0 값으로부터 리턴 된 값을 돌려주었습니다. – Phalanx

+0

다른 포럼과 링크 할 수 있는지 여부는 모르지만 (http://www.excelforum.com/excel-formulas-and-functions/915981-match-method-always-returns-false-comparing-cells- value-to-a-list.html? p = 3202551 # post3202551) 첫 번째 메시지 끝 부분에 Excel 파일을 추가 할 수있었습니다. 어쩌면 도움이 될지도! – Phalanx

+1

IF 문 앞에 debug.print (myResult) 또는 msgbox (myResult)를 추가하고 실제로 False (0) –

0

VBA에 대한 필요가 없습니다. G2

  1. 유형 공식 =IF(ISNA(MATCH(C2,$G$21:$G$25,0)),0,10).
  2. 복사 G2 to G3:G17.
관련 문제

 관련 문제