2016-10-13 1 views
0

동일한 레코드가있는 시트와 일치시키고 다른 시트를 기준으로 한 시트를 업데이트하려고합니다. 업데이트는 각 셀에서 '1'과 함께 증가합니다.한 셀에서 문자열 내의 숫자 증가 #VBA

값이있는 셀이 각각 업데이트되도록 쓸 수있었습니다. 문제는 문자열을 포함하는 셀을 증가시키는 방법을 이해할 수 없다는 것입니다. (일부 셀에는 "> 1", "> 2"등이 포함됩니다.) "> 2"및 "> 3"등으로 변경해야하는 경우 해당 셀을 증가 시키려고합니다.

코드를 붙여 넣어야하는 순간을 굵게 표시합니다.

Sub Increment() 
    For Each SnowCell In MySnowRange 
    For Each TrakerCell In MyTrakerRange 
     If TrakerCell.Value = SnowCell.Value Then 
      If TrakerCell.Offset(, 1).Value <> SnowCell.Offset(, 1).Value Then 

       TrakerCell.Offset(, 1).Value = SnowCell.Offset(, 1).Value 

       Select Case SnowCell.Offset(, 1).Value 
        Case "In Queue" 
         If Application.WorksheetFunction.IsNumber(TrakerCell.Offset(, 3).Value + 1) = True Then 
          TrakerCell.Offset(, 3).Value = TrakerCell.Offset(, 3).Value + 1 
         Else 
          **TrakerCell.Offset(, 3).Value = Split(TrakerCell.Offset(, 3).Value)** 
        Case "Assigned" 
         TrakerCell.Offset(, 4).Value = TrakerCell.Offset(, 4).Value + 1 
        Case "Work In Progress" 
         TrakerCell.Offset(, 5).Value = TrakerCell.Offset(, 5).Value + 1 
        Case "Pending" 
         TrakerCell.Offset(, 6).Value = TrakerCell.Offset(, 6).Value + 1 
        Case "Resolved" 
         TrakerCell.Offset(, 7).Value = "Resolved" 
        End Select 

      ElseIf TrakerCell.Offset(, 1).Value = SnowCell.Offset(, 1).Value Then 

       Select Case SnowCell.Offset(, 1).Value 
        Case "In Queue" 
         TrakerCell.Offset(, 3).Value = TrakerCell.Offset(, 3).Value + 1 
        Case "Assigned" 
         TrakerCell.Offset(, 4).Value = TrakerCell.Offset(, 4).Value + 1 
        Case "Work In Progress" 
         TrakerCell.Offset(, 5).Value = TrakerCell.Offset(, 5).Value + 1 
        Case "Pending" 
         TrakerCell.Offset(, 6).Value = TrakerCell.Offset(, 6).Value + 1 
        Case "Resolved" 
         TrakerCell.Offset(, 7).Value = "Resolved" 
        End Select 

      End If 
     Else 
     End If 
    Next 
Next 


End Sub 

답변

0

내가 알 수있는 바로는 비교가 효과적이므로 해결해야 할 업데이트입니다. 업데이트 된 값을 반환하는 함수를 작성하십시오. 함수가 필요한 것은 먼저 문자열에서 숫자 값을 추출하는 것입니다 (이를 수행하는 방법에 대한이 두 게시물을보십시오 : Post1Post2). 이제 숫자 값을 얻었으므로 요구 사항에 따라 값을 증가 시키십시오. 다음으로 숫자 값을 새로운 업데이트 된 값으로 바꾸십시오 (너무 어렵습니다. 이전 값과 새 값을 가지고 있습니다. 문자열에서 값을 변경하려면 Replace을 사용하십시오). 이 기능을 사용하여 Offset 셀에 값을 할당 할 수 있습니다.

0

고마워요!

은이 방법을 수행하고 그것은 작동 :

Case "In Queue" 
        If Application.WorksheetFunction.IsNonText(TrakerCell.Offset(, 3).Value) = True Then 
         TrakerCell.Offset(, 3).Value = TrakerCell.Offset(, 3).Value + 1 
        Else 

         a = Left(TrakerCell.Offset(, 3).Value, 1) 
         b = Right(TrakerCell.Offset(, 3).Value, Len(TrakerCell.Offset(, 3).Value) - 1) 
         c = b + 1 
         d = a & c 

         TrakerCell.Offset(, 3).Value = d 
        End If 

:)를!

0

당신이 항상 다음 바로 번호 앞에 하나 개의 문자라는 것을 알고있는 경우 :

Set c = TrakerCell(, 4)     ' same as TrakerCell.Offset(, 3).Resize(1, 1) 
c.Value = Left(c, 1) & (Mid(c, 2) + 1) 

하지만, 숫자가 아닌 문자의 수가 다릅니다 경우, 다음가 약간 변경 될 수 있습니다

Set c = TrakerCell(, 4) 
L = Len(c) - Len(Str(Val(StrReverse(c)))) + 1 ' number of characters before the number + 1 
c.Value = Left(c, L) & (Mid(c, L + 1) + 1)