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

时间:2018-01-11 16:00:43

标签: excel vba excel-vba

我用宏拍了一个精神障碍。我在航空业工作,正在研究电线列表输出CSV文件。对于大多数人我只需要连接;但是,对于特定的线型,它们是双绞线。那些需要结合起来的新线。

原始输出标准化布局

Service

后的所需输出
    A             C          D         F         G
WIRENAME-BLU    POINT1   LOCATION    POINT2   LOCATION
WIRANAME-WHT    POINT1   LOCATION    POINT2   LOCATION

我知道这可以通过连接来完成,但是要与#34; WIRENAME"的部分IF方面进行斗争。

每个电线名称的结构都是这样的,

       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

我甚至不知道从哪里开始使用部分if语句来组合部分匹配单元格和组合。

编辑:

很抱歉这个混乱,每个TwistedCable,最多可以包含四根电线。

    Regular wire
    12345XXX0001-WHT
    12345XXX0002-WHT
    Twisted Wires
    12345XXX0010-BLU
    12345XXX0010-WHT

1 个答案:

答案 0 :(得分:0)

解决此问题的最简单方法是创建一个查找与绞线相关的代码的公式。如果我正确理解了这个例子,那么绞线将具有类似于这种模式的代码:

#####[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://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/like-operator

从那里,你只需要编写逻辑来使用这种比较来创建连接。

编辑:您可能需要根据您的评论调整模式。如果我理解你的评论你会想要更多的东西:

12345[A-Z][A-Z][A-Z]441*

(我使用了第二种模式)。这将匹配任何代码,其中前5个字符是'12345',后跟三个大写字母,'441',然后是零个或多个字符(因为它可能有另一个数字)。