/ / Konverzia reťazca na dvojnásobok v Exceli / Makre - Excel, VBA, Excel Excel

Konverzia reťazca na dvojité v programe Excel / Macro - excel, vba, excel-vba

V Exceli sa snažím vytvoriť novú funkciu, ktorá bude počítať dané hodnoty (niečo ako funkcia SUM, ale iba s danou predponou).

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

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

Problém je, keď je hodnota vo forme napr. AA10,434 alebo AA4,43. Mohol by mi niekto pomôcť s mojím problémom? Toto je môj prvý výpis vo 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

Vďaka za pomoc.

odpovede:

10 pre odpoveď č. 1

CDbl je si vedomý miestneho nastavenia, preto skontrolujte, či je váš Replace je správne (napríklad v mojom miestnom nastavení musím nahradiť znak „.“ za „,“, aby mohol fungovať). Ak sa nechcete spoliehať na miestny kód, použite Val namiesto CDbl pretože Val rozpoznáva iba „.“ ako platný oddeľovač desatinných miest bez ohľadu na miestne nastavenie.


-1 pre odpoveď č. 2
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

„Com o código abaixo pode-se „odstraňovač os espaços extras entre ako palavras de um texto: Funkcia RetiraEspaç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)

Funkcia ukončenia