Service M Forum
Пятница, 09.12.2016, 08:45
START-SM МИГРАЦИЯ ENGLISH INSURANCE ЗАРАБОТОК X1-MSB МАГАЗИН ФОРУМ АЗАРТ INFO-СТОК $ RUSBUX $
ФОРУМ САЙТА START-SM.AT.UA
Регистрация Новые сообщения Правила форума Участники Поиск ВХОД RSS
Страница 1 из 11
Форум » EDUCATION » Excel VBA » Строки - Strings (VBA)
Строки - Strings
start-sm Дата: Воскресенье, 20.05.2012, 13:29 | Сообщение # 1
Admin
Administrator
Posts: 574
Reputation: 3
Status: Offline
* Найти символ в строке: Application.WorksheetFunction.Find("Какой символ", Какая строка, С какого символа начать счёт)

Пример:

Sub Find_Symbol_In_String()

Dim xstr As String
Dim index_1 As Integer

Cells(1, 1).Value = "Пример для разбора:"
Cells(1, 2).Value = "boy@mail.ru"

xstr = Cells(1, 2).Value
index_1 = Application.WorksheetFunction.Find("@", xstr, 1)

Cells(2, 1).Value = "Позиция @ символа:"
Cells(2, 2).Value = index_1

index_1 = Application.WorksheetFunction.Find(".", xstr, 1)
Cells(3, 1).Value = "Позиция . символа:"
Cells(3, 2).Value = index_1

End Sub


Пояснение (построчно):

1. Открываем подпрограмму под условным именем Find_Symbol_In_String без параметров ()
2. Задаём переменные xstr - строковую для перевода в неё содержимого из выбранной клетки Excel
3. Задаем переменную index_1 - числовую для счёта символов в строке
4. Записываем автоматически для удобства пояснение "Пример для разбора" в клетку А1, она же (1, 1) (это можно вообще не писать)
5. Записываем автоматически в клетку В1, она же (1, 2) сам пример для разбора (пример можно изменять)
6. Содержимое клетки В1, она же (1, 2) переносим в нашу строковую переменную xstr (теперь xstr равна тому, что написано в клетке В1)
7. С помощью специального свойства Application.WorksheetFunction.Find ищем нужный символ, например @ в строке В1 (она же в переменной xstr). Для этого в скобках надо указать такие данные: ("Какой символ", Какая строка, С какого символа начать счёт) то есть ("@", xstr, 1) то есть ищем собаку @ строке xstr начиная с первого символа. Результат вычисления присваеваем нашей числовой переменной index_1
8. Записываем автоматически для удобства пояснение "Позиция @ символа:" в клетку А2, она же (2, 1) (это можно вообще не писать)
9. Выводим в клетку В2, она же (2, 2), число из переменной index_1, которое соответствует позиции собаки @ в текствовой строке условного e-mail адреса.
10. Т.к. переменная index_1 уже вывела свое значение в Excel, то теперь ей можно присвоить другое значение, что мы и делаем, используя её для поиска теперь другого символа. Итак, в строках 10, 11 и 12 мы повторяем процедуру аналогичную поиску собаки @, только теперь мы ищем, например, точку . в нашем e-mail адресе и узнаем её позицию (местоположение) в строке e-mail адреса. Результаты выводим в клетки А3 и В3, они же (3, 1) и (3, 2)
...
13. Конец подпрограммы (он отпечатывается обычно автоматически после того, как вы задали имя подрограммы - смотри п.1)


Скачать файл с примером: DOWNLOAD
 
start-sm Дата: Пятница, 01.06.2012, 22:23 | Сообщение # 2
Admin
Administrator
Posts: 574
Reputation: 3
Status: Offline
* Удалить пустые ячейки или строки: ActiveCell.Delete или ActiveCell.EntireRow.Delete

Пример:

Sub DeleteBlankCells()

scell = ActiveCell.Address
scell = Range(scell).Column

lastrow = Cells(1000, scell).End(xlUp).Row

xrow = 1

Do Until xrow = lastrow

If Cells(xrow, scell).Value = "" Then

Cells(xrow, scell).Select
ActiveCell.Delete
'ActiveCell.EntireRow.Delete - to delete the whole row


xrow = xrow - 1
lastrow = lastrow - 1


End If

xrow = xrow + 1
Loop

End Sub

Пояснение (построчно):

