【问题标题】:multi value cell separated by comma to array以逗号分隔的多值单元格到数组
【发布时间】:2016-11-11 07:30:46
【问题描述】:

我是 VBA 的新手,我被困在一个点上,我必须拆分并复制整个列 (C) 的多值单元格,这些单元格以逗号分隔到一个数组中。并将其排列到相应的列 假设:

  C1 = oranges,grapes,apple ; C2 = apple,mango ; C786 = watermelon,oranges,plum

它应该去相应的列,芒果的所有值应该去E列,苹果到F,西瓜到G,其余到下一列 我想要实现的是

Initially -::-

    A           B                 E     F           G       H      I      J     K
  Seller   FruitSell            Mango  Apple  Watermelon Grapes Orange  Plum Banana
 Seller1  Oranges,Grapes,Apple            
 Seller2  Only Mango            
 Seller3  Plum,Banana   

 Output :-:          
    A           B                 E     F           G       H      I      J     K
  Seller   FruitSell            Mango  Apple  Watermelon Grapes Orange  Plum Banana
 Seller1  Oranges,Grapes,Apple         Apple             Grapes Orange    
 Seller2  Only Mango            Mango
 Seller3  Plum,Banana                                                   Plum Banana                                      

提前致谢

【问题讨论】:

  • 请发布您当前的代码和更详细的数据描述(我不清楚哪些值在哪里)
  • 那么你对每个水果都有一个指定的列吗?即使没有 VBA,您也可以解决这个问题。
  • @user3598756 我已经给出了更详细的描述
  • @MladenSavic 我想用 VBA 解决这个问题,但欢迎任何帮助
  • 您可以处理指定的列,方法是使用字典/集合来获取具体信息,然后从 split 循环数组并检查每个列。每个公式不是更好吗,比如=IF(NOT(ISERR(SEARCH(", apples",A1))),"apples",""),甚至只是复制粘贴值>?

标签: arrays excel vba


【解决方案1】:

这是公式的解决方案:

使用 VBA 会类似但不太理想,如果 B 列中存在相应的水果,则必须遍历行和列并插入相应的水果。

【讨论】:

  • 也许您应该在公式中将分号 (;) 替换为逗号
  • =IF(ISNUMBER(FIND(C$1,$B2)),C$1;"")
  • =IF(ISNUMBER(FIND(C$1,$B2)),C$1,"")
  • 但我必须为整个专栏这样做。我可以使用按钮自动化它吗
  • 如果跨列和行拖动公式,您将拥有整列和所有行。
【解决方案2】:

如果您想将其作为 VBA 代码,您可以从以下内容开始:

Option Explicit

Sub TestMe()

    Dim my_dict             As Object
    Dim my_str              As String
    Dim my_arr              As Variant
    Dim my_key              As Variant
    Dim l_counter           As Long

    Set my_dict = CreateObject("Scripting.Dictionary")
    my_str = "ora,gra,app,app,app,man,man" 'Range(Cells(2, 2),cells(6,2))
    my_arr = Split(my_str, ",")

    For l_counter = LBound(my_arr) To UBound(my_arr)
        If my_dict.exists(my_arr(l_counter)) Then
            my_dict(my_arr(l_counter)) = my_dict(my_arr(l_counter)) + 1
        Else
            my_dict.Add my_arr(l_counter), 1
        End If
    Next l_counter

    For Each my_key In my_dict.Keys
        Debug.Print my_key, my_dict(my_key)
    Next my_key


End Sub

在您的情况下,您应该为每个带有水果的单元格放置一个循环,并将其写入 my_str。最后你会得到一本很好的字典,里面有所有的水果。

试试这个代码,它可以工作并在即时窗口中产生一些东西。

【讨论】:

  • my_str = "ora,gra,app,app,app,man,man"我应该写完整的水果名称
  • 随心所欲地写。最好的办法是确保my_str 包含水果所在的所有单元格中的文本。这可以通过循环轻松获得。
  • 我在问题中给出了更多细节
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多