2017-11-15 2 views
0

나는 한 스프레드 시트 (데이터)에서 다른 스프레드 시트 (Sheet1)의 값을 검색하기 위해 매크로를 작성한 후, Sheet1에서 결과가 발견 된 셀의 2 열에서 왼쪽 값. 그것은 훌륭하게 작동했지만 무언가가 변경된 것 같습니다 (???). 두 스프레드 시트에 값이 존재 함에도 불구하고 모든 "거짓"결과를 반환합니다.이전에 작동했던 Iferror/Index/Match 수식이 이제 대상 시트에있는 값에도 불구하고 모든 False 결과를 반환합니다.

그것은 내가 어떤 테스트를 위해 문제의 스프레드 시트를 제공 할 수

(항상 Sheet1의라는) 두 번째 시트의 첫 번째 워크 시트에 열 C의 값을 검색합니다. 내 주석이 코드는 다음과 같습니다, 어떤 도움을 크게 감상 할 수있다 : 코드에

Sub GroupFileNameFix() 
' 
' GroupFileNameFix Macro 

'define variable types 
Dim strFormula As Variant 
Dim LastRow As Long 

'on Data sheet 
With ActiveSheet 
' determines last row on spreadsheet and saves value to variable "LastRow" 
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
    'sets variable "strFormula" as what we want to autofill, grabbing group filenames 
strFormula = "=IFERROR(INDEX(Sheet1!RC[-3],(MATCH(RC[1],Sheet1!C[-1],0))),""False"")" 
'inserts column "GroupFileName" as column D 
Columns("D:D").Select 
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
Range("D1").Select 
ActiveCell.FormulaR1C1 = "GroupFileName" 
Columns("D:D").EntireColumn.AutoFit 
' Fills cell D2 and then autofills column D to end of spreadsheet 
Range("D2:D2").Select 
.Range("D2:D2").Formula = strFormula 
.Range("D2:D" & LastRow).FillDown 
End With 
'Commit formula to text and replace "png" with "jpg" 
Columns("D:D").Select 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Selection.Replace What:="png", Replacement:="jpg", LookAt:=xlPart, _ 
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
    ReplaceFormat:=False 

End Sub 
+1

그래서이 모든 코드에 대한 어떤 "IFERROR (INDEX (Sheet1! RC [-3], MATCH (RC [1], Sheet1! C [-1], 0))),"False ")'FALSE를 반환하는 이유는 무엇입니까? " ... Excel에서 함수를 평가하려고하면'Index/Match'가 오류를 던지고 있습니다. FWIW 나는 R1C1 표기법을 피할 것이다. –

+1

"두 번째 시트 (항상 Sheet1이라고 함)의 첫 번째 워크 시트에서 C 열의 값을 검색합니다". 잘못된 코드를 읽지 않는 한,'MATCH (RC [1], Sheet1! C [-1], 0)'은 현재 시트의 E 열의 값과 Sheet1의 C 열의 값을 일치 시키려고합니다 . 그게 당신 문장이 말하는거야? – YowE3K

+0

직접 전화를 걸 수있는 범위를 선택하는 이유는 무엇입니까? 또는 셀 수식을 문자열과 동일하게 만드시겠습니까? 범위 ("D1") 선택 ActiveCell.FormulaR1C1 = "GroupFileName" 범위 ("D1")이어야합니다. 값 = "GroupFileName" – mooseman

답변

0

을 바탕으로, 당신은 항상 같은 열에 공식을두고 있기 때문에,이 날 위해 일했습니다.

With ActiveSheet 
strFormula = "=IFERROR(INDEX(Sheet1!A2,(MATCH(E2,Sheet1!C:C,0))),""False"")" 
'inserts column "GroupFileName" as column D 
Columns("D:D").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
Range("D1").Value = "GroupFileName" 
Columns("D:D").EntireColumn.AutoFit 
' Fills cell D2 and then autofills column D to end of spreadsheet 
.Range("D2").Formula = strFormula 
.Range("D2:D" & LastRow).FillDown 
End With 
+0

나는 이것을 수식으로 옮겨서 더 간단한 시작점에서 거꾸로 작업하기로 결정했습니다. 이것은 말도 안되게 간단한 질문입니다.하지만이 수식을 통해 발견 된 결과의 왼쪽에있는 두 개의 열을 참조하는 방법을 알 수는 없습니다. 아래 수식에서 결과 위에 2 행의 값이 반환됩니다. 이 상황에서 "-2"는 위의 두 행을 의미하지만이 수식의 왼쪽에있는 두 개의 열에 대한 구문은 무엇이겠습니까? = IFERROR (INDEX (Sheet1! C $ 2 : C $ 2000, MATCH ($ C2, Sheet1! C $ 2 : C $ 2000,0)) - 2), "False") –

0

와우, 이것으로 끝내기가 훨씬 쉬워졌습니다. 간단한 붙여 넣기 공식 & 자동 채우기 워크 플로가 아주 쉽습니다. 매크로를 사용하여이 작업을 자동화하려고 시도했습니다. 아래 공식은 완벽하게 작동합니다.

= IFERROR (INDEX (Sheet1의 달러 (A $) 2 :! 달러 (A $) 2000, (MATCH ($ C2를, Sheet1의 C $ 2 :! C $ 2000,0))), "거짓")

관련 문제