下午好,
接收代码中的内存不足错误,是否有任何更改为代码的建议?
来自A列的输入被转移到2个不同的单元格。
输出1:将每个单元格值之间插入逗号的A列中的所有数据连接起来 输出2:连接来自A列的所有数据,插入逗号和引号 - 对于每个单元格值
由于
Sub Inserting_Commas()
' Macro to insert commas at the end of end cell value & to convert values from rows to single column
Range("A2").Select
Dim lastRow As Long
Dim outputStr As String
Dim outputStr2 As String
Dim rownumber As Long
Sheets("Sheet1").Select
lastRow = Range("A" & Rows.Count).End(xlUp).Row
' Seperate the column A by Commas
outputStr = Range("A2")
For rownumber = 3 To lastRow
outputStr = outputStr & "," & Range("A" & rownumber)
Next
Range("D2") = outputStr
' Seperate the Column with Quotes and Commas
Range("A2").Select
For rownumber = 2 To lastRow
Range("B" & rownumber).Value = "''" & Range("A" & rownumber) & "'"
Next
' --------------------------------------
outputStr2 = "'" & Range("B2")
For rownumber = 3 To lastRow
outputStr2 = outputStr2 & "," & Range("B" & rownumber)
Next
Range("D20") = outputStr2
End Sub
答案 0 :(得分:1)
正如共产国际所说,一个单元格只能容纳33,000个字符,当你的连接试图将更多的字符放入一个单元格时,你就会得到错误。
下面的代码与你所写的内容类似(尽管有些奇怪的单引号对我来说不合适,所以我删除了它们)但是在较少的代码行中,它也输出到单元格每当结果输出超过31000时,不超过单元格大小限制。
Sub Sample()
Dim WkSht As Worksheet
Dim Cl As Range
Dim StrOutput As String
Dim StrOutput2 As String
Dim LngRow As Long
Set WkSht = ThisWorkbook.Worksheets("Sheet1")
LngRow = 2
For Each Cl In WkSht.Range("A2:A" & WkSht.Range("A" & Rows.Count).End(xlUp).Row)
StrOutput = StrOutput & IIf(StrOutput = "", "", ",") & Cl
StrOutput2 = StrOutput2 & IIf(StrOutput2 = "", "", ",") & "'" & Cl & "'"
If Len(StrOutput) > 31000 Then
WkSht.Range("D" & LngRow) = StrOutput
WkSht.Range("E" & LngRow) = StrOutput2
StrOutput = ""
StrOutput2 = ""
LngRow = LngRow + 1
End If
DoEvents
Next
Set WkSht = Nothing
MsgBox "Done!"
End Sub
然后,您可以在SQL查询中运行每个输出单元格,但我怀疑您可以从查看整个过程中受益。这将是一个非常繁重的文本查询,根据使用的方法,您可能根本无法运行它。虽然 它们会出现,但它们会有不同的问题。
答案 1 :(得分:1)
根据您在@George's answer下的评论......
这段代码只是一个部分步骤。我正在使用输出数据和 从仪表板(类似于SQL的内部系统)中提取信息。 仪表板的工作方式类似于搜索引擎。如果我复制并粘贴 将单元格输出到仪表板 - 我可以分离所需的数据集。
...没有理由尝试将完整输出存储在Excel中的单元格中。 Excel单元格只能存储32,767 characters,因此无论构建字符串是否耗尽内存,您的输出都将被截断。
由于您似乎需要 Excel中的结果,只需将其写入文本文件:
Sub Inserting_Commas()
Dim fso As Object, outFile As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set outFile = fso.CreateTextFile("C:\Foo\bar.txt", True) 'Replace with your own path.
With Sheets("Sheet1")
Dim lastRow As Long, rownumber As Long
lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
For rownumber = 2 To lastRow
outFile.Write "'" & .Cells(rownumber, 1).Value & "'"
If rownumber <> lastRow Then outFile.Write ","
Next
End With
End Sub
答案 2 :(得分:0)
您的列表中有多少行?
罪魁祸首可能是那部分:
For rownumber = 3 To lastRow
outputStr = outputStr & "," & Range("A" & rownumber)
Next
在这里你连接字符串并使它变得越来越大。
如果你有很多行,那么你的内存就会耗尽。