2016-11-24 10 views
-1

2つの値の間でシーケンスを取得する関数を試しています。下記の例を理解してください。シーケンス番号の関数が必要

第一値= A1245 第二値= A1257

私は 'AddNum' 関数の値の上に与えます。その結果、 'A1245、A1246、A1247'が返されます。

下記の特定のVBAコードは、私自身によって書かれており、私はあなたにお手伝いしてください。

Public x As Double 

Function AddNum(Val1 As Variant, Val2 As Variant) 

If Val1 = "" Or Val2 = "" Then 
Exit Function 
Else 
x = -(Right(Val1, 4) - Right(Val2, 4)) 
End If 

Dim myary As Variant 
ReDim myary(x) As Variant 

For y = LBound(myary) To UBound(myary) 
Z = Right(Val1, 4) + y 
myary(y) = Left(Val1, 2) & Z 
ActiveCell.Offset(0, y + 1).Value = myary(y) 
Next y 

End Function 
+0

私はあなたが待っているのか理解していない... VAL1/val2の文字列はありますか?または範囲?その結果、文字列が必要ですか?範囲は?ルールは何ですか? "あなたはA1257を返しますが、それはA1247まで戻ります"あなたの機能に期待するものを教えてください –

+0

@Sai Krishnaあなたは以下の解決策を試しましたか?彼らはあなたが意図したとおりに働いたのですか? –

答えて

0

は、多分あなたはこのような何か後にしている:

Sub AddNum(strng1 As Variant, strng2 As Variant) 
    Dim val1 As Long, val2 As Long 
    Dim code As String 
    Dim iVal As Long 

    If strng1 = "" Or strng1 = "" Then Exit Function 

    code = Left(strng1, 1) 
    val1 = CLng(Right(strng1, 4)) 
    val2 = CLng(Right(strng2, 4)) 

    ReDim myary(1 To val2 - val1 + 1) As String 

    For iVal = val1 To val2 
     myary(iVal - val1 + 1) = code & iVal 
    Next iVal 
    ActiveCell.Offset(, 1).Resize(, UBound(myary)).Value = myary 
End Sub 

か、Autofill()方法悪用する可能性があります:

Sub AddNum2(strng1 As Variant, strng2 As Variant) 
    Dim val1 As Long, val2 As Long 
    Dim iVal As Long 
    Dim code As String 

    If strng1 = "" Or strng1 = "" Then Exit Sub 

    code = Left(strng1, 1) 
    val1 = CLng(Right(strng1, 4)) 
    val2 = CLng(Right(strng2, 4)) 

    With ActiveCell.Resize(, 2) 
     .Value = Array(strng1, code & (val1 + 1)) 
     .AutoFill Destination:=.Resize(, val2 - val1 + 1), Type:=xlFillDefault 
    End With 
End Sub 
+0

@SaiKrishna、あなたはそれを通過しましたか? – user3598756

0

それはあなたのポストの意図だった場合、私はわからないが、 1つのセル(このセルを呼び出すセルFunction)内に結果を取得する場合は、この関数を定義してStringを返す必要があります。

また、このコードでは、文字列の先頭に1文字だけ接頭辞として呼び出すことを前提としています。多機能でこの関数をさまざまな文字で始めたい場合は、呼び出し側セクションに別のパラメータを追加する必要があります。

コード

Function AddNum(Val1 As Variant, Val2 As Variant) As String 

Dim MinVal, MaxVal 
Dim i As Long 
Dim CellStr As String, Prefix As String 

If Val1 = "" Or Val2 = "" Then 
    Exit Function 
Else 
    ' get the first letter on the left >> modify if you have more than 1 letter 
    Prefix = Left(Val1, 1) 

    ' read the "clean" value without the prefix and convert to Long 
    MinVal = CLng(Mid(Val1, 2, Len(Val1) - 1)) 
    MaxVal = CLng(Mid(Val2, 2, Len(Val2) - 1)) 
End If 

For i = MinVal To MaxVal 
    If CellStr = "" Then 
     CellStr = Prefix & i 
    Else 
     CellStr = CellStr & "," & Prefix & i 
    End If 
Next i 
AddNum = CellStr 

End Function 
関連する問題