1

Excelで新しい関数を作成しようとすると、witchは指定された値をカウントします(SUM関数のようなものですが、指定されたプレフィックスのみが含まれます)。

  A
---------    
1|AA30  
2|AA10 
3|BC446 
4|AA10

// result will be 50  on SUM_PREFIX(A1:A4;"AA")

問題は、値がAA10,434またはAA4.43などの形式の場合です。誰かが私の問題を手伝ってくれませんか?これはVBでの私の最初のストリップです。

 Function SUM_PREFIX(Data As Range, prefix As String) As Double

    Dim result As Double
    Dim strVal As String
    Dim i As Integer
    Dim objRegExp As Object

   Set objRegExp = CreateObject("vbscript.regexp")
   With objRegExp
        .IgnoreCase = True
        .MultiLine = False
        .Pattern = "^[" + prefix + "]+[0-9]+(\,|\.)?[0-9]?$"
        .Global = True
    End With

    For i = 1 To Data.Rows.Count
        Debug.Print Data.Cells(i, 1)
        If objRegExp.Test(Data.Cells(i, 1)) = True Then
            strVal = Replace(Data.Cells(i, 1), prefix, "")
            Debug.Print strVal
            strVal = Trim(Replace(strVal, ",", "."))
            Debug.Print strVal
            result = result + CDbl(strVal)
        End If
    Next i

    SUM_PREFIX = result
End Function

手伝ってくれてありがとう。

4

2 に答える 2

11

CDblはロケールに対応しているため、Replace正しいかどうかを確認してください(たとえば、私のロケールでは、「。」を「、」に置き換えて機能させる必要があります)。ロケール対応コードに依存したくない場合は、「。」のみを認識するため、Val代わりにを使用してください。ロケールに関係なく、有効な小数点記号として。CDblVal

于 2012-08-21T22:38:06.307 に答える
-1
Function SUM_PREFIXO(DADOS As Range, PREFIXO As String) As Double

Dim result, NI As Double
Dim strVal As String
Dim i As Integer
Dim objRegExp As Object



   Set objRegExp = CreateObject("vbscript.regexp")
   With objRegExp
        .IgnoreCase = True
        .MultiLine = False
        .Pattern = "^[" + PREFIXO + "]+[0-9]+(\,|\.)?[0-9]?$"
        .Global = True
    End With

    NI = DADOS.Rows.Count

    For i = 1 To DADOS.Rows.Count

    Debug.Print (DADOS.Cells(i, 1))

    If objRegExp.Test(RetiraEspaço(DADOS.Cells(i, 1))) = True Then
        strVal = Trim(Replace(DADOS.Cells(i, 1), PREFIXO, ""))
        Debug.Print strVal
        strVal = Trim(Replace(strVal, ".", ","))
        Debug.Print strVal
        strVal = Trim(Replace(strVal, ",", ","))
        Debug.Print strVal
        result = result + CDbl(strVal)

    End If
    Next i

SUM_PREFIXO = result
End Function

'Comocódigoabaixopode-se'removerosespaçosextrasentreaspalavras de um texto:FunctionRetiraEspaço(Texto)

Dim Vpalavra, inicio, termino, Wresultado
inicio = 1
Texto = UCase(Texto) & " "

Do Until InStr(inicio, Texto, " ") = 0
    termino = InStr(inicio, Texto, " ")
    Vpalavra = Mid(Texto, inicio, termino - inicio)
    inicio = termino + 1

    Wresultado = Wresultado & "" & Vpalavra
Loop

RetiraEspaço = Trim(Wresultado)

終了機能

于 2015-05-28T03:42:56.480 に答える