显示数组VBA excel中的某些值

时间:2016-09-05 11:16:00

标签: arrays excel vba

我正在尝试根据第一行和第一列在excel文件上显示多个值。我为我的价值观做了一个2D数组。 MyValue是一个InputBox变量,我在第一列上试图找到MyValue,我希望获得“ PSC ”,“ BCCH “等等列,基本上与基于第1列的过滤器相同,但只显示其他列中的某些值。我对此操作的输出在此图像中: enter image description here

然而,136,144和152这些是PSC值在我的源excel文件中的第2,3,4行,我不确定那些零是什么。我想将这些值一个接一个地显示在一起,我尝试了没有偏移方法,但如果我不使用它,我没有显示任何值。

Dim1 = wSht.Range("A2", wSht.Range("A1").End(xlDown)).Cells.Count
Dim2 = wSht.Range("A1", wSht.Range("A1").End(xlToRight)).Cells.Count

For i = 1 To Dim1
    For j = 1 To Dim2
        If wSht.Cells(i, 1) = MyValue Then
            If wSht.Cells(1, j) = "PSC" Then

                ReDim Preserve Matrice(0 To 5, 0 To Matrice_size)
                Matrice(0, Matrice_size) = wSht.Cells(i, j).value
                Matrice_size = Matrice_size + 1
            End If

            If wSht.Cells(1, j) = "BCCH" Then

                ReDim Preserve Matrice(0 To 5, 0 To Matrice_size)
                Matrice(1, Matrice_size) = wSht.Cells(i, j).value
                Matrice_size = Matrice_size + 1
            End If
        End If
    Next j

Next i

For k = LBound(Matrice, 1) To UBound(Matrice, 1)
    For l = LBound(Matrice, 2) To UBound(Matrice, 2)
        ThisWorkbook.Worksheets(1).Range("A2").Offset(k, l).value = Application.Transpose(Matrice(k, l))
    Next l

Next k

1 个答案:

答案 0 :(得分:1)

  1. 使用If切换第一个For j行,并使用End If切换相应的最后一个Next j,因此内部循环仅运行正确的行。
  2. 似乎数据从第2行开始,因此请使用For i启动2循环。
  3. 如果您只需要来自这两列的数据,您可以先在一个单独的循环中查找它们并保存它们的位置,这样您就不需要嵌套循环了。 (在这种情况下,我的第一点并不适用)。 你甚至不需要循环,你可以使用Excel的MATCH功能。
  4. 矩阵和转置似乎是一种矫枉过正。由于i确定kl,您可以删除此部分,并直接从i-j循环写入Worksheets(1)
  5. 矩阵中有五行,每五行输出一个正确的值,是不是可疑?
  6. 您似乎将值放入矩阵的行 0 1 ,然后从行 1 2 。这可能是该行充满0 s
  7. 的原因

    如果您可以提供您对精确源数据的期望,我可以为您提供更多帮助。但不知道,我的解决方案看起来像

    PSC_col = Application.WorksheetFunction.Match("PSC", wSht.Rows(1).EntireRow, 0)
    BCCH_col = Application.WorksheetFunction.Match("BCCH", wSht.Rows(1).EntireRow, 0)
    
    For i = 2 To wSht.[A2].End(xlDown).Row
        If wSht.Cells(i, 1) = MyValue Then
            ThisWorkbook.Worksheets(1).[A2].Offset(k, 0).Value = wSht.Cells(i, PSC_col).Value
            ThisWorkbook.Worksheets(1).[B2].Offset(k, 0).Value = wSht.Cells(i, BCCH_col).Value
            k = k + 1
        End If
    Next i