1. Открываем подпрограмму под условным именем DeleteBlankCells без параметров ()
** В данном примере мы сделаем возможность удалять пустые ячейки в том столбце, клекту которого мы выберем перед запуском программы.
*** Переменные в данном коде для примера не определены, т.е. по умолчанию их тип будет Variant.
2. Присвоим переменной scell адрес той клетки, которую мы выбрали (сделали активной, щелкнули по ней мышкой) перед запуском программы.
Адрес имеет формат $А$1 (Клетка А1)
3. Этой же переменной задаём новое значение - номер колонки выбранной нами клетки, исходя из полученного адреса.
4. Вычисляем в нашей колонке строку (ряд, Row) самой нижней клетки, которая не пустая. Делаем это путём проверки клеток колонки scell от 1000 ряда: Cells(1000, scell) вверх до конца (до последней записи) в столбце: End(xlUp). Полученный номер ряда присваиваем переменной lastrow.
5. Создаём переменную xrow, с помощью которой будем считать проверенные строки (ряды). Присваиваем ей 1, т.к. будем считать с первого ряда.
6. Открываем цикл Do ... Loop : Делай до тех пор пока xrow не будет равна lastrow
7. Проверяем: "Если" клетка ряда xrow и колонки scell пустая, тогда ...
8. ... эту клетку выделить
9. Выделенную клетку удалить. !! Либо, если надо удалить не только 1 клетку, а всю строку, то вместо этого кода используем закомментированные код ниже
10. Счётчик проверенных рядов клеток xrow уменьшаем на 1, т.к. после удаления и сдвига клеток вверх нам необходимо проверить эту же самую позицию еще раз, потому что на смену может прийти еще одна пустая клетка, которая была ниже (см. файл - образец).
11. Таким же образом уменьшаем на еденицу и номер последней клетки lastcell, которую нужно проверять.
12. Закрываем блок проверки "Если".
13. Увеличиваем значение счётчика xrow проверяемых клеток (т.е. номеров их ряда) на единицу, чтобы перейти к следующей клетке ниже. !! Еще раз обратите внимание, что если предыдущая клетка была пуста, то xrow мы специально на 1 уменьшили, чтобы сейчас, при её обратном увеличении на 1, в итоге она остатась неизменной по номеру своего ряда.
14. Закрываем цикл Do ... Loop
15. Конец подпрограммы (он отпечатывается обычно автоматически после того, как вы задали имя подрограммы - смотри п.1)


Скачать файл с примером: DOWNLOAD
 
start-sm Дата: Суббота, 02.06.2012, 21:12 | Сообщение # 3
Admin
Administrator
Posts: 574
Reputation: 3
Status: Offline
* Посчитать количество клеток в колонке, в которых имеются повторяющиеся данные: WorksheetFunction.Countif(Columns(a), b)

Использование:

Строка в программном коде может выглядеть примерно так:

с = WorksheetFunction.CountIf(Columns(2), b) - 1

где

Columns(2) - означает, что искать будем во второй колонке, т.е. колонке "В"

b - это строковое значение того текста клетки, который мы будем сравнивать. Например, b = "$10,00"

- 1 - означает, что считать мы будем количество всех одинаковых значениий в других клетках столбца, кроме первой, т.е. считает только количество повторов (дубликатов). Если убрать - 1, то считаем вместе с первым значением, т.е. с оригиналом.

с - это результат вычисления (число), который и будет равен сумме клеток с одинаковыми значениями.
 
start-sm Дата: Воскресенье, 03.06.2012, 13:17 | Сообщение # 4
Admin
Administrator
Posts: 574
Reputation: 3
Status: Offline
* Удалить строки из заданной таблицы, в которых имеются повторяющиеся данные (дубликаты): АЛГОРИТМ

Пример:

Sub Remove_Duplicates()

Dim lastcell As Integer, i As Integer, j As Integer

lastcell = Cells(1, 1).End(xlDown).Row

Dim DataArray() As String
ReDim DataArray(lastcell, 3)

i = 1

Do Until i > lastcell

DataArray(i, 1) = Cells(i, 1).Value
DataArray(i, 2) = Cells(i, 2).Value
DataArray(i, 3) = Cells(i, 3).Value

j = i + 1

Do Until j > lastcell

If Cells(j, 1).Value = DataArray(i, 1) And Cells(j, 2).Value = DataArray(i, 2) And Cells(j, 3).Value = DataArray(i, 3) Then
Cells(j, 1).Select
Selection.EntireRow.Delete

j = j - 1
lastcell = lastcell - 1
End If

j = j + 1

Loop

i = i + 1
Loop

End Sub


Пояснение (построчно):

