Excel 获取数组中某个范围的非空单元格

Excel 获取数组中某个范围的非空单元格,excel,excel-2010,vba,Excel,Excel 2010,Vba,我正在尝试获取一个范围内的所有非空单元格 'get keywords - only non-empty values Dim sheetDataSource As String Dim LR As Long Dim keywords As Variant Dim strUrl As String ' Set sheetDataSource = "DataSource" LR = Range("A" & Rows.Count).End(

我正在尝试获取一个范围内的所有非空单元格

    'get keywords - only non-empty values
    Dim sheetDataSource As String
    Dim LR As Long
    Dim keywords As Variant
    Dim strUrl As String
  '  Set sheetDataSource = "DataSource"
    LR = Range("A" & Rows.Count).End(xlUp).Row
    Sheets("Settings").Range("A2:A" & LR).SpecialCells(xlCellTypeConstants, 23).Select
目前,我什么也没有得到。此外,我想将它们放入一个数组中,用for循环运行它们

有什么建议我做错了什么


感谢您的回复

我建议使用
Intersect
获取所有非空单元格:

With Sheets("Settings").Range("A2:A" & LR)
    Application.Intersect(.SpecialCells(xlCellTypeConstants), .SpecialCells(xlCellTypeVisible)).Select
End With
从这里,您可以在这个范围内循环,而不是存储为一个数组(除非有特定的原因需要它成为一个数组)。虽然我也建议不要使用.Select方法,但是应该将所需的范围设置为一个变量

Dim NonEmpties As Range

With Sheets("Settings").Range("A2:A" & LR)
    Set NonEmpties = Application.Intersect(.SpecialCells(xlCellTypeConstants), .SpecialCells(xlCellTypeVisible))
End With

我建议使用
Intersect
获取所有非空单元格:

With Sheets("Settings").Range("A2:A" & LR)
    Application.Intersect(.SpecialCells(xlCellTypeConstants), .SpecialCells(xlCellTypeVisible)).Select
End With
从这里,您可以在这个范围内循环,而不是存储为一个数组(除非有特定的原因需要它成为一个数组)。虽然我也建议不要使用.Select方法,但是应该将所需的范围设置为一个变量

Dim NonEmpties As Range

With Sheets("Settings").Range("A2:A" & LR)
    Set NonEmpties = Application.Intersect(.SpecialCells(xlCellTypeConstants), .SpecialCells(xlCellTypeVisible))
End With

我喜欢丹的答案,但以防你想尝试一下射程:

selectedRange = Application.Selection

For Each cell In selectedRange

    If cell <> "" Then Debug.Print cell

Next
selectedRange=Application.Selection
对于选定范围中的每个单元格
如果是单元格“”,则调试。打印单元格
下一个

突出显示工作簿中的一个区域,然后转到VB编辑器并运行代码。它应该打印所选范围内的所有内容,除了空白单元格。

我喜欢Dan的答案,但万一您想对范围进行一些试验:

selectedRange = Application.Selection

For Each cell In selectedRange

    If cell <> "" Then Debug.Print cell

Next
selectedRange=Application.Selection
对于选定范围中的每个单元格
如果是单元格“”,则调试。打印单元格
下一个

突出显示工作簿中的一个区域,然后转到VB编辑器并运行代码。它应该打印所选范围内的所有内容,除了空白单元格。

您应该得到什么?您是
。请选择
ingthem@Raystafarian我希望有一个数组,其中包含我可以循环使用的所有值。您希望通过上面的代码得到什么?你什么也得不到——你只是在选择它。@Raystafarian我希望它选择并将某个单元格中的所有字符串保存到一个数组中,然后我可以在下一步中循环它。但目前这并不奏效。是工作表上发生的动作。如果您需要执行其他操作,则需要将变量设置为该范围,而不是选择它。您应该得到什么?您是
。请选择
ingthem@Raystafarian我希望有一个数组,其中包含我可以循环使用的所有值。您希望通过上面的代码得到什么?你什么也得不到——你只是在选择它。@Raystafarian我希望它选择并将某个单元格中的所有字符串保存到一个数组中,然后我可以在下一步中循环它。但目前这并不奏效。是工作表上发生的动作。如果您需要执行其他操作,则需要将变量设置为该范围,而不是选择它。Thx为您的答案!请在您的答案中展示一个for-loop的例子!我尝试了你的例子,我也得到了错误:“参数不是可选的”Thx为您的编辑。我仍然得到:
对象变量或未设置块变量
。使用
非空
作为范围,您需要
将其设置为intersect。谢谢您的回答!请在您的答案中展示一个for-loop的例子!我尝试了你的例子,我也得到了错误:“参数不是可选的”Thx为您的编辑。我仍然得到:
对象变量或未设置块变量
。使用
非空
作为范围,您需要
将其设置为相交。