我希望有人能够了解如何满足以下 Excel 宏要求。
起始条件: A 列中文本值的数量可变。
建议的解决方案: 我希望能够在 A 列中选择可变个连续单元格,然后将文本连接起来,并用逗号和 分隔成相邻的单列到 B 列最顶部的单元格。
示例: 将在工作表上选择 A2-A4。 运行宏后,B2 的内容(紧邻所选内容的顶部)将包含“A2、A3、A4”形式的文本。
选择A5-A10: 运行宏后,B5(紧邻所选内容顶部)的内容将包含“A5、A6、A7、A8、A9、A10”形式的文本。
令我苦恼的是如何利用多重选择的可变性,此外,我不清楚如何处理 Excel 宏中的循环。我拥有计算机科学学位,但最终在基础设施领域工作,所以我有点生疏。有人可以帮忙吗,这每天都会节省我大量的时间。感谢您的回复。
最佳答案
下面的代码可以满足您的要求。我没有添加太多评论,因为我不确定什么级别的评论是合适的。例如,如果你的计算机科学学位允许你猜测,我不想解释每个陈述的目的。我还怀疑你的问题不仅仅是显而易见的。例如,我是否应该将其设为一个函数,并将工作表和行号作为参数传递。请带着问题回来,我会根据需要改进我的答案。
Option Explicit
Sub JoinCells()
Dim ColFirst As Long
Dim ColLast As Long
Dim JoinedValue As String
Dim RowCrnt As Long
Dim RowFirst As Long
Dim RowLast As Long
RowFirst = Selection.Row ' First row of selection
' Selection.Rows.Count returns the number of rows in the selection.
' Warning! You can fool this code by making multiple selections.
RowLast = RowFirst + Selection.Rows.Count - 1
ColFirst = Selection.Column
ColLast = ColFirst + Selection.Columns.Count - 1
If ColFirst <> 1 Or ColLast <> 1 Then
Call MsgBox("Please select a range within column ""A""", vbOKOnly)
Exit Sub
End If
With Worksheets("xxxxxxx") ' Worksheet of your choice.
JoinedValue = .Cells(RowFirst, "A").Value
For RowCrnt = RowFirst + 1 To RowLast
JoinedValue = JoinedValue & "," & .Cells(RowCrnt, "A").Value
Next
.Cells(RowFirst, "B").Value = JoinedValue
End With
End Sub
关于用于选定区域串联的 Excel 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10013853/