2016-10-13 7 views
0

同じレコードのシートに一致させ、別のシートに基づいて1つのシートを更新しようとしています。更新は、それぞれのセルで「1」のインクリメントと一緒になります。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

私が見ることができるものから、あなたの比較が働いている、それはあなたが解決する必要があなたの更新です。更新された値を返す関数を記述します。あなたがする機能が必要なのは、最初に文字列から数値を抽出することです(これを行う方法についてのこれらの2つの投稿をご覧ください:Post1およびPost2)。これで数値が得られましたので、必要に応じて数値を増やしてください。次に、数値を新しい更新値に置き換えます(これはあまりにも難しいはずです:あなたは古い値と新しい値を持っています。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

あなただけの1つの文字は数字の前に常にあることがわかっている場合は、単に:

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) 
関連する問題