簡體   English   中英

Excel返回表VBA中非零值的行和列標題

[英]Excel Return Row and Column Headers of Nonzero Values in Table VBA

我的桌子上有一堆零和值。 我想編寫一個遍歷表中每個單元格的代碼,當一個單元格具有非零值時,宏將列出每個非零單元格的行名和列名。

             Kroger Meijer Wholefoods Walmart     
Food           0      0       0         1         Food, Walmart
Electronics    0      1       0         1         Electronics, Meijer; Electronics Walmart
Gas            0      0       1         0         Gas, Wholefoods
Crafts         0      1       0         0         Crafts, Meijer

就代碼而言,除了選擇所有非零單元格外,我真的不知道該如何實現。

Sheets("NA_CM1").Select
ActiveSheet.ListObjects("ItI_COMPLETE_NACM1").Range.Select
For Each cell In Range("ItI_COMPLETE_NACM1")
If cell.Value <> 0 Then
    If my_range Is Nothing Then
        Set my_range = cell
    Else
        Set my_range = Union(my_range, cell)
        End If
End If

可能的Non-VBA解決方案將涉及使用反向數據透視圖來平展交叉表數據,然后在Value> 0的位置進行過濾。然后,每個Store中的所有Item的數量均應大於0。

最終結果是這樣的:

在此處輸入圖片說明

對於VBA解決方案,請嘗試一下。 根據您的示例表,它將復制到每一行的K列。

Sheets("NA_CM1").Select
ActiveSheet.ListObjects("ItI_COMPLETE_NACM1").Range.Select

For Each cell In Range("ItI_COMPLETE_NACM1")

    If cell.Value <> 0 Then

        Dim sValue As String
        sValue = Cells(cell.Row, 11).Value2

        If Len(sValue) = 0 Then

            Cells(cell.Row, 11).Value = Cells(cell.Row, 1).Value2 & "," & Cells(1, cell.Column).Value2

        Else

            Cells(cell.Row, 11).Value = sValue & "; " & Cells(cell.Row, 1).Value2 & "," & Cells(1, cell.Column).Value2

        End If

    End If

Next

不同的解決方案(給您一個選擇):)

Sub testing()
  Dim cVal As Variant, oVal() As Variant, i As Long, j As Long
  cVal = Sheets("NA_CM1").Range("ItI_COMPLETE_NACM1").Value
  ReDim oVal(1 To UBound(cVal), 1 To 1)
  oVal(1, 1) = cVal(1, UBound(cVal, 2))
  For i = 2 To UBound(cVal)
    oVal(i, 1) = cVal(i, 1) & ", "
    For j = 2 To UBound(cVal, 2) - 1
      If cVal(i, j) <> 0 Then
        oVal(i, 1) = oVal(i, 1) & cVal(1, j) & "; "
      End If
    Next
    oVal(i, 1) = Left(oVal(i, 1), Len(oVal(i, 1)) - 2)
  Next
  Sheets("NA_CM1").Range("ItI_COMPLETE_NACM1").Columns(UBound(cVal, 2)) = oVal
End Sub

假設您的第一個示例是整個表格(第1行=標題; col 1 =標題;最后一個col =輸出)。 因此, Sheets("NA_CM1").Range("ItI_COMPLETE_NACM1").Columns(UBound(cVal, 2)) = oVal將輸出作為一個col輸出到表的最后一個col(但您可以將oVal放在任意位置) ...對於大型表也應該非常快(如果要查看的列多於或少於4列也可以使用)...我只是檢查倒數第二個倒數第二個...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM