如何在excel上缩短此代码?

如何在excel上缩短此代码?,excel,Excel,是否可以在excel 2010中使此代码更短、更简单 =A1&B1&C1&D1&A2&B2&C2&D2&A3&B3&C3&D3&A4&B4&C4&D4&A5&B5&C5&D5&A6&B6&C6&D6&A7&B7&C7&D7 如果您能告诉我一种可能的缩短方法,我将不胜感激。您可以使用

是否可以在excel 2010中使此代码更短、更简单

=A1&B1&C1&D1&A2&B2&C2&D2&A3&B3&C3&D3&A4&B4&C4&D4&A5&B5&C5&D5&A6&B6&C6&D6&A7&B7&C7&D7

如果您能告诉我一种可能的缩短方法,我将不胜感激。

您可以使用类似MultiCat的UDF:

  'Purpose: Concatenate all cells in a range
  'Inputs:  rRng - range to be concatenated
  '         sDelimiter - optional delimiter
  '            to insert between cell Texts
  'Returns: concatenated string
  '*****************************************
  Public Function MultiCat( _
        ByRef rRng As Excel.Range, _
        Optional ByVal sDelim As String = "") _
             As String
     Dim rCell As Range
     For Each rCell In rRng
        If rCell.Value <> "" Then
         MultiCat = MultiCat & sDelim & rCell.Text
         End If
     Next rCell
     MultiCat = Mid(MultiCat, Len(sDelim) + 1)
  End Function
'用途:连接范围内的所有单元格
'输入:rRng-要连接的范围
'sDelimiter-可选分隔符
'在单元格文本之间插入
'返回:连接的字符串
'*****************************************
公共功能多播(_
ByRef rRng作为Excel.Range_
可选ByVal sDelim As String=“”)_
作为字符串
变暗rCell As范围
对于rRng中的每个rCell
如果rCell.Value为“”,则
MultiCat=MultiCat&sDelim&rCell.Text
如果结束
下一个rCell
MultiCat=Mid(MultiCat,Len(sDelim)+1)
端函数

在标准模块中,输入以下用户定义的功能:

Public Function KonKat(Rin As Range) As String
    Dim r As Range
    For Each r In Rin
        KonKat = KonKat & r.Value
    Next r
End Function
用户定义函数(UDF)非常易于安装和使用:

  • ALT-F11将显示VBE窗口
  • ALT-I ALT-M打开一个新模块
  • 粘贴内容并关闭VBE窗口
  • 如果保存工作簿,则自定义项将与工作簿一起保存。 如果在2003年以后使用Excel版本,则必须保存 文件的格式为.xlsm而不是.xlsx

    要删除UDF,请执行以下操作:

  • 如上所述打开VBE窗口
  • 清除代码
  • 关闭VBE窗口
  • 要使用Excel中的自定义项,请执行以下操作:

    =KonKat(A1:D7)
    
    要了解有关宏的更多信息,请参阅:

    有关UDF的详细信息


    必须启用宏才能工作

    如果需要非宏/脚本选项,则

    =连接(A1、B1、C1、D1、A2、B2、C2、D2、A3、B3、C3、D3、A4、B4、C4、D4、A5、B5、C5、D5、A6、B6、C5、D6、A7、B7、C7、D7)

    稍微短一点,简单一点


    不确定这是不是你想要的?:)

    使用变体数组是避免潜在昂贵的范围循环的快速方法

    Sub Moved()
    Dim X
    Dim lngCnt As Long
    Dim StrIn As String
    X = Range("A1:D7")
    
    For lngCnt = 1 To UBound(X, 1)
    StrIn = StrIn & Join(Application.Index(X, lngCnt))
    Next
    
    End Sub
    

    你的表演比加里的快50%。虽然他有一个新的:)还没试过。。。