这是我最初提出的问题的后续问题,它帮助我解决了脚本的第一部分:Autofill unknown amount of cells。
脚本的第二部分是连接未知数目的单元格。
使用第一个问题的逻辑,我尝试将脚本更改为此myconcatenate = ActiveCell.FormulaArray = "=Concatenate("A5", mylastcell_4)"
但这会导致语法错误。
最初,我获得了这段脚本,该脚本本身可以很好地工作,但是当添加到脚本底部时却无法工作
Do
myconcatenate = myconcatenate & ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Loop Until ActiveCell.Address = mylastcell_5
Range("A5").Select
ActiveCell.Value = myconcatenate
这会给出运行时错误'1004'应用程序定义的错误或对象定义的错误,并且会转到第5行的最后一个单元格(即使我目前在第1行中只占用了5个) ),并且在通过所有单元格时不执行任何操作。有时它会不执行脚本的第一位(在单元格值中添加“”)。
这是我完整的上下文脚本:Screenshot of full script
最终,我试图将abcdedf列表中的“ a”,“ b”,“ c”,“ d”,“ e”,“ f”放入一个单元格中。
最终目标图片:
第5格D给出了我想要的最终答案,E5为 mylastcell_5
这是我在VBA上的第一天,我花了一整天的时间在谷歌上搜索并回答问题,但这对我没有任何帮助。
更新:我已经声明了mylastcell_5,这是我以前没有做过的。我现在在脚本中没有出现任何错误,它只是在A5处闲逛,而不是转到页面的尽头,但实际上并没有连接。
因此,我认为我需要以某种方式更改循环,以使其写入第5行,但从第4行读取...但我不知道该怎么做。 >
Option Explicit
Sub concat()
'
' concat Macro
' 'text','text'
'
' Keyboard Shortcut: Ctrl+Shift+C
'
With ThisWorkbook.Worksheets("Sheet1")
Dim mylastcell_1 As String, mylastcell_2 As String, mylastcell_3 As String, mylastcell_4 As String, mylastcell_5 As String, myconcatenate As String, myconcatenate1 As String
Range("A1").Select
Selection.End(xlToRight).Select
mylastcell_1 = ActiveCell.Address
Range(mylastcell_1).Select
ActiveCell.Offset(1, 0).Select
mylastcell_2 = ActiveCell.Address
Range(mylastcell_2).Select
ActiveCell.Offset(1, 0).Select
mylastcell_3 = ActiveCell.Address
Range(mylastcell_3).Select
ActiveCell.Offset(1, 0).Select
mylastcell_4 = ActiveCell.Address
Range(mylastcell_4).Select
ActiveCell.Offset(1, 0).Select
mylastcell_5 = ActiveCell.Address
myconcatenate = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Range("A2").Select
Selection.End(xlToRight).Select
Range("A2").Select
Range("A2", mylastcell_2).Select
Selection.FormulaArray = "''"
Range("A3").Select
Range("A3", mylastcell_3).Select
Selection.FormulaArray = "'',"
Range("A4").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(R[-2]C,R[-3]C,R[-1]C)"
Range("A4").Select
.Range(.Cells(4, "A"), .Cells(1, .Columns.Count).End(xlToLeft).Offset(3, 0)).Formula = "=concatenate(a2, a1, a3)"
Range("A5").Select
Do
myconcatenate = myconcatenate & ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Loop Until ActiveCell.Address = mylastcell_5
Range("A5").Select
ActiveCell.Value = myconcatenate
End With
End Sub
答案 0 :(得分:0)
我不知道您是否总是打算将元素连接成单引号括起来的逗号分隔的字符串,但是如果您在此处这样做,则有两种方法可以做到这一点(我发现它对于将内容快速插入其中很有用。 SQL语句)。一种连接垂直字符串(单列),另一种连接水平字符串(单行)。这将是一个标准的工作表功能,您可以在其中输入=hjoin(a1:h1)
或=vjoin(a1:a7)
Function hJoin(inRng As Range) As String
Dim c As Range
Dim outStr As String
Dim rng As Range
Set rng = Range(inRng.Address)
For Each c In rng.Columns
If c.Address = rng.Cells(rng.Cells.Count).Address Then
outStr = outStr & " '" & c.Value & "'"
Else
outStr = outStr & " '" & c.Value & "',"
End If
Next c
hJoin = outStr
End Function
Function vJoin(inRng As Range) As String
Dim c As Range
Dim outStr As String
Dim rng As Range
Set rng = Range(inRng.Address)
For Each c In rng.Rows
If c.Address = rng.Cells(rng.Cells.Count).Address Then
outStr = outStr & " '" & c.Value & "'"
Else
outStr = outStr & " '" & c.Value & "',"
End If
Next c
vJoin = outStr
End Function