Как использовать функцию соответствия, чтобы получить положение нескольких значений по столбцам - PullRequest
0 голосов
/ 12 апреля 2019

Я работаю с набором данных, который для целей этого вопроса имеет значения 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 работать. Заранее спасибо!

1 Ответ

0 голосов
/ 12 апреля 2019

Вы были бы против использования 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...