拆分前缀和姓氏(基于数组数据)

时间:2017-02-08 13:49:17

标签: excel excel-vba excel-formula vba

我有一个由名称存在的数据列,可能包含也可能不包含姓氏前缀。这些前缀可以存在多个单词。我有一个所有可能的前缀列表,但现在我需要拆分前缀和姓氏,并用数据创建2列。

我所做的是编写如下的excel公式:

=IF(
   RIGHT(A1;7) = " van de"
 ;
   RIGHT(A1;6)
 ;
   IF(
     RIGHT(A1;4) = " van"
   ;
     RIGHT(A1;3)
   ;
     IF(
       RIGHT(A1;3) = " de"
     ;
       RIGHT(A1;2)
     ;
       --Insert more nested If statements here--
     )
   )
 )

姓氏的数据如下所示:

Name1 van de
Name1 van
Name1
Name1 Name2 van
Name1-Name2 Name3 van de
Name1 Name2 Name3

我想要的是什么:

  OriginalName   |  Name  |  Prefix
-----------------|--------|----------
      a b        |   a    |    b
      a b c      |   a    |    b c

首先,这是一种非常低效的方法,但我自动创建了这个公式,因此不再是一个问题。现在我发现那里可以有嵌套的If语句的限制,我必须超过这个限制。

我该如何解决这个问题?

我有一个带有可能前缀的数组。也许这会有所帮助吗?

3 个答案:

答案 0 :(得分:2)

将您的列表 按最短姓氏的顺序排列 。我把我放在E1:E3。

然后使用这个数组公式:

Private Sub Form_Load()
    Test1
End Sub

Sub Test1()
    MsgBox "Test1"
End Sub

然后获得姓氏:

class MyCassTest extends FlatSpec with BeforeAndAfter {

  var spark: SparkSession = _

  before {
    val sparkConf: SparkConf = new SparkConf()    
    spark = SparkSession.
      builder().
      config(sparkConf).
      master("local[*]").
      getOrCreate()
  }

  after {
    spark.stop()
  }

  "myFunction()" should "return 1.0 blab bla bla" in {
    val sc = spark
    import sc.implicits._

    // assert ...
  }
}

作为一个数组公式,他们需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter来确认。如果操作正确,那么Excel会将https://graph.facebook.com/v2.6/?fields=og_object{comments} &id=<YOUR_URL> &access_token=<YOUR_TOKEN> 放在公式周围。

enter image description here

答案 1 :(得分:2)

我假设您想要将“van”和“de”前缀与名称的其余部分分开。如果我误解了,请提供更多关于您的问题/问题的例子......

以下解决方案需要帮助列来确定“前缀”的开始位置,但您可以在必要时隐藏它:

enter image description here

首先,将我的值放在A8:A9 van; de )的任意位置,并将其命名为prefix,以便在以下公式中引用它。

C1中的公式是数组公式(使用 Ctrl + Shift + Enter < / KBD> 的):

=MIN(IF(ISNUMBER(SEARCH(prefix,A1)),SEARCH(prefix,A1)))

D1E1或正常公式中的公式:

=IF(C1>0,LEFT(A1,C1-2),A1)
=IF(C1>0,MID(A1,C1,LEN(A1)),"")

答案 2 :(得分:1)

我知道这已经得到了解答,但我昨天做了这个,没有时间提交它(必须为公共汽车跑。)

所有前缀值前面都有空格......

enter image description here

B栏公式(数组公式 - Ctrl + Shift + 在公式栏中输入=INDEX(SUBSTITUTE(A1,Prefix,""),MATCH(SMALL(LEN(SUBSTITUTE(A1,Prefix,"")),1),LEN(SUBSTITUTE(A1,Prefix,"")),0))

C栏公式 - =TRIM(SUBSTITUTE(A1,B1,""))