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好的,谢谢。“我会在一个小时内尝试这两种方法。”安德烈亚斯怀疑你会发现这两种方法在时间上有很大差异。两者都会很快。