2017-12-21 13 views
1

다른 통합 문서에 두 개의 워크 시트가 있습니다. 각 시트는 몇 줄에서 수천 줄까지만 가질 수 있습니다. 그들은 같은 수의 선을 갖지 않습니다.다른 통합 문서에서 일치하는 값 찾기 및 세 번째 값을 기준으로 행 부분 변경

자본 워크 시트의 E 열에서 ITS ####를 포함하는 모든 셀을 찾으려고합니다. ####는 숫자 문자입니다. 셀이 식별되면 해당 행의 A 열로 이동하여 해당 값을 식별하려고합니다. 그런 다음 다른 통합 문서에있는 Trans 워크 시트의 J 열에서 방금 식별 한 값 (열 A)을 찾고 싶습니다. 일치 항목이 발견되면 Trans 통합 문서의 열 I 값을 "판매 비용/비용"으로 변경합니다.

인터넷을 수 주 동안 검색하여 비슷한 문제에 대한 여러 가지 해결책을 시도했지만, 하지만 작동 아무 것도 발견했다. 나는 누군가가 표시된 라인을지나 저를 얻을 수 있다면 나는 그것을 밖으로 이해할 수 있으리라 생각합니다. 내가 객체 _Worksheet 1004 방법 범위가 실패

런타임 오류가 계속.

다음 코드는 제가 작업하고있는 코드입니다.하지만 오류를 극복하기 위해 묶어 두었습니다. 심지어 모든 문제를 해결하려고 노력합니다.

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

If UCase(Left(C.Cells.Value,3)) = "ITS" Then 

나는 그것이 당신을 수 있습니다 생각 : 라인으로

If C.Cells.Value = "ITS####" Then 

: 그냥 라인을 교체하려고 ...이 길에 같은

Sub ITSTRANSCOM() 
' 
' ITSTRANSCOM Macro 
' 
Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Dim i As Variant 
Dim C As Variant 
Dim Lrow As Variant 
Dim Lastrow As Variant 

Set ws1 = Worksheets("Capital") 
Set ws2 = Worksheets("Trans") 
Lrow = ws1.Cells(ws1.Rows.Count, "A:A").End(xlUp).Row 
Lastrow = ws2.Cells(ws2.Rows.Count, "j:j").End(xlUp).Row 

'Run-time error occurs on next row. 
For Each i In ws1.Range("A:A", Lrow) 
    For Each C In ws2.Range("J:J", Lastrow) 
     If i.Cells.Value = C.Cells.Value Then 
      If C.Cells.Value = "ITS####" Then 
       i.Cells.Interior.ColorIndex = xlNone 
      End If 
     End If 
     Next C 
    Next i 
End Sub 

답변

0

는 다음과 같이 시도 :

Dim I as Integer, C as Integer 
Dim Tmp_Val as Variant 
For I = 1 to LRow 
    If Left(UCase(Ws1.Range(“E” & I).Value),3) = “ITS” then 
     Tmp_Val = Ws1.Range(“A” & I).Value 
     For C = 1 to LastRow 
      If Ws2.Range(“J” & C).Value = Tmp_Val then 
       Ws2.Range(“I” & C).Value = “Cost of Goods Sold/Expense” 
       Exit For 
      End if 
     Next C 
    End if 
Next I 
+0

정말 고마워요! 웬일인지, 나의 컴퓨터는 당신의 인용 부호를 좋아하지 않았다. 그리고 나는 그것이 일할 것일 전에 그들을 바꾸어야했다. – FloridaRick

+0

@FloridaRick 문제는 없습니다. 그리고 이상하게 들리 겠지만 쉽게 고쳐질 것입니다. – Sercho

0

귀하의 솔루션을 본다 원하는 셀을 식별하기 위해 시트 사이에 값을 이동시키는 코드를 개발할 수 있어야합니다 (다른 코드를 기반으로).

+1

고마워요.하지만 같은 오류가 발생했습니다. 네가 나를 바꿔 놓고있는 줄 위의 세 줄의 줄을 좋아하지 않는 것 같다. 오, 죄송합니다. – FloridaRick

+0

. 모든 행을 반복하려고합니까? 그렇다면 다음을 시도해보십시오. I = 1 ~ LRow에 대해 루프 대신에 i와 c 대신 범위 변수를 사용하십시오 ... atm에서 빠져 나올 때까지 약간의 시간을주십시오 ...하지만 더 나은 것을 게시 할 수 있습니다. 내가 집에 도착했을 때 해결책. – Sercho

+0

"그렇다면 시도해보십시오."예, 모든 행을 반복하고 싶습니다.ITS 번호는 열 E에있을 수 있으며 다른 번호는 열 J에있을 수 있습니다. 감사합니다! – FloridaRick

0

시도

For Each i In ws1.Range("A:A", Lrow)

변경 For Each C In ws2.Range("J:J", Lastrow)

For Each i In ws1.Range("A1", "A" & Lrow)

같은

에 :

For Each C In ws2.Range("J1", "J" & Lastrow)

0

간단합니다. 아마도 내가 너의 설명을 제대로하지 못했을 까?

Dim c As Range, r As Range 
For Each c In ws1.Range("A:A").SpecialCells(xlCellTypeConstants, xlTextValues).Cells 
    If c.Value Like "ITS[0-9][0-9][0-9][0-9]" Then 
     Set r = ws2.Range("J:J").Find(c.Value) 
     If Not r Is Nothing Then 
      r.Offset(0, -1) = "Cost of Goods Sold/Expense" 
     Else 
      Debug.Print c.Value, " not found" 
     End If 
    End If 
Next c 
Debug.Print "Done"