部分 IF 语句,将多列合并到新行,Excel VBA



我用宏遇到了心理障碍。我在航空业工作,正在处理电线列表输出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",然后是零个或多个字符(因为它可能有另一个数字)的任何代码。

最新更新