簡體   English   中英

如何使用匹配函數來獲取跨列的多個值的位置

[英]How to use match function to get the position of multiple values across columns

我正在使用一個數據集,出於此問題的目的,其值為0,1和-1。 我想運行兩個單獨的匹配函數。 我想找到包含1的所有列,然后找到包含-1的所有列。 我希望這些結果可以水平地放在新單元格中。 我一直在成功使用匹配功能,但只在每個號碼只出現一次時才會使用。

我已經廣泛搜索過,但我只能找到人們正在組合INDEX + MATCH( https://exceljet.net/formula/extract-multiple-matches-into-separate-columns )的案例。

 id   2001  2002  2003  2004  2005  2006  2007  2008 2009  2010  
  1      0     0     0     0     0    -1     0     0    1    0   
  2      0     0     0    -1     0     0     1     0    0    0     
  3      0     0     0    -1     0     0     0     1    0    0  
  4      0    -1     0     0     0     0     1     0    0    0   
  5      0     0     0     1     0     0    -1     1    0    0 

# Match function:

= MATCH(-1, B2:B11,0)
= MATCH(1, B2:B11,0)

# This would output, for example: 

 id   2001  2002  2003  2004  2005  2006  2007  2008 2009  2010  neg1.pos1 
  1      0     0     0     0     0    -1     0     0    1    0     6
1.pos1
  9

# But this doesn't work if there is more than one instance of -1 or 1, it just gives the index of the first column that contains either number.

我想要:

 id   2001  2002  2003  2004  2005  2006  2007  2008 2009  2010  neg1.pos1 
5      0     0     0     1     0     0    -1     1    0    0      7
1.pos1 1.pos2
   4     8

正如您所看到的,對我來說無關緊要的是列中的值,我只想要特定值所在的列號。如果每行有多個值,我想這樣做。

如果有一個公式可以做到這一點,請告訴我,如果我甚至在正確的軌道上使MATCH功能工作。 先感謝您!

你會反對使用VBA嗎? 我不確定如何在數組公式中可視化所有值,但我可以想到一種循環遍歷每一行並創建一個數組來填充每列#的方法。

我做了一些假設:

列“id”在A列中

標題在第1行

將有變量#行

不會有變量#列

Sub ColCheck()

Dim ColNum, rCount, i As Long
Dim OneArray, TwoArray As Variant

rCount = Sheet2.Range("A" & Rows.Count).End(xlUp).Row

i = 2

Do While i <= rCount

OneArray = ""
TwoArray = ""

For Each cell In Sheet2.Range("B" & i & ":K" & i)
    If cell.Value = -1 And OneArray = "" Then
        OneArray = cell.Column
    ElseIf cell.Value = -1 And OneArray <> "" Then
        OneArray = OneArray & ", " & cell.Column
    End If
Next


For Each cell In Sheet2.Range("B" & i & ":K" & i)
    If cell.Value = 1 And TwoArray = "" Then
        TwoArray = cell.Column
    ElseIf cell.Value = 1 And TwoArray <> "" Then
        TwoArray = TwoArray & ", " & cell.Column
    End If
Next

If OneArray = "" Then OneArray = "No value found"
If TwoArray = "" Then TwoArray = "No value found"

With Sheet2
    .Range("M1").Value = "-1 Position"
    .Range("M" & i).Value = OneArray
    .Range("N1").Value = "1 Position"
    .Range("N" & i).Value = TwoArray
End With

i = i + 1


Loop

End Sub

暫無
暫無

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

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