Vba 如何将所有单元格中的所有文本保存到一个变量中?
我有一个很大的范围,我需要找到所有长度在四到六位数之间的数字。Vba 如何将所有单元格中的所有文本保存到一个变量中?,vba,excel,Vba,Excel,我有一个很大的范围,我需要找到所有长度在四到六位数之间的数字。 我知道我可以使用正则表达式来实现这一点,但我不想循环每个单元格并检查所有单元格 我需要的是在记事本中选择复制粘贴范围,然后复制回变量。 这样,我就可以对变量进行正则化,并一次找到所有匹配项。 我不需要知道号码是在哪里找到的,我只需要号码 有没有办法将值复制到这样的字符串中 Dim text As String text = ActiveSheet.Range("C9:IQ56").Value 不兼容的数据类型。 若我使用varia
我知道我可以使用正则表达式来实现这一点,但我不想循环每个单元格并检查所有单元格 我需要的是在记事本中选择复制粘贴范围,然后复制回变量。
这样,我就可以对变量进行正则化,并一次找到所有匹配项。
我不需要知道号码是在哪里找到的,我只需要号码 有没有办法将值复制到这样的字符串中
Dim text As String
text = ActiveSheet.Range("C9:IQ56").Value
不兼容的数据类型。若我使用variant,我会得到一个列和单元格的数组 我加入阵列的尝试也没有成功
text = ActiveSheet.Range("C9:IQ56").Value
textstring = ""
For i = 1 To UBound(text, 1)
textstring = textstring & " " & Join(text(i))
Next i
有什么帮助吗?代码中有两个问题,声明和变量的维度。以下是您可以做的:
Dim Text() As Variant
Text = ActiveSheet.Range("C9:IQ56").Value
textstring = ""
For i = 1 To UBound(Text, 1)
For j = 1 To UBound(Text, 2)
textstring = textstring & " " & Text(i, j)
Next j
Next i
代码中有两个问题,声明和变量的维度。以下是您可以做的:
Dim Text() As Variant
Text = ActiveSheet.Range("C9:IQ56").Value
textstring = ""
For i = 1 To UBound(Text, 1)
For j = 1 To UBound(Text, 2)
textstring = textstring & " " & Text(i, j)
Next j
Next i
使用应用程序索引一次执行每一行:
text = ActiveSheet.Range("C9:IQ56").Value
textstring = ""
For i = 1 To UBound(text, 1)
textstring = textstring & " " & Join(application.Index(text,i,0))
Next i
使用应用程序索引一次执行每一行:
text = ActiveSheet.Range("C9:IQ56").Value
textstring = ""
For i = 1 To UBound(text, 1)
textstring = textstring & " " & Join(application.Index(text,i,0))
Next i
类似的方法,在循环后用分隔符连接行字符串 添加了一个
计时器
和使用分隔符(分隔符)以及行(例如“|”)和列(例如“,”)的功能。此外,我还演示了一种通过Application.Transpose()
在循环后立即连接所有行字符串的方法,这仅仅是出于艺术目的,尽管这并不比@Scott Craner的有效解决方案快也不慢:+)
代码
Sub arr2txt()
Const SEPROWS As String = "|" ' << change to space or any other separator/delimiter
Const SEPCOLS As String = "," ' << change to space or any other separator/delimiter
Dim v
Dim textstring As String, i As Long
Dim t As Double: t = Timer ' stop watch
v = ActiveSheet.Range("C2:E2000").Value ' get data into 1-based 2-dim datafield array
For i = 1 To UBound(v, 1)
v(i, 1) = Join(Application.Index(v, i, 0), SEPCOLS)
Next i
textstring = Join(Application.Transpose(Application.Index(v, 0, 1)), SEPROWS)
Debug.Print Format(Timer - t, "0.00 seconds needed")
End Sub
Sub-arr2text()
Const SEPROWS As String=“|””类似的方法,在循环后用分隔符连接行字符串
添加了一个计时器
和使用分隔符(分隔符)以及行(例如“|”)和列(例如“,”)的功能。此外,我还演示了一种通过Application.Transpose()
在循环后立即连接所有行字符串的方法,这仅仅是出于艺术目的,尽管这并不比@Scott Craner的有效解决方案快也不慢:+)
代码
Sub arr2txt()
Const SEPROWS As String = "|" ' << change to space or any other separator/delimiter
Const SEPCOLS As String = "," ' << change to space or any other separator/delimiter
Dim v
Dim textstring As String, i As Long
Dim t As Double: t = Timer ' stop watch
v = ActiveSheet.Range("C2:E2000").Value ' get data into 1-based 2-dim datafield array
For i = 1 To UBound(v, 1)
v(i, 1) = Join(Application.Index(v, i, 0), SEPCOLS)
Next i
textstring = Join(Application.Transpose(Application.Index(v, 0, 1)), SEPROWS)
Debug.Print Format(Timer - t, "0.00 seconds needed")
End Sub
Sub-arr2text()
Const SEPROWS As String=“|””如果您有Office 365,Excel现在将TEXTJOIN
作为工作表函数=TEXTJOIN(“,”,TRUE,C9:IQ56)
但是text
是二维的。我怀疑您是否将单元格读入vba变量数组(一行代码),然后使用regex代码(甚至使用Instr
循环数组元素,这取决于您的模式有多复杂),如果您有Office 365,Excel现在将TEXTJOIN
作为工作表功能=TEXTJOIN(“,”,TRUE,C9:IQ56)
但是text
是二维的。我怀疑您是否将单元格读入vba变量数组(一行代码),然后使用regex代码(甚至使用Instr
循环数组元素,这取决于您的模式有多复杂),你的速度会大大提高。如果我需要像这样循环每个值,那么它和循环工作表没有多大区别?还是这样?我希望有比循环每个值更快的东西。@Andreas循环一个内存数组将比循环一个表中的一个范围快很多。每一次对工作表的引用都会减慢代码的速度。@Scott好的,谢谢。“我会在一个小时内尝试这两种方法。”安德烈亚斯怀疑你会发现这两种方法在时间上有很大差异。两者都会很快。如果我需要像这样循环每个值,那么它和循环工作表没有多大区别?还是这样?我希望有比循环每个值更快的东西。@Andreas循环一个内存数组将比循环一个表中的一个范围快很多。每一次对工作表的引用都会减慢代码的速度。@Scott好的,谢谢。“我会在一个小时内尝试这两种方法。”安德烈亚斯怀疑你会发现这两种方法在时间上有很大差异。两者都会很快。