创建供日常使用的特定单元格值格式的函数

创建供日常使用的特定单元格值格式的函数

我绝对不是 Excel 专家,因此希望获得以下功能的支持:

我们的工作表中有一列类别树,格式如下:

类别单元格格式示例- a/b/c/d(树没有定义的限制,也可以是 a/b/c/d/e)

预期细胞结果- a、a/b、a/b/c、a/b/c/d

由于我们的团队每天都在创建新的类别树,因此每天都会用到它。因此需要为此创建一个宏。

这是我第一次来这里。希望我能解释清楚

示例图片

答案1

Stack Exchange 和 Super User 不是免费的代码编写服务,但为了“友好”,下面的信息以伪代码的形式列出了您可以在 VBA 中使用的程序结构类型,以将您的输入转换为所需的输出。

此结构执行两项任务:

  1. 输入被拆分成其组成“单词”(由 / 字符分隔的部分)。此任务的结果应为“单词”数组(或列表)

  2. 从第一个单词开始,反复遍历单词数组以构建输出。在每次遍历中,输出中的连续“单词”都用 / 字符分隔。第一次遍历在第一个单词后停止,第二次遍历在添加第二个单词后停止,第三次遍历在添加第三个单词后停止,依此类推。在每次遍历结束时,不使用 / 字符作为分隔符,而是使用逗号 (,)。在最后一次遍历结束时不使用逗号。

      ​ '(TASK 1)​
       ​Read input string from worksheet​
       ​Initialise number of "word"s found as zero
       ​Initialise current "word" to null string  
       ​For each character in input string​
           ​If character is / Then
                ​'(End of current "word" found)
                ​Increase by 1 number of words found
                ​Add current "word" to array of words
                ​Start new "word" as null string
           ​Else
                ​Add character to current "word"
           ​End If​
       ​Next character
       ​'(Don't forget to add current "word" to array of words)
       ​Increase by 1 number of words found
       ​Add current "word" to array of words
       ​'(Now have an array of "words" with known number of words in it)
       ​'(TASK 2)
       ​'(Creation of output string involves use of an inner loop nested within an outer loop)
       '(Inner loop performs a traversal, outer loop repeats the traversals and
       'increases the number of words involved in each traversal)​
       ​Initialise output string as null string​
       ​'(Outer loop)
       ​For each "word" in array of words​
           ​'(Inner loop - traverse from first "word" of array to current outer loop "word")   
           ​For each "word" from first to current outer loop "word"
               ​If current inner loop "word" is not the first in array of "words"
               ​    Add / separator to output string
               ​End If
               ​Add current inner loop word to output string
           ​Next inner loop "word"​
           If current outer loop "word" is not last in array of "words"
               ​Add , separator to output string
           ​End If​
       ​Next outer loop "word"​
       ​Write output string to worksheet

您需要弄清楚如何将上述内容表示为 VBA 变量和代码。如果您有任何问题,可以在评论中提出。

您可能会发现以下几个提示很有用:可以使用语句构建“单词”的可变长度数组REDIM PRESERVE;VBA 中的默认设置是从零开始对数组进行索引,因此数组 X 的第一个元素是 X(0),第二个元素是 X(1),等等,但您可以使用语句将其更改为从 1 开始索引OPTION BASE

答案2

尝试这个 CSE 公式B1

=TEXTJOIN(",",,LEFT(A1,FIND("@",SUBSTITUTE(A1&"/","/","@",ROW(INDIRECT("1:"&(LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))+1)))))-1))

在此处输入图片描述

相关内容