【问题标题】:How select values from one column based on values from the another column in VBA?如何根据 VBA 中另一列的值从一列中选择值?
【发布时间】:2021-03-30 07:54:18
【问题描述】:

我有一个表“数据”,如果第 2 列中的值 = 1,我想根据条件在第 3 列中保存行值(显示行号)

下表显示以下信息。我想过滤这个表,只显示列 a、b、e(1、2、5 列顺序)。列的索引是从第一个表的第 3 列检索的,因为行的顺序与第二个表中的列的顺序相同。

我写了一个代码,但是,它只保存了 1 和 2 个值(来自第 3 列),但数字 5 也应该保存。 如何更改代码以从第一个表中获取正确的第三列值,然后过滤第二个表?

Dim ploeg As Range
   Dim ploeg2 As Range

   For v = 1 To 5
       If rng.Cells(v, 2) = 1 Then
           Set ploeg = Cells(v, 3)
           If ploeg2 Is Nothing Then
               Set ploeg2 = ploeg
           Else
               Set ploeg2 = Union(ploeg2, ploeg)
           End If
           
       End If
   Next v
   

Worksheets("Sheet1").Range("E1").Resize(ploeg2.Rows.Count, ploeg2.Columns.Count).Cells.Value = ploeg2.Cells.Value


End Sub

【问题讨论】:

  • 问题在于 ploeg2 将引用多个不连续的范围,而 ploeg2.Cells.Value 将只返回第一个范围的值,在本例中为 1,2。
  • 但是我怎样才能从第 3 列中选择必要的值呢?

标签: excel vba


【解决方案1】:

如果您只想要这些值,请使用数组来“收集”它们。

此代码假定数据在 A1:E5 范围内。


Dim ploeg As Range
Dim arrVals()
Dim cnt As Long
dim v As Long

   ReDim arrVals(1 To 1, 1 To 5)

   For v = 1 To 5
       If Cells(v, 2) = 1 Then
           Set ploeg = Cells(v, 3)
           cnt = cnt + 1
           arrVals(1, cnt) = ploeg.Value          
       End If
   Next v
   
   If cnt > 0 Then
       ReDim Preserve arrvals(1 To 1, 1 To cnt)
       Worksheets("Sheet1").Range("E1").Resize(cnt).Value = Application.Transpose(arrVals)
   End If

【讨论】:

  • 谢谢,但是否可以将它们全部保存在一个表格中,然后粘贴到 Excel 工作表而不是一步一步粘贴?
  • 代码不是一步一步“粘贴”的,它使用与原始代码相同的循环,然后将找到的值一次性直接放入E列。
  • 好。但是我可以将 Application.Transpose(arrVals) 保存到 VBA 内的表中以进一步使用该表,即Dim test As Range test.Value = Application.Transpose(arrVals)(代码无法正常工作,因为不知道如何将其保存在宏中以进行进一步修改。)而不是Worksheets("Sheet1").Range("E1").Resize(cnt).Value
  • 我不确定您所说的“桌子”是什么意思。您在数组 arrVals 中拥有所需的所有值,您可以在代码的其他地方引用它。你打算用原始代码中的 ploeg2 做什么?
  • ploeg2 中的逻辑如下:它连接Cells(v, 2) = 1 所在的所有行,对于不同的v 值,它使用Union 命令从Cells(v, 3) 收集值。很快,ploeg2 就是 ploeg 的所有真实值。我需要这些数字的主要任务在这里stackoverflow.com/questions/66854891/…
猜你喜欢
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 2020-04-22
  • 2012-05-29
  • 2015-08-02
相关资源
最近更新 更多