1. Открываем подпрограмму Sub Remove_Duplicates()
2. Задаём переменные, которые мы в дальнейшем будем использовать. В реальности эта строка пишется уже в самом конце программирования, когда мы определились со всеми необходимыми переменными.
3. Находим номер самой нижней строки в столбце А, где есть какие-либо данные.
4. Задаём строковый массив.
5. Исходя из номера самой нижней строки, где есть какие-либо данные, и зная, что число колонок в проверяемой таблице данных будет, например, 3, уточняем наш строковый массив, делаем его 2-х мерным в 3 колонки и lastcell строк. Ремарка: для того, чтобы в массиве было 3 колонки, надо было указать число 2 (т.к. в массиве колонки нумеруются 0, 1, 2), но для визуального удобства (читабельности) кода, мы числом 3 определим число колонок в массиме равным 4 (0, 1, 2, 3), при этом в дальнейшем не будем пользоваться нулевой колонкой.
6. Присваиваем переменной i единицу, т.к. будем считывать данные с первой строки таблицы.
7. Задаём цикл: до тех пор, пока i не будет больще, чем lastcell
8. Заносим в наш массив данные из первой строки первой колонки таблицы в первую (i = 1) строку колонки с индексом 1.
9. Заносим в наш массив данные из первой строки второй колонки таблицы в первую (i = 1) строку колонки с индексом 2.
10. Заносим в наш массив данные из первой строки третьей колонки таблицы в первую (i = 1) строку колонки с индексом 3.
11. Теперь будем сравнивать данные. Для этого присвоим переменной j значение, которое будет на 1 больше, чем i, т.к. сравнение мы будем проводить строки таблицы (например, второй) с предыдущей строкой массива (например, первой).
12. Задаём цикл внутри предыдущего цикла: до тех пор, пока j не будет больще, чем lastcell
13. Теперь проверяем, Если (If) значение в ячейке с координатами строка j, столбец 1 из таблицы равно значению из ячейки с координатами строка i, столбец 1 из массива, А ТАКЖЕ (And) значение в ячейке с координатами строка j, столбец 2 из таблицы равно значению из ячейки с координатами строка i, столбец 2 из массива, А ТАКЖЕ (And) значение в ячейке с координатами строка j, столбец 3 из таблицы равно значению из ячейки с координатами строка i, столбец 3 из массива, ТОГДА (Then)
14. Это означает что строка, например, 2 из таблицы равна по содержанию строке 1 из массива (а значит и из таблицы), следовательно она является дубликатом и её надо удалить. Ячейку с координатами строка j столбец выделить (Select)
15. Учитывая выделенное (Selection), полностью всю строку (.EntireRow) удалить (.Delete)
16. Уменьшаем значение j на 1, т.к. в дальнейшем нам надо переходить на следующую строку, но, т.к. все строки сдвинулись на одну позицию вверх, нам надо также проверить, а не попал ли опять в эту же самую строку новый дубликат.
17. Точно так же, раз 1 строка удалилась и все строки смеслились вверх, то уменьшаем на единицу и номер последней строки lastcell, которую необходимо проверить. Если этого не сделать, то когда программа дойдёт до строки, которая окажется пустой, она начнем сравнивать ту пустую строку со следующими пустыми строками, принимать их за дубликаты пустой строки и бесконечно их удалять.
18. Конец блока проверки Если (End If).
19. Увеличиваем j на 1, чтобы проверять следующую строку в таблицеБ как было сказано в п.17.
20. Закрываем внутренний цикл см. п.12.
21. Увеличиваем i на 1, чтобы перейти к следующей строке из массива. Суть этого в том, что мы берем сначала 1-ю строку и сравниваем всё, что под ней, затем 2-ю и сравниваем всё, что под второй строкой, затем -3ю и т.д. пока не дойдём до последней строки (lastcell).22. Закрываем цикл см.п.7.
23. Закрываем подпрограмму.


Скачать файл с примером: DOWNLOAD
 
start-sm Дата: Среда, 13.06.2012, 20:30 | Сообщение # 5
Admin
Administrator
Posts: 574
Reputation: 3
Status: Offline
* Как разбить слово на буквы (или извлечь букву из слова): Mid(Текст, с какого символа, сколько символов вправо)

Пример:

Sub Extract_Letters_Out_Of_Word()

MyTxt = Cells(1, 1).Value

For i = 1 To Len(MyTxt)

Cells(2, i) = Mid(MyTxt, i, 1)

Next i

End Sub


Пояснение:

Введите в верхней левой ячейче (А1) документа Excel какое-нибудь слово, например QWERTY

MyTxt = Cells(1, 1).Value - переменная txt запомнит это ваше слово

For i = 1 To Len(txt) - устанавливаем цикл, которій будет считать от 1 до числа равного длине слова, которое вычисляется с помощью Len(MyTxt)

Cells(2, i) = Mid(MyTxt, i, 1) - осуществим запись во 2-ю строку i-го столбца (т.е. 1, 2, 3 ... и т.д. чему будет равно значение i) каждой буквы в каждую новую клетку, разбив наше слово с помощью Mid(MyTxt, i, 1) что означает, "определить (Mid)в нашем тексте MyTxt буквы, начиная с буквы под номером i и отступив вправо, например, на 1 букву"

Не забываем закрыть наш цикл словом Next

Скопируйте код программы, запустите его в VBA редакторе и увидите, что то слово которое вы ввели в ячейку "А1" будет разбито по буквам строкой ниже по одной букве в каждой клетке.
 
Форум » EDUCATION » Excel VBA » Строки - Strings (VBA)
Страница 1 из 11
Поиск:

    Copyright MyCorp © 2016 Бесплатный конструктор сайтов - uCoz