lamer811 Пользователь Сообщений: 17 |
Здравствуйте, ув.специалисты
|
Юрий М Модератор Сообщений: 60587 Контакты см. в профиле |
Данные в первом столбце не вперемешку? |
Юрий М Модератор Сообщений: 60587 Контакты см. в профиле |
#3 15.10.2015 13:39:46 Наверное, я слишком сложный вопрос задал ))
|
||
Sanja Пользователь Сообщений: 14838 |
#4 15.10.2015 13:41:56 Тупо вложенными ЕСЛИ, или таблица соответствий + ВПР
Изменено: Sanja — 15.10.2015 13:42:20 Согласие есть продукт при полном непротивлении сторон. |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#5 15.10.2015 13:45:12 А можно такой формулой:
данные для создания группы должны начинаться со второй строки. Или, если с первой, то в первую строку в ячейку В1 надо будет сначала руками записать 1. А в В2 уже формулу, приведенную выше.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||
lamer811 Пользователь Сообщений: 17 |
#6 15.10.2015 13:49:35
Я пока ответа ждал, тоже сделал нечто аналогичное
Но считает некоторые ячейки почему-то неправильно… Прикрепленные файлы
|
||||
Юрий М Модератор Сообщений: 60587 Контакты см. в профиле |
lamer811, можно было обойтись и без цитирования — зачем оно в данном случае? |
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#8 15.10.2015 13:52:06
А почему именно макросами? Почему формулами не подходит? Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
lamer811 Пользователь Сообщений: 17 |
#9 15.10.2015 14:00:20
Попробовал воспользоваться вашей формулой, везде единицы в итоге |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
А Вы файл с реальной структурой данных выложите и увидите, что все работает. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
lamer811 Пользователь Сообщений: 17 |
#11 15.10.2015 14:14:26
Спасибо! Я сделал! Изменено: lamer811 — 15.10.2015 14:17:31 |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#12 15.10.2015 14:20:43 В Е12 вписываете 1.
изменил только диапазоны — сама формула такой и осталась(в смысле принципа). Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Кстати, для смешанного содержимого формула неверная. Правильная будет выглядеть так: =ЕСЛИ(СЧЁТЕСЛИ($D$12:D13;D13)=1;МАКС($E$1:E1)+1;ВПР(D13;$D$12:$E1001;2;0)) Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
Hugo Пользователь Сообщений: 23256 |
#14 15.10.2015 16:16:12 Если работаете под Виндой, то макрос луше писать на scripting.dictionary — заносите новое слово в словарь, присваиваете ему порядковый номер (можно последний или хранить в переменной, или ориентироваться на размер словаря). |
Вот, держите, нумерация продолжается даже после закрытия и открытия экселя. Весь код добавляется в модуль рабочей книги документа. И еще, учтите, копия сохраняется при каждом сохранении документа, следите за их количеством. Надеюсь, что все это для благих целей.
Добавлено через 3 минуты
Visual Basic | ||
|
Добавлено через 4 часа 38 минут
Visual Basic | ||
|
Добавлено через 1 минуту
Исправлены обнаруженные баги.
1
Присвоить порядковый номер файла к тексту в ячейке |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Sub Main()
Dim shAct As Worksheet, shTemp As Worksheet
Dim rngAct As Range, rngTemp As Range, arr(), dicRangs As Object
Dim lng_rang As Long, lr As Long, i As Long
‘1. Отключение монитора.
Application.ScreenUpdating = False
‘2. Vba-именование активного листа.
Set shAct = ActiveSheet
‘3. Vba-именование фрагмента на активном листе, в котором находятся данные.
lr = shAct.Columns(«B»).Find(What:=»*», LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Row
Set rngAct = shAct.Range(«A1:B» & lr)
‘4. Создание временного файла и vba-именование первого листа.
Set shTemp = Workbooks.Add.Worksheets(1)
‘5. Vba-именование фрагмента на временном листе, где будут данные.
Set rngTemp = shTemp.Range(«A1»).Resize(rngAct.Rows.Count, 2)
‘6. Копирование данных из активного листа на временный.
rngAct.Columns(2).Copy
rngTemp.Columns(2).PasteSpecial xlPasteValues
Application.CutCopyMode = False
‘7. Сортировка.
shTemp.Sort.SortFields.Add Key:=rngTemp.Columns(2), Order:=xlAscending
With shTemp.Sort
.SetRange rngTemp.Columns(2)
.Header = xlNo
.Orientation = xlTopToBottom
.Apply
End With
‘8. Копирование данных в vba-массив, чтобы ускорить.
arr() = rngTemp.Value
‘9. Удаление временного файла.
shTemp.Parent.Close SaveChanges:=False
’10. Вставка в массив в столбец слева рангов.
For i = 1 To UBound(arr, 1) Step 1
If arr(i, 2) <> 0 Then
‘ Если это первое число.
If lng_rang = 0 Then
lng_rang = lng_rang + 1
arr(i, 1) = lng_rang
Else
‘ Сравнение с вышестоящим.
If arr(i, 2) = arr(i — 1, 2) Then
arr(i, 1) = lng_rang
Else
lng_rang = lng_rang + 1
arr(i, 1) = lng_rang
End If
End If
End If
Next i
’11. Копирование данных из массива в словарь.
Set dicRangs = CreateObject(Class:=»Scripting.Dictionary»)
For i = 1 To UBound(arr, 1) Step 1
If dicRangs.Exists(Key:=arr(i, 2)) = False Then
dicRangs.Add Key:=arr(i, 2), Item:=arr(i, 1)
End If
Next i
’12. Копирование данных из эксель в массив для ускорения.
arr() = rngAct.Value
’13. Вставка рангов.
For i = 1 To UBound(arr, 1) Step 1
If dicRangs.Exists(Key:=arr(i, 2)) = True Then
rngAct.Cells(i, 1).Value = dicRangs.Item(Key:=arr(i, 2))
End If
Next i
’14. Включение монитора.
Application.ScreenUpdating = True
’15. Сообщение.
MsgBox «Готово.», vbInformation
End Sub
[свернуть]
In excel, how can I create auto numbering in column A ? eg. If I key in cell value in D1 with «BILLY», column A will populate sequence numbers from 1,2,3…..
I have googled and found the closet is using below formula but unable to accomplish what i want because in column C i have multiple data need to select.
https://superuser.com/questions/645859/auto-sequential-numbering-based-on-cell-criteria/645903
A B C
ABC JAMES
XYZ BOB
1 OXY BILLY
2 BNX BILLY
SDA MIKE
3 WXK BILLY
SAK JANE
Anyone have done this before with formula or vba? would appreciate your help, thanks.
asked Sep 20, 2017 at 15:30
2
Select the whole column A or just the cells that you want to fill in and enter the formula in the formula bar,
=IF(C1=D$1,COUNTIF(C$1:C1,D$1),"")
Press ctrl+enter
to fill the formula for the range of selected cells.
You could then change the value in cell D1
and see the output.
answered Sep 20, 2017 at 15:41
Gowtham ShivaGowtham Shiva
3,8022 gold badges11 silver badges27 bronze badges
6
Put the formula =IF(C1=$D$1,COUNTIF($C$1:C1,$D$1),"")
in A1 and copied down.
answered Sep 20, 2017 at 15:36
Vincent GVincent G
3,1531 gold badge13 silver badges30 bronze badges
0