![](/img/trans.png)
[英]Find highest 3 values in a row and return corresponding column headers in Excel
[英]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.