Уважаемые форумчане, обращаюсь к вам за помощью в написании макроса, так как в нем совсем не силен. Стоит задача, в приложенном файле, "01_Маршрут", в графу "R", проставить код маршрута, который берется из графы "O" по средствам макроса, т.е., у каждого направления, есть свой КОД, который и следует занести в столбик "Код маршрута" ®. Если это Чита, то код будет "Ч0155", если это Казань, то код будет "К0308", т.д. (коды в макрос, прописать вручную). Таблица большая, и количество строк, постоянно меняется, а вручную заносить данные, каждый раз, утомительно. Это еще не все, нужно еще из графы "N", если значение с минусом, то перенести в графу "S", но уже с плюсом, а если в графе "N" положительное значение, то данное значение, перенести в графу "T", так же с плюсом.
Уважаемые форумчане, обращаюсь к вам за помощью в написании макроса, так как в нем совсем не силен. Стоит задача, в приложенном файле, "01_Маршрут", в графу "R", проставить код маршрута, который берется из графы "O" по средствам макроса, т.е., у каждого направления, есть свой КОД, который и следует занести в столбик "Код маршрута" ®. Если это Чита, то код будет "Ч0155", если это Казань, то код будет "К0308", т.д. (коды в макрос, прописать вручную). Таблица большая, и количество строк, постоянно меняется, а вручную заносить данные, каждый раз, утомительно. Это еще не все, нужно еще из графы "N", если значение с минусом, то перенести в графу "S", но уже с плюсом, а если в графе "N" положительное значение, то данное значение, перенести в графу "T", так же с плюсом.
Дабы модераторы не высекли (Правила, п.5), есть вариант уйти под прикрытие фрилансеров - оформить заказ... ;) [offtop]http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=74575&TITLE_SEO=74575-podstavit-znachenie-i-formulu&MID=625251#message625251[/offtop]
Дабы модераторы не высекли (Правила, п.5), есть вариант уйти под прикрытие фрилансеров - оформить заказ... ;) [offtop]http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=74575&TITLE_SEO=74575-podstavit-znachenie-i-formulu&MID=625251#message625251[/offtop]TimSha
Согласен, это обычный ВПР, но при ВПР, нужно постоянно ссылаться на таблицу, в то время, как в тексте макроса, можно прописать параметры отбора. Что и хотелось бы сделать.
Согласен, это обычный ВПР, но при ВПР, нужно постоянно ссылаться на таблицу, в то время, как в тексте макроса, можно прописать параметры отбора. Что и хотелось бы сделать.amadeus017
Вот смотрите. У Вас есть файл dictionary.txt, лежащий в папке с макросом с форматом записи типа
Красноярск#K0309
Теперь делаем функцию, которая вернёт код маршрута по названию города
[vba]
Код
Private Function CityCode(City As String) As String
CityCode = "" On Error Resume Next Open ThisWorkbook.Path & "\dictionary.txt" For Input As #1 'Открываем файл на чтение If Err.Number <> 0 Then 'Если у кого-то шаловливые ручки, требуем вернуть всё на место Msgbox prompt:="Положи словарь на место и больше не трогай!" ThisWorkbook.Close End If Do While Not EOF(1) 'Крутимся в цикле до конца файла Line Input #1, CityCode If InStr(1,CityCode,City,vbTextCompare) = 1 And InStr(1,CityCode,"#",vbTextCompare) - 1 = Len(City) Then 'Проверяем, найдена ли нужная строка CityCode = Right(CityCode, InStr(1,CityCode,"#",vbTextCompare) + 1) 'Если да, то вырезаем код и выходим из цикла Exit Do Else CityCode = "" 'Если нет — сбрасываем возвращаемое значение End If Loop Close #1 If CityCode = "" Then Msgbox prompt:="Маршрута на " & City & " в списке нет, пополните список!" 'Проверяем, найден ли маршрут
End Function
[/vba]
И всю эту фигню крутим в цикле заполнения столбца
[vba]
Код
Sub CodeForCity
Dim i As Long
For i = 4 To ActiveSheet.UsedRange.rows.Count Cells(i, 15).Value = CityCode(Trim(Cells(i, 18).Value)) If Val(Cells(i, 14).Value) < 0 Then Cells(i, 19).Value = Abs(Val(Cells(i, 14).Value)) Else Cells(i, 20).Value = Val(Cells(i, 14).Value) End If Next i
End Sub
[/vba]
Вот смотрите. У Вас есть файл dictionary.txt, лежащий в папке с макросом с форматом записи типа
Красноярск#K0309
Теперь делаем функцию, которая вернёт код маршрута по названию города
[vba]
Код
Private Function CityCode(City As String) As String
CityCode = "" On Error Resume Next Open ThisWorkbook.Path & "\dictionary.txt" For Input As #1 'Открываем файл на чтение If Err.Number <> 0 Then 'Если у кого-то шаловливые ручки, требуем вернуть всё на место Msgbox prompt:="Положи словарь на место и больше не трогай!" ThisWorkbook.Close End If Do While Not EOF(1) 'Крутимся в цикле до конца файла Line Input #1, CityCode If InStr(1,CityCode,City,vbTextCompare) = 1 And InStr(1,CityCode,"#",vbTextCompare) - 1 = Len(City) Then 'Проверяем, найдена ли нужная строка CityCode = Right(CityCode, InStr(1,CityCode,"#",vbTextCompare) + 1) 'Если да, то вырезаем код и выходим из цикла Exit Do Else CityCode = "" 'Если нет — сбрасываем возвращаемое значение End If Loop Close #1 If CityCode = "" Then Msgbox prompt:="Маршрута на " & City & " в списке нет, пополните список!" 'Проверяем, найден ли маршрут
End Function
[/vba]
И всю эту фигню крутим в цикле заполнения столбца
[vba]
Код
Sub CodeForCity
Dim i As Long
For i = 4 To ActiveSheet.UsedRange.rows.Count Cells(i, 15).Value = CityCode(Trim(Cells(i, 18).Value)) If Val(Cells(i, 14).Value) < 0 Then Cells(i, 19).Value = Abs(Val(Cells(i, 14).Value)) Else Cells(i, 20).Value = Val(Cells(i, 14).Value) End If Next i