如何创建仅在选定单元格上运行的宏

时间:2018-11-12 23:57:54

标签: excel vba

好的,所以我有一个非常具体的问题,希望可以解决,但我需要一些帮助。当我制作Macros时,我是一个完全的新手。

我有一位客户将长长的参考文献列表放在Excel的单个列中(通常,参考文献仅在一个单元格中)。我已经弄清楚了如何将引用列的选定部分合并到一个单元格中(请参阅下面的过程),但是我真正想做的是将其转换为可以立即执行的宏。

问题是我希望能够对所选内容运行宏,也就是说,我想选择单元格,并使宏仅在这些单元格上运行。然后,我可以选择单元格,运行宏,进行其他选择,运行宏等。这将极大地加快我的工作。

我的问题:我不知道如何使宏仅在选定内容上运行。我录制的宏仅能在录制宏时使用我所做的选择。有什么方法可以使Macro通用,因此我可以选择单元格,然后在它们上运行Macro?

在Excel中合并引用

  1. 假设您要合并的参考文献位于E18:E27
  2. 在参考标记列旁边新建一列,以获取合并的参考
  3. 在要合并所有值的新列的空白单元格中,键入:
  4. = CONCATENATE(TRANSPOSE(
  5. 然后选择需要合并的单元格
  6. 公式将更改为= CONCATENATE(TRANSPOSE(E18:E27
  7. 请不要按Enter。
  8. 在最后一个单元格引用之后单击并单击空格键
  9. 键入&运算符
  10. 输入“,”(双引号,逗号,空格,双引号)
  11. 这将在每个引用后添加一个逗号和一个空格
  12. 选择TRANSPOSE(E18:E27&“,”,然后按F9键(F9用值替换公式)
  13. 这将其结果替换为TRANSPOSE(E18:E27&“” {“ E18,”,“ E19,”,“ E20,”,“ E21,”,“ E22,”,“ E23,”,“ E24 ,“,” E25,“,” E26,“,” E27,“}
  14. 现在删除大括号{和}
  15. 该公式现在看起来像= CONCATENATE(“ E18,”,“ E19,”,“ E20,”,“ E21,”,“ E22,”,“ E23,”,“ E24,”,“ E25, “,” E26,“,” E27,“
  16. 选择整个公式,包括=符号,然后按F9
  17. 按Enter
  18. 完成!

注意:这仅适用于256个参考。再有,该公式将引发错误。 如果有任何方法可以对其进行更改,那么它将在更多方面起作用,请告诉我

以下是我通过录制宏对上述过程进行编码而获得的代码,其中“相对引用”已打开。我不知道这是否对我有帮助。

Sub ConsolidateReferencesMacro2()
'
' ConsolidateReferencesMacro2 Macro
'

'
    ActiveCell.Offset(-1, 3).Range("A1").Select
    ActiveCell.FormulaR1C1 = _
        "U102, U103, U104, U105, U199, U200, U201, U202, U204, U205, U206, 
U207, U232, U233, U234, U235, U245, U246, U44, U45, U65, U66, "
With ActiveCell.Characters(Start:=1, Length:=128).Font
    .Name = "Calibri"
    .FontStyle = "Regular"
    .Size = 11
    .Strikethrough = False
    .Superscript = False
    .Subscript = False
    .OutlineFont = False
    .Shadow = False
    .Underline = xlUnderlineStyleNone
    .ThemeColor = xlThemeColorLight1
    .TintAndShade = 0
    .ThemeFont = xlThemeFontMinor
End With
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub

我看不到“ Concactencate”和“ Transpose”,所以我不知道这段代码实际发生了什么。

2 个答案:

答案 0 :(得分:0)

将以下代码粘贴到模块中:

Option Explicit

Sub concat_result()
Selection(Selection.Count, 1).Offset(0, 1) = concat_select(Selection)
End Sub

Function concat_select(R1 As Range) As String
concat_select = Join(Application.Transpose(R1.Value2), ",")
End Function

然后,您可以通过按钮或快捷方式选择范围后,将函数concat_select调用为标准工作表函数,或使用concat_result子项。

答案 1 :(得分:0)

我不确定100%是否能正确理解所有内容,但是正如我的评论中所提到的那样,似乎您可以利用循环。

据我所知,您是VBA游戏的新手。 因此,我向您解释了一些事情,dom不知道您是否已经知道某些术语。

Excel中的循环可用于范围,以获得出色的结果。这样一来,您就可以查看每个单元格,并根据该单元格确定值,格式或所需的任何内容。

您告诉我您的范围处于选择范围内,并且您想在其旁边添加代码。

您的代码因此可能类似于:

Sub ConsolidateValues()
Dim c As Range

MyRange = Application.Selection.Address(False, False, xlA1)
FrstC = Left(MyRange, Application.WorksheetFunction.Find(":", MyRange) - 1)
CVal = ""

For Each c In Selection

CValue = c
CVal = CVal & CValue & ", "

Next c

Range(FrstC).Offset(0, 1).EntireColumn.Insert
FrstCOff = Range(FrstC).Offset(0, 1).Address(False, False, xlA1)
Range(FrstCOff).Value = CVal

End Sub

这会将您的范围合并到“ E17”右侧的一个单元格中。