我希望能够选择任意数量的单元格(全部在同一行上),然后运行一个宏来连接所有突出显示的单元格,然后将所有剩余的单元格移开。
我的描述可能不太清楚 - 希望这更有意义:
在下面的示例中,我在第1列到第8列中有数据。 我将突出显示第1至第3列中的单元格,运行宏,并将突出显示的单元格中的值合并到左侧(中间有空格),并将剩余的单元格移过。
之前
Column1 Column2 Column3 Column4 Column5 Column6 Column7 Column8
A B C D E F G H
AFTER
Column1 Column2 Column3 Column4 Column5 Column6 Column7 Column8
A B C D E F G H
这可能与宏(我通过键盘快捷键执行)有关吗?我对excel和vba宏有一个大致的了解,但遗憾的是我不太清楚这是否实用或可能。
我发现了一些连接细胞数据的宏,但不是基于突出显示的细胞。任何意见,将不胜感激。谢谢。
答案 0 :(得分:2)
这肯定是可能的。执行取决于你想要“Hgihlight”细胞的方式。如果您选择它们,则只需在代码中使用.selection
即可。
这是我用来组合列的函数:
Function combineColumns(ByVal Columns As Variant, ByVal EmptyCol As Long) As String
Dim tempColumn As Long
Dim str As String
Dim base As Long
base = LBound(Columns) 'Columns could be 0 or 1 based array
str = "="
'compiles string formula for combining the columns
For i = base To UBound(Columns)
'tempColumn = Range(Columns(i) & "1").column
If i > base Then 'if i > base it means that the loop is not on the first run, so the "&" is added for concatenation
str = str & "&"" ""&RC[-" & (EmptyCol - Columns(i)) & "]"
Else
str = str & "RC[-" & (EmptyCol - Columns(i)) & "]"
End If
Next
combineColumns = str
End Function
该函数采用一组列号,并返回一个可插入单元格的字符串,以将传递的列合并到传递的空白列中。应该很容易适应您的解决方案。 (循环遍历.selection
中的列并将所有列号添加到数组中,然后传递给我的函数,并使用返回的字符串。)
如果要用颜色突出显示,则使用循环遍历行中的每个单元格并测试颜色。
For Each cell In activeCell.entireRow.Cells
if cell.interior.color = RGB() then 'insert rgb for highlighting color here
'add to array
end if
next
然后你将传递结果数组。然后在组合单元格后,使用.delete xlShiftToLeft
,它将删除单元格并将行上的剩余部分向左移动以填充空白。 (确保没有在该点选择组合数据的单元格。
注意:函数返回的字符串必须插入单元格(Cells(rownum, colnum).formulaR1C1 =
),因为如果您尝试在代码之外使用它,则会收到错误
答案 1 :(得分:2)
尝试一下:
Sub bigmac()
Dim r As Range, rDel As Range
Set r = Selection
Dim N As Long
N = r.Count
Set rn = r(N)
st = ""
For i = 1 To N
st = st & r(i).Value
Next i
r(1) = st
Set rDel = Range(r(2), r(N))
rDel.Delete shift:=xlToLeft
End Sub