gpt4 book ai didi

excel - 如何删除前缀的动态数字

转载 作者:行者123 更新时间:2023-12-03 03:08:58 24 4
gpt4 key购买 nike

我想更改下面代码中提到的 Array(OutArray) 中的值的格式。数组将返回六位数字,前面有 0 并用符号(+ 或 -)来组成数字。如果实际值为 5678、-5000、8,则数组将返回 +005678、-005000、+000008。我无法更改此数据类型格式,因为这是仪器返回数据的唯一方式。

我正在尝试删除前缀 0 以及每个值附带的“+”。但问题是,我不知道有多少个 0 作为前缀,因为返回的值是动态的。这行代码让我印象深刻,

                InArray = MID(Step, "", "")

我实际上想识别第一个非零值。有什么办法可以做到这一点吗?

 Public Function copy_XY()

Dim idn As String
idn = instrument.ReadString() ' Reading a value from instrument (Dynamic)
Dim OutArray() As String
OutArray = Split(idn)
Dim Step As Variant
Dim InArray As String
For Each Step in OutArray
InArray = MID(Step, "", "")
Next Step

End function

当我如下使用 CInt 时,出现溢出错误。

   Dim Val() As Int
Val(0) = CInt(OutArray(0))

最佳答案

从评论中可以看出,有一些奇怪的问题我们没有从您的代码中得知。因此,让我们放弃简单的 CLng() 转换方法并使用一些正则表达式。

我假设从您对 Split() 的使用来看,您返回一个字符串,其中包含一个 +/- 和六个由空格分隔的数字字符(因为您使用的是 Split 的默认分隔符- 这是一个空格)。这将使您的数据看起来像这样:

"+650280 +001503 +000000 -001258 +001250 -009870 +798023"

使用正则表达式(简称RegExp),您可以使用非常简单的模式轻松匹配这些数字并将它们放入集合中。从那里,可以轻松地将集合移动到已声明为 Long 类型的数组中。由于您要将这些值转换为 Long 数据类型,因此您不必再担心无意义的 0。

Public Function copy_XY()

Dim ValArr() As Long, i As Long
With CreateObject("VBScript.RegExp")

.Pattern = "[+-]\d+"
.Global = True

With .Execute(instrument.ReadString)

' Place the collection into an array
ReDim ValArr(.Count - 1)
For i = 0 To .Count - 1
ValArr(i) = .Item(i)
Next

End With

End With

' Print the values to the immediate window to show it works
For i = 0 To UBound(ValArr)
Debug.Print ValArr(i)
Next

End Function
<小时/>

打破模式

因此,我们为 RegExp 提供了以下模式 [+-]\d​​+。首先,值得一提的是,我们将全局标志更改为True,因为这将匹配字符串中该模式的每个实例。将其保持为 false 将仅匹配模式的第一个情况并停止。

现在讨论模式本身:

  • [+-] 是一个字符类 ([...]),它将匹配其中的任何字符 - 因此在本例中要么是 + -
  • \d 是一个特殊标记,表示任何单个数字
    • 我们用量词+修改了这个“任何单个数字”,这意味着一个或多个。因此 \d+ 表示 一个或多个\d
    • 我们本来可以更具体地使用 \d{6},这正好需要 6 个 \d。需要记住的事情。

关于excel - 如何删除前缀的动态数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59297874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com