我绝对不是 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 中使用的程序结构类型,以将您的输入转换为所需的输出。
此结构执行两项任务:
输入被拆分成其组成“单词”(由 / 字符分隔的部分)。此任务的结果应为“单词”数组(或列表)
从第一个单词开始,反复遍历单词数组以构建输出。在每次遍历中,输出中的连续“单词”都用 / 字符分隔。第一次遍历在第一个单词后停止,第二次遍历在添加第二个单词后停止,第三次遍历在添加第三个单词后停止,依此类推。在每次遍历结束时,不使用 / 字符作为分隔符,而是使用逗号 (,)。在最后一次遍历结束时不使用逗号。
'(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
。