- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 excel 中有 2 个选项卡,我对 VBA 有点陌生:
运营 :
详情 :
Excel View :
看看这个: “操作”选项卡中的说明字段将包含不同的“操作代码”(它可能包含 1 个操作代码、2 个操作代码或更多)。这是一个 11 位数字 .问题是这个字段是固定的,有时操作代码会被截断。
ONLY THOSE NUMBERS with exact amount of 11 digits must be considered
| NUMBER |TYPE| DESCRIPTION |SUMATORY_OF_MONEY
|B0001100005429 |FAC| SADADECO 19278294999 |
|A0001100001230 |REC| ORDONEZC9920 19299490733 |
|B0001100005445 |N/C| IGN_GONTAN 19266048459 1929949 |
|B0001100005445 |FAC| IGN_GONTAN 19266048445 19299494|
|B0001100005449 |FAC| rer 19266048445 19266048223 |
|OPERATION_ID| AMOUNT| NUMBER
|19278294999 | 4739 |
|19299490733 | 9999 |
|19266048459 | 34 |
|19266048445 | 554 |
|19266048223 | 4444 |
我试图做这样的事情:
Option Explicit
Sub M_snb()
Dim vOps As Variant, vDets As Variant
Dim rOps As Range, rDets As Range
Dim re As Object, mc As Object, m As Object
Dim I As Long, K As Long
Dim vSum, vNumber
'initialize regex
Set re = CreateObject("vbscript.regexp")
With re
.Global = True
.Pattern = "(?:\D|\b)(\d{11})(?:\D|\b)"
End With
'read data into variant array for faster processing
'also set the ranges for when we write the results back
With ThisWorkbook.Worksheets("Operations")
Set rOps = .Cells(1, 1).CurrentRegion
vOps = rOps
End With
With ThisWorkbook.Worksheets("Details")
Set rDets = .Cells(1, 1).CurrentRegion
vDets = rDets
End With
For I = 2 To UBound(vOps, 1)
vOps(I, 4) = 0
If re.test(vOps(I, 3)) = True Then
Set mc = re.Execute(vOps(I, 3))
For Each m In mc
For K = 2 To UBound(vDets, 1)
If m.submatches(0) = CStr(vDets(K, 1)) Then
vOps(I, 4) = vOps(I, 4) + vDets(K, 2)
vDets(K, 3) = vOps(I, 1)
End If
Next K
Next m
End If
Next I
'rewrite the tables
With rOps
.ClearContents
.Value = vOps
End With
With rDets
.ClearContents
.Value = vDets
End With
这是来自上一个问题:
VBA tricky situation
最佳答案
编辑:进行了一些更改,包括换成非正则表达式模式匹配(仍然很快)。
对您的样本数据进行了测试。
Sub M_snb()
Dim wsOps As Worksheet, wsDets As Worksheet
Dim c As Range, col As Collection, v, m
Dim dataOps, dataDets, rO As Long, rD As Long
Set wsOps = ThisWorkbook.Worksheets("Operations")
Set wsDets = ThisWorkbook.Worksheets("Details")
dataOps = wsOps.Range("A1").CurrentRegion.Value
dataDets = wsDets.Range("A1").CurrentRegion.Value
For rO = 2 To UBound(dataOps, 1)
Set col = AllNumbers(dataOps(rO, 3))
For Each v In col
For rD = 2 To UBound(dataDets, 1)
If CStr(dataDets(rD, 1)) = v Then
dataDets(rD, 3) = dataOps(rO, 1)
dataOps(rO, 4) = dataOps(rO, 4) + dataDets(rD, 2)
End If
Next rD
Next v
Next rO
DropArray dataOps, wsOps.Range("A1")
DropArray dataDets, wsDets.Range("A1")
End Sub
'return all 11-digit strings in v as a Collection
Function AllNumbers(v) As Collection
Const NUM_DIGITS As Long = 11
Dim m As Object, mc As Object, col As New Collection, txt, i As Long, patt, ss
txt = " " & v & " "
patt = String(NUM_DIGITS, "#")
i = 2
For i = 2 To Len(txt) - NUM_DIGITS
ss = Mid(txt, i, 11)
If ss Like patt Then
If Not Mid(txt, i - 1, 1) Like "#" Then
If Not Mid(txt, i + NUM_DIGITS, 1) Like "#" Then
col.Add ss
End If
End If
End If
Next i
Set AllNumbers = col
End Function
'Utility method: put a 2d array on a sheet at rng
Sub DropArray(arr, rng As Range)
rng.Cells(1).Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
End Sub
关于excel - 试图用 VBA 做一些奇怪的事情(奇怪的情况),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71216052/
我有一个包含两个项目的解决方案,每个项目都生成一个单独的 dll,供另一个 Windows 应用程序使用。这些项目中的每一个都有一个名为 MyActions 的类,只有一个这样的方法 项目 1
我有一个包含两个项目的解决方案,每个项目都生成一个单独的 dll,供另一个 Windows 应用程序使用。这些项目中的每一个都有一个名为 MyActions 的类,只有一个这样的方法 项目 1
所以我在 if 语句中有这段代码如下 if (!inTime || !moment(inTime).format('m') % 15 === 0) { doSomething(); } 传入的 inT
像往常一样,我想做的比我知道的还多:-D 这就是我正在做的事情......我正在写一篇简历。 但是在简介中,我想要一个“长简介”和一个“短简介”按钮。 长传记显然会显示整个传记,但短传记会捕获列表中的
我正在使用物质。 js创建一个二维场景。我在场景中对一个物体施加力,这个物体撞击其他物体,但最终所有物体都因摩擦和能量损失而停止移动。 我需要以某种方式检测场景中的所有物体何时停止移动。我发现这样
谁能快速浏览一下这段代码,让我知道哪里出错了。 在模糊事件中,.textok 类加载正常,但 .textbad 类加载不正常。 .textok { color:#0F0; background
我的情况是这样的:我有一个项目,它使用了一些生成的代码。在生成的代码中,几乎所有文件中都硬编码了某个 URI。 因此,在某些时候我得到了两个生成的代码库:一个针对开发,另一个针对暂存。 我想通过 Gr
这是一个严肃的问题(见我的评论)。 问题很简单:Java 所做的所有 SEO 不友好的事情有哪些会导致您的网站在主要搜索引擎中的排名不如应有的好? 最佳答案 有一个与 JSESSIONID 相关的 s
我正在使用 PHP。我想完成 jQuery AJAX 进程,(完成进程并数据返回主页后)。 然后执行下一个 jQuery 操作。关于如何做到这一点有什么想法吗? $.ajax({ url: "pa
在释放内存之前,我要从 CPU 缓存中逐出内存范围。理想情况下,我只想放弃这些缓存行而不将它们保存到内存中。因为没有人会使用这些值,无论谁再次获得该内存范围(在 malloc()/new/_mm_ma
我不喜欢 jackson 。 我想使用 ajax,但要使用 Google Gson。 所以我试图弄清楚如何实现我自己的 HttpMessageConverter 以将其与 @ResponseBody
我是一名优秀的程序员,十分优秀!