Справочная информация:
Столбец [3] таблицы / списка объектов состоит из подписей к учетным записям.
Столбец [4] состоит из типов учетных записей.
Ограничения таблицы:
В таблице допускаются только уникальные значения в столбце [3]. Это означает, что, если «Расход по заработной плате» уже используется для типа счета «PL», его нельзя использовать для других типов счетов, кроме «PL».
Примеры:
Я проиллюстрировал два примера на скриншоте.
1. Пример: «Расходы на заработную плату» обозначены как «PL», «BS» и «Others». (желтый)
2. Пример: «Прочие расходы» относятся к «BS» и «PL». (красный)
Вариант использования / желаемое решение:
Если заголовок уже указан для указанного c Тип учетной записи и найден связанный с другим типом учетной записи. Заголовок должен получить число в конце, считая вверх.
Пример 1:
Расход на заработную плату // PL
Расход на заработную плату1 // BS
Payroll Expense2 // Прочие
Пример 2:
Прочие расходы // BS
Прочие расходы1 // PL
То, что я сделал до сих пор. Я также подумал о функции, которая сообщает алгоритму, что один «дубликат» уже найден или нет.
Подсказка: существуют только «PL», «BS» и «Others» - всего 3 типа счетов, это означает, что максимальное целое число в конце заголовка будет "2".
Sub checkDuplicateCaptionsWithinAccountType()
Call declareVariables
Dim sSearchCaption As String
Dim sSearchAccountType As String
counter = 0
For n = 1 To 2
counter = counter + 1
With LObjAccounts
For i = 1 To .DataBodyRange.Rows.Count
sSearchCaption = .DataBodyRange.Cells(i, 3)
sSearchAccountType = .DataBodyRange.Cells(i, 4)
For j = 1 To .DataBodyRange.Rows.Count
If UCase(sSearchCaption) = UCase(.DataBodyRange.Cells(j, 3)) Then
If UCase(sSearchAccountType) <> UCase(.DataBodyRange.Cells(j, 4)) Then
.DataBodyRange.Cells(j, 3) = .DataBodyRange.Cells(j, 3) & counter
End If
End If
Next j
Next i
End With
Next n
MsgBox "done."
End Sub
Function isAlreadyFound(ByVal sFind As String, ByRef arr) As Boolean
End Function