我正在尝试在Excel VBA中创建一个简单的循环,该循环从一行中获取信息并将相同的信息复制到下一行(或插入一个新行),具体取决于特定单元格上的值。
例如,第1行具有这些值(房屋1a,3级)
然后在单元格H5上创建结果
(house 1a, bottom level)
(house 1a, mid level)
(house 1a, top level)
意味着房屋1a的每个等级被分成3排。然后想象一下,我会列出另外10个不同等级的房子,最多3个,随机。
对于括号感到抱歉,但这位编辑一直在想我正在编写代码。
任何帮助将不胜感激。
答案 0 :(得分:1)
我假设源列是列A(1),输出行是列B(2)。
问题的一个可能解决方案是使用正则表达式和while循环。
要在VBA中启用正则表达式,请进入编辑器(VBE)。
要运行代码,请创建一个单独的模块并插入:
Sub splitCol()
'Variables used in the regular expression
Dim re As New RegExp
Dim mc As MatchCollection
'Variables used for row looping
Dim sourceRow As Integer
Dim targetRow As Integer
'Variables used for output string
Dim numberOfLevels As Integer
Dim currentLevel As Integer
Dim houseName As String
'Regular expression patter
re.Pattern = "(.+)?\,+\s+?(\d+)+\s+?levels"
'With the asumption that Row 1 are headers I'm starting at row 2
sourceRow = 2
targetRow = 2
numberOfLevels = 0
'Loop through input row until blank is found
While (Cells(sourceRow, 1).Value <> "")
'Execute the regular expression
Set mc = re.Execute(Cells(sourceRow, 1).Value)
'Only create output string if regular expression was able to
'executed without a problem
If mc.Count > 0 Then
houseName = mc(0).SubMatches(0)
numberOfLevels = mc(0).SubMatches(1)
currentLevel = 1
While currentLevel <= numberOfLevels
Cells(targetRow, 2).Value = houseName & " , Level " & CStr(currentLevel)
targetRow = targetRow + 1
currentLevel = currentLevel + 1
Wend
End If
sourceRow = sourceRow + 1
Wend
End Sub