我用宏遇到了心理障碍。我在航空业工作,正在处理电线列表输出CSV文件。对于大多数人,我只需要连接;但是,对于特定的电线类型,它们是双绞线。这些需要合并到一条新行中。
原始输出标准化布局
A C D F G
WIRENAME-BLU POINT1 LOCATION POINT2 LOCATION
WIRANAME-WHT POINT1 LOCATION POINT2 LOCATION
宏后所需的输出
A C D F G
WIRENAME-BLU POINT3 LOCATION POINT4 LOCATION
WIRENAME-WHT POINT1 LOCATION POINT2 LOCATION
A (This can all be concat in column A.)
(WIRENAME-WHT) POINT1LOCATION-POINT2LOCATION / BLU POINT3LOCATION-POINT4LOCATION
我知道这可以通过连接来完成,但与"WIRENAME"的部分 IF 方面存在斗争。
每个导线名称的结构都是这样的,
Regular wire
12345XXX0001-WHT
12345XXX0002-WHT
Twisted Wires
12345XXX0010-BLU
12345XXX0010-WHT
我什至不知道从哪里开始使用部分 if 语句来组合部分匹配的单元格和组合。
编辑:
很抱歉造成混淆,每根双绞线最多可以由四根电线组成。
Each cable consists of several components.
Harness WireName Color
12345 ***0001 BLU
12345 ***0001 WHT
12345 ***0001 ORG
12345 ***0001 GRN
The Cable code (0001) is going to be the same for all conductors within
the same wire.
For instance If you had two twistedpair cables, it would be:
Harness WireName Color
12345 ***0001 BLU
12345 ***0001 WHT
12345 ***0002 BLU
12345 ***0002 WHT
12345 ***0015 BLU
12345 ***0015 WHT
解决此问题的最简单方法是创建一个公式来查找与双绞线相关的代码。如果我正确理解了该示例,双绞线将具有类似于此模式的代码:
#####[A-Z][A-Z][A-Z]0010-[A-Z][A-Z][A-Z]
# - Any number
[A-Z] - Capital letters in the range of A to Z
0, 1 - Must match these numbers exactly
- - Must match - exactly
使用它,我们可以轻松检查任何值以查看它是否是双绞线:
Dim TwistedPairPattern as String
TwistedPairPattern = "#####[A-Z][A-Z][A-Z]0010-[A-Z][A-Z][A-Z]"
Dim NonTwistedCode as String
NonTwistedCode = "12345XXX0001-WHT"
Debug.Print NonTwistedCode Like TwistedPairPattern
' Result is False
Dim TwistedCode as String
TwistedCode = "12345XXX0010-BLU"
Debug.Print TwistedCode Like TwistedPairPattern
' Result is True
这为您提供了所需的匹配逻辑,还允许您根据需要编辑模式。
您可以在此处阅读有关Like
运算符的更多信息:https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/like-operator
或者 https://learn.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/like-operator
从那里,您只需编写逻辑以使用此比较即可创建串联。
编辑:您可能需要根据您的评论调整模式。如果我正确理解您的评论,您会想要更多类似以下内容的内容:
12345[A-Z][A-Z][A-Z]441*
(我使用了第二种模式)。这将匹配前 5 个字符为"12345"后跟三个大写字母、"441",然后是零个或多个字符(因为它可能有另一个数字)的任何代码。