好的,所以我有一个非常具体的问题,希望可以解决,但我需要一些帮助。当我制作Macros时,我是一个完全的新手。
我有一位客户将长长的参考文献列表放在Excel的单个列中(通常,参考文献仅在一个单元格中)。我已经弄清楚了如何将引用列的选定部分合并到一个单元格中(请参阅下面的过程),但是我真正想做的是将其转换为可以立即执行的宏。
问题是我希望能够对所选内容运行宏,也就是说,我想选择单元格,并使宏仅在这些单元格上运行。然后,我可以选择单元格,运行宏,进行其他选择,运行宏等。这将极大地加快我的工作。
我的问题:我不知道如何使宏仅在选定内容上运行。我录制的宏仅能在录制宏时使用我所做的选择。有什么方法可以使Macro通用,因此我可以选择单元格,然后在它们上运行Macro?
在Excel中合并引用
注意:这仅适用于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”,所以我不知道这段代码实际发生了什么。
答案 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”右侧的一个单元格中。