#arrays #excel #if-statement #excel-formula #formula
#массивы #excel #if-оператор #excel-формула #формула
Вопрос:
У меня есть две формулы, которые я хотел бы объединить в одну, но не знаю, как это сделать. Мне нужно отфильтровать пустые ячейки и удалить дубликаты.
Пример данных:
Первая формула для удаления пробелов такова:
=IFERROR(INDEX($A$1:$A$500,SMALL(IF($A$1:$A$500<>"",ROW($A$1:$A$500)-ROW($A$1) 1),ROW(A1))),"")
Вторая формула устранит любую дублированность.
=IF(COUNTIF(A$1:A1,A1)=1,A1,"")
Спасибо!
Комментарии:
1. Я думаю, может быть полезно, если вы опубликуете какой-нибудь пример данных о том, как работает эта формула и как вы ее применяете.
2. извините, что не предоставил достаточно информации. Вот изображение образца данных. В столбце A у меня есть данные, которые содержат дубликаты, мне нужно вывести, как показано в столбце B. В основном пытаюсь воспроизвести функцию удаления дублирования с помощью формулы. i.imgur.com/0ITFThB.jpg
Ответ №1:
Вот решение задачи, как я понял это вчера:
Удалите «пробелы»: =substitute(A1," ","")
ваш счетный =IF(COUNTIF(A$1:A1,A1)=1,A1,"")
Вместе: =substitute(IF(COUNTIF(A$1:A1,A1)=1,A1,"")," ",""))
Значения, которые отличаются только пробелами, будут отображаться как разные!
Если у вас есть значения, которые равны после подстановки (например, «b b» и «bb»)
тогда вам нужны две строки, и вам нужно прибегнуть к замене.
Тогда нет способа объединить две формулы без некоторой дополнительной работы.
(например, решение vba: замена, обращение и вывод).
Вот как я бы решил это с помощью vba:
Option Explicit
Sub sample_values()
Range("A1").Value = "Values"
Range("A2").Value = "2023"
Range("A3").Value = "2141"
Range("A4").Value = "2156"
Range("A5").Value = "2175"
Range("A6").Value = "2300"
Range("A7").Value = "23 00"
Range("A8").Value = "23 0 0 "
Range("A9").Value = "2181"
Range("A10").Value = "2188"
Range("A11").Value = "2204"
Range("A12").Value = "2207"
Range("A13").Value = "2211"
Range("A14").Value = "22 11"
Range("A15").Value = "2 2 1 1"
Range("A16").Value = "221 1"
Range("A17").Value = "221 1"
Range("A18").Value = "2236"
Range("A19").Value = "2239"
Range("A20").Value = "2250"
End Sub
Sub rb_s_ouv()
'remove_blanks_and_sort_and_output_unique_values()
Dim myInput As Range
Dim sortedInput As Range
Dim outputRng As Range
Dim lastRow As Long
Dim cell As Range
Dim uniqueCt As Integer
Dim noBlanks_Column As Boolean
lastRow = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Set myInput = Range(Cells(2, 1), Cells(lastRow, 1))
'Debug.Print myInput.Address
noBlanks_Column = True 'no blanks in an individual column
'noBlanks_Column = False 'no blanks in the original column
'substitute blanks
If noBlanks_Column Then myInput.Offset(-1, 2).Value = "no_blanks"
For Each cell In myInput
If noBlanks_Column Then
cell.Offset(0, 2).Value = Replace(cell.Value, " ", "")
Else
cell.Value = Replace(cell.Value, " ", "")
End If
Next cell
'sort input
If noBlanks_Column Then
myInput.Offset(0, 2).Sort myInput.Offset(0, 2), xlAscending
Set sortedInput = myInput.Offset(0, 2)
Else
myInput.Sort myInput, xlAscending
Set sortedInput = myInput
End If
'output unique values
sortedInput.Offset(-1, 2).Range("A1").Value = "unique values"
Set outputRng = sortedInput.Offset(0, 2).Range("A1")
uniqueCt = 0
For Each cell In sortedInput
If cell.Value <> cell.Offset(1, 0).Value Then
outputRng.Offset(uniqueCt, 0).Value = cell
uniqueCt = uniqueCt 1
End If
Next cell
End Sub
Подробнее о столбце «без пробелов»:
Комментарии:
1. если я это сделаю, останутся пустые строки?
2. Да! Вы правы! Пожалуйста, найдите выше решение на vba! Вы также можете использовать vba для подстановки и сводку для отображения уникальных значений!
3. большое вам спасибо, но я не ищу решение на vba, хотя мне нужно, чтобы оно было формулой. Благодарим вас за предоставление решения vba.