Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Кодирование в квадрате Полибия
 
Может быть так будет понятнее задача - прилагаю файл.
Сможет кто-нибудь помочь?
Кодирование в квадрате Полибия
 
JayBhagavan, спасибо за формулу, но мне нужно закодировать символ (B21) в координаты x/y (B22, C22) - т.е. B21 заполнено (в моем примере символом "И", а ячейки B22 и C22 пусты - их надо определить).
А ваша формула раскодирует координаты в исходный символ.
Изменено: Сергей В - 11.06.2014 10:19:27
Кодирование в квадрате Полибия
 
Уважаемые форумчане, добрый день.
Есть матрица - Х/Y, в которой каждый символ представлен как координата оси Х и оси Y соответственно (квадрат Полибия)
Есть поля, в которые пользователь вносит буквенно-цифровые значения для кодировки (B21 - AG21).
На выходе необходимо получить координаты (х, y) для каждого кодируемого символа (B22 - AG22).
Пытался решить проблему с использованием функций, по следующему алгоритму:
* найти значение в массиве;
* определить местоположение с использованием поискпоз;
* получить "координаты" х и y путем использования смещ;
...но запнулся на первом же шаге - стандартные функции поиска: впр; гпр; просмотр; поискпоз - в этой конструкции не работают (либо не хватает умения применить функции поиска в массиве).
Требуемый символ можно легко найти с помощью Ctrl+F, но дальше того, чтобы использовать "Запись макроса" на это действие я не ушел... а как написать шаги № 2 - 3 в VBA без понятия... макросы - это не мое.
Может кто-нибудь оказать содействие в решении задачи?
Файл прилагаю.
Изменено: Сергей В - 11.06.2014 09:56:51 (требование модератора по оформлению)
Макрос цикла (подбор параметра каждой ячейки в диапозоне)
 
{quote}{login=Юрий М}{date=10.07.2012 02:32}{thema=}{post}См. мой пост выше.{/post}{/quote}  
 
Юрий, спасибо, все получилось :-)  
Как-то я не стой стороны заходил... перемудрил  
 
Sub Test1()  
Dim Diapozon As Range  
Dim Konk_iacheica As Range  
' присвоили переменные  
Set Diapozon = Range("H6:H89")  
' присваиваем конкретный диапозон  
   Range("A6:A89").Select  
   Selection.Copy  
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _  
       :=False, Transpose:=False  
' очистили от формул - поменяли на значение  
For Each Konk_iacheica In Diapozon  
Konk_iacheica.GoalSeek Goal:=0, ChangingCell:=Konk_iacheica.Offset(, -7)  
Next  
End Sub
Макрос цикла (подбор параметра каждой ячейки в диапозоне)
 
{quote}{login=Юрий М}{date=10.07.2012 02:10}{thema=}{post}Set Perechen_stavka = Range("A6:A89")  
Где это в дальнейшем используется?  
 
Range(Itogo)...  
Itogo - это уже диапазон, и получается "масло масляное"...  
 
Range(Stavka) - где переменной Stavka присвоено значение?  
 
Для проверки правильности просто переберите циклом ячейки в диапазоне с их выделением.{/post}{/quote}  
 
Юрий, помогите с логикой:  
1. Объявляю переменные;  
2. Присваиваю переменным конкретный диапозон;  
3. Запускаю цикл обхода каждой ячейки в диапозоне и запуска "подбор параметра"  
 
...где я туплю? где ошибка в логике?  
 
 
Sub Макрос2()  
'  
   Dim Perechen_stavka As Range  
   Dim Perechen_itogo As Range  
   ' присваиваем двум переменным тип диапозон  
   Dim Stavka As Variant  
   Dim Itogo As Variant  
   ' присваиваем двум переменным тип variant  
   Set Perechen_stavka = Range("A6:A89")  
   Set Perechen_itogo = Range("H6:H89")  
   ' присваиваем каждой переменной конкретный диапозон  
   Set Stavka = Range("A6")  
   Set Itogo = Range("H6")  
   ' присваиваем каждой переменной начальное значение - не уверен, что это надо делать честно говоря...  
       For Each Perechen_itogo In Perechen_itogo  
           Range(Perechen_itogo).GoalSeek Goal:=0, ChangingCell:=Range(Perechen_stavka)  
       Exit For  
   Next  
   ' цикл -> обход каждой ячейки в диапозоне и запуск "подбора параметра"  
End Sub
Макрос цикла (подбор параметра каждой ячейки в диапозоне)
 
Т.е. надо:  
Dim Itogo As Cell?  
 
Нет, бред какой-то пишу... нет такого типа переменной как Cell... логику того, что надо написать понимаю, но как написать - не понимаю...
Макрос цикла (подбор параметра каждой ячейки в диапозоне)
 
Спасибо.  
 
Нашел еще одну свою ошибку в методе GoalSeek:  
 
Sub Макрос2()  
'  
   Dim Stavka As Range  
   Dim Itogo As Range  
   Dim Perechen_stavka As Range  
   Dim Perechen_itogo As Range  
   ' присваиваем тип переменных - все переменные типа "ячейка"  
   Set Perechen_stavka = Range("A6:A89")  
   Set Perechen_itogo = Range("H6:H89")  
   ' присваиваем каждой переменной диапозон, который нужно обойти  
       For Each Itogo In Perechen_itogo  
           Range(Itogo).GoalSeek Goal:=0, ChangingCell:=Range(Stavka)  
       Exit For  
   Next  
   ' цикл -> обход каждой ячейки в диапозоне и запуск "подбора параметра"  
End Sub  
 
Но, при запуске, вылетает с ошибкой:    
Method 'Range' of object '_Global' failed
Макрос цикла (подбор параметра каждой ячейки в диапозоне)
 
День добрый.  
 
Если есть пара минут, подскажите в чем ошибка в написании макроса - никак не могу понять логику и/или синтаксис VBA:  
 
Sub Макрос2()  
'  
   Dim Stavka As Range  
   Dim Itogo As Range  
   Dim Perechen_stavka As Range  
   Dim Perechen_itogo As Range  
   ' присваиваем тип переменных - все переменные типа "ячека"  
   Perechen_stavka = Range("A6:A89")  
   Perechen_itogo = Range("H6:H89")  
   Itogo = Range("H6")  
   Stavka = Range("A6")  
   ' присваиваем каждой переменной значение или диапозон  
       For Each Itogo In Perechen_itogo  
           Range(Perechen_stavka(0)).GoalSeek Goal:=0, ChangingCell:=Range(Perechen_itogo(0))  
       Exit For  
   Next  
   ' цикл -> обход каждой ячейки в диапозоне, начиная с первого значения (0 или "A6") и запуск "подбора параметра"  
End Sub  
 
Суть того, что хочу сделать проста - есть диапозон ячеек, обходя каждую из них в цикле хочу запустить подбор параметра.
209 вопрос про то, как скопировать данные из нескольких листов на один с помощью VBA
 
Hugo, можно final qustion?  
 
Немного видоизменил условия сбора информации - макрос находится в другом файле в той же папке, где и файл "Отчет".  
 
Методом "тыка" смог обратиться к файлу "Отчет", чтобы макрос собирал данные из него... а как указать, чтобы после сбора данных копирование происходило не в файл "Отчет, а в тот файл, в котором находится макрос (файл с макросом назвал "Сводный.xlsm"?  
 
Конкретно:  
 
 
Sub Sammary2()  
   Dim Manager_lists  
       ChDir "H:\WORK\Отчет"  
       Workbooks.Open Filename:="H:\WORK\Отчет.xls"  
       Application.ScreenUpdating = False  
   With ActiveWorkbook  
   Manager_lists = Split("Гор Каш Вол Нау")  
   End With  
       With Sheets("Сводный")  
           .[A3] = Now
           .Range(.[AZ3], .Range("A" & .Rows.Count).End(xlUp)).ClearContents
       End With  
   For Each sh In Manager_lists  
   With Sheets(sh)  
   .Range(.[AZ3], .Range("A" & .Rows.Count).End(xlUp)).Copy Sheets("Ñâîäíûé") _
   .Range("A" & .Rows.Count).End(xlUp).Offset(1)  
   End With  
   Next  
   Application.ScreenUpdating = True  
End Sub  
 
 
Макрос прерывается с ошибкой на 9 строке ("With Sheets("Сводный")"), что логично, так как в файле Отчет.xls (из которого и собираем данные по листам) нет такого листа как "Сводный", этот лист находится в файле Сводный.xlsm.
209 вопрос про то, как скопировать данные из нескольких листов на один с помощью VBA
 
{quote}{login=Hugo}{date=18.06.2012 12:21}{thema=}{post}А так логика вроде нормальная, всё просто и обоснованно :){/post}{/quote}  
Еще раз спасибо.  
 
...осталось только понять ЧТО и главное СКОЛЬКО надо скурить, чтобы во всем этом разобраться... формулы, даже замороченные, в Excel как-то попроще давались...
209 вопрос про то, как скопировать данные из нескольких листов на один с помощью VBA
 
{quote}{login=Hugo}{date=17.06.2012 11:40}{thema=}{post}Вот так работает  
...................  
.[A2] = Now тоже совершенно ни к чему, там ведь уже есть данные, т.е. в этом действии логики нет.{/post}{/quote}
Hugo, огромнейшее Вам спасибо! Я бы сам это неасилил... в обозримом будущем точно... не могу вкурить я этот язык и логику...
209 вопрос про то, как скопировать данные из нескольких листов на один с помощью VBA
 
Уважаемые форумчане, можете еще раз по коду помочь - я правильно понимаю логику?  
 
Sub tt()  
   Dim arr  
 
' вводим переменную "arr", которая явно не определена, т.е. с типом "variant"  
 
   Application.ScreenUpdating = False  
 
' запрещаем обновление экрана во время работы подпрограммы (sub) для ускорения выполненя  
 
   arr = Split("Гор Каш Вол Нау")  
 
' в справке тьма-тьмущая вариантов "split", я могу только догадываться - это какое-то явное указание листов, которые будут использоваться в данной процедуре?  
 
   With Sheets("Лист2")  
 
' указание одного объекта - "Лист2" над которым планируется совершать ряд операций?  
 
   .[A2] = Now
 
' Что-то типа указания ячейки А2 как ActiveCell?  
 
   .Range(.[AZ3], .Range("A" & .Rows.Count).End(xlUp)).ClearContents
 
' понимаю, что очищает данные на листе "Лист2", но логики работы не понимаю... почему начинаем очищать не с А3, а с AZ23? Почему метод ".End" с константой "xlUp"... не понимаю логики... мы считаем заполненный ячейки снизу?      
 
End With  
   For Each sh In arr  
 
' "sh" - но ведь переменная "sh" неопределена... как это вообще работает?  
 
   With Sheets(sh)  
   .Range(.[AZ3], .Range("A" & .Rows.Count).End(xlUp)).Copy Sheets("Лист2") _
   .Range("A" & .Rows.Count).End(xlUp).Offset(2)  
 
' "Offset(2)" - свойство Range, которое задает смещение на 2 строки вниз?  
 
   End With  
   Next  
   Application.ScreenUpdating = True  
End Sub
209 вопрос про то, как скопировать данные из нескольких листов на один с помощью VBA
 
Hugo  
 
...не выходит цветок каменный... :-(  
 
Файл во вложении.  
 
Если оставить .[a3] = Now --> затирает часть шапки...при повторном запуске появляется пустая строка...
209 вопрос про то, как скопировать данные из нескольких листов на один с помощью VBA
 
Так, простите... данные с листа и так очищаются - я туплю вставляя блок до коммента "'заполняем лист данными:"... Извините.
209 вопрос про то, как скопировать данные из нескольких листов на один с помощью VBA
 
Юрий М  
 
Прошу прощения, хотел как лучше...  
 
Hugo  
 
А запороленные листы могут стать проблемой для работы макроса? Специально блокировал листы для изменения, чтобы пользователи не меняли структуру отчета...  
 
Спасибо огромное за помощь, остался только один вопрос - не могу понять что поправить в макросе, чтобы он на листе "Лист2" не затирал шапку...? Сейчас данные вставляются не с 3-ей строчки а со второй + форматирование первой строки (заливка) остается, а вот вся внутрянка (формулы) пропадает...  
 
Что я сделал опять не так?  
 
Sub tt()  
    'Очищаем данные с листа:  
   With Sheets("Лист2")  
   .Range(.[AZ3], .Range("A" & .Rows.Count).End(xlUp)).ClearContents
   End With  
    'заполняем лист данными:  
   Dim arr  
   Application.ScreenUpdating = False  
   arr = Split("Гор Каш Вол Нау")  
   With Sheets("Лист2")  
   .Range(.[AZ3], .Range("A" & .Rows.Count).End(xlUp)).ClearContents
   End With  
   For Each sh In arr  
   With Sheets(sh)  
   .Range(.[AZ3], .Range("A" & .Rows.Count).End(xlUp)).Copy Sheets("Лист2").Range("A" & .Rows.Count).End(xlUp).Offset(1)
   End With  
   Next  
   Application.ScreenUpdating = True  
End Sub
209 вопрос про то, как скопировать данные из нескольких листов на один с помощью VBA
 
б) Я правильно понимаю логику?  
Dim arr As Range  
Set arr = Worksheets("Вол", "Гор", "Каш", "Нау")  
 
...а sh какой тип определить?
209 вопрос про то, как скопировать данные из нескольких листов на один с помощью VBA
 
Вторая часть файла (архив)
209 вопрос про то, как скопировать данные из нескольких листов на один с помощью VBA
 
Уважаемые форумчане, я заранее знаю, что вопрос обозначенный в теме, задавался уже не один десяток раз... и обсуждался уже пару сотен раз... НО, я честно прочитал множество веток... я второй день не отрывая задницу от стула и обнявшись с книжкой Уокенбаха пытаюсь решить эту, для многих, видимо, тривиальную задачу... я сдаюсь, я не понимаю КАК? Логика формул Excel в VBA не работает, ну т.е. работает но не зеркально... если бы можно было решить эту задачу не прибегая к VBA - я бы решил... но, тут нужен VBA, а силы мои кончились...  
 
И хотя постановка задачи тривиальна, но все же:  
* Есть книга *.xlsm (во вложении);  
* Есть несколько вкладок (отмечены цветом): "Гор", "Каш", "Вол", "Нау";  
* С каждой из этих вкладок нужно скопировать данные в лист "Лист2" - в данном листе уже заполнена "шапка" - задача скопировать только данные из вышеупомянутых листов;  
* Условие копирования - начиная с первой строки (Строка 3), до последней заполненной (определение последней заполненной строки с горем пополам смог решить - читай найти решение на форуме): Sub CopyManagers5() в модуле Copy в прилагаемом файле;  
* но я не понимаю КАК? реализовать следующее:    
а) диапазон для копирования я выделил, но если я, запуская макрос, нахожусь не на том листе для которого этот макрос написан (в примере макрос для листа "Вол", т.е. иначе говоря лист "Вол" неактивен) - вылетает ошибка...    
б) проблема номер два - ну получилось у меня скопировать данные на лист "Лист2", как заставить макрос перейти на следующий, необходимый мне, лист для выделения и копирования следующего блока данных (перечень листов откуда копировать данные - заранее известен)?    
в) Проблема три: как на этом листе "Лист2" вставить следующий блок данных в след за тем блоком, которые был перенесен с во время первой итерации (чтобы данные копировались на "Лист2" друг за другом)?    
г) Проблема четыре - допустим произошло чудо, все скопировалось как надо на лист "Лист2", как заставить макрос при следующем запуске стереть с этого листа ("Лист2") все данные кроме шапки (предполагается, что упомянутые вкладки будут редактироваться ежедневно)?  
 
Пожалуйста, помогите.  
 
P.S. Архив разбит на 2 части.
VBA. Автоматический запуск макроса на опр. листе при изменении в книге Excel
 
Юрий, спасибо огромное за помощь и разъяснения.
VBA. Автоматический запуск макроса на опр. листе при изменении в книге Excel
 
1. Т.е. это как встроенная защита? Если не делать проверку на то, сколько ячеек выделено, чем это грозит?  
 
2. Спасибо - понял, почитаю про синтаксис, буду разбираться в логике языка...  
 
3. Смотрите, сейчас если зайти в VBA, то:  
- в папке "Microsoft Excel Objects" перечислены названия листов моей книги Excel, и в "Лист1 (entry data)" вставлен код:  
 
Private Sub Worksheet_Change(ByVal Target As Range)  
   If Target.Cells.Count > 1 Then Exit Sub  
   If Not Intersect(Target, Range("A1:I20")) Is Nothing Then  
       Call Annuitet_leasing  
       Call Annuitet_credit  
   End If  
End Sub  
 
- ниже в VBA есть папка "Modules", в которой указаны, собственно, два модуля: Module1 и Module2 (соответственно к первому привязан макрос "Annuitet_leasing", ко второму "Annuitet_credit"). По моему предположению, код вынесен в модули, т.к. я создавал "кнопки", по нажатию на которые соответствующие макросы и запускались... а если эти "кнопки" удалить и вставить код макросов в соответствующие листы книги, т.е. код макроса "Annuitet_leasing" в лист "calculate - annuity", а код макроса "Annuitet_credit" в лист "comparison".Теперь же необходимость что-либо нажимать на листах отпала, будет ваш макрос работать?
VBA. Автоматический запуск макроса на опр. листе при изменении в книге Excel
 
Юрий, спасибо огромное - работает.  
 
Граждане товарищи, всем также огромное мерси, что помогли советами, без Вас бы жмакать мне на кнопки до одурения...  
 
Юрий, еще минут 15 повозитесь со мной? В итоге получилось следующее:  
 
Private Sub Worksheet_Change(ByVal Target As Range)  
   If Target.Cells.Count > 1 Then Exit Sub  
   If Not Intersect(Target, Range("A1:I20")) Is Nothing Then  
       Call Annuitet_leasing  
       Call Annuitet_credit  
   End If  
End Sub  
 
т.е. там два листа и два макроса, которые нужно запустить:  
лист "calculate - annuity" и макрос "Annuitet_leasing"  
лист "comparison" и макрос "Annuitet_credit"  
 
Пара вопросов:  
1. Если "отвязать" эти макросы от кнопок и вставить код в сами листы, т.е. правая кнопка мыши на листе - Исходный текст... макрос на автозапуск будет работать?  
 
2. Ваш код:  
 If Target.Cells.Count > 1 Then Exit Sub  
 If Not Intersect(Target, Range("A1:I20")) Is Nothing Then  
 
..не до конца понимаю, что происходит... т.е. если в этих ячейка произошел какой-то расчет - то выйти из процедуры? sub - это же процедура?  
 
...вторую сточку вообще не понимаю - если не выделено - то ничего... я, пардон, мыслю структурами обычного языка, но очень хочется понять...  
 
Заранее спасибо.
VBA. Автоматический запуск макроса на опр. листе при изменении в книге Excel
 
Диапазон ячеек, в которых хоть что-то можно изменить: А1:I30 (лист: "entry data")
VBA. Автоматический запуск макроса на опр. листе при изменении в книге Excel
 
Да я сам над стобой стебусь... мозг стимулирует, знаете ли... огромное всем спасибо, правда!!!  
 
...просто если я сам не попытаюсь разобраться и понять, то смысл в этом какой?
VBA. Автоматический запуск макроса на опр. листе при изменении в книге Excel
 
Назвали дауном, так дайте побороться за свою честь :-) ...если сам не смогу - выложу, и буду надеяться, что поможите.  
 
...но сначала сам буду колупаться :-)
VBA. Автоматический запуск макроса на опр. листе при изменении в книге Excel
 
Все поправил, запустил, ругается:  
 
Compile error: Sub or function not define  
 
подсветил желтым:  
Private Sub Worksheet_Change(ByVal Target As Range)
VBA. Автоматический запуск макроса на опр. листе при изменении в книге Excel
 
...я понимаю, что всех достал - но нужно уточнить (синтаксис не знаю), должно быть так:  
calculate - annuity.Range("F124").GoalSeek Goal:=calculate - annuity.Range("E3"), ChangingCell:=calculate - annuity.Range("F127") ???
VBA. Автоматический запуск макроса на опр. листе при изменении в книге Excel
 
Нихт арбайтен:  
 
1. Сделал так, как вы говорили: нажал на лист "entry data" - выбрал "Исходный текст", вставил код:  
 
Private Sub Worksheet_Change(ByVal Target As Range)  
If Target <> "" then Call Annuitet  
End Sub  
 
2. Поменял сумму на листе "entry data" - вылетела ошибка VBA: Run-time error '1004', Неверная ссылка.  
 
Ругается на мой макрос - "Annuitet", прямо в нем подсвечивает желтым строчку:  
 
Range("F124").GoalSeek Goal:=Range("E3"), ChangingCell:=Range("F127")  
 
...перед тем, как окончательно зачмырите, помогите разобраться, пожалуйста.
VBA. Автоматический запуск макроса на опр. листе при изменении в книге Excel
 
Товарищи, во-первых спасибо огромное за помощь - буду пробовать.  
 
...а во-вторых, можете хоть запинать ногами  - чем больше стебетесь, тем лучше, быстрее учится буду и меньше задавать тупых вопросов... просто вам уже трудно понять, что человек может ТАК тупить, но для меня VBA - китайская грамота, так что и не такие вопросы возникают - это нормально когда учишься с нуля...
VBA. Автоматический запуск макроса на опр. листе при изменении в книге Excel
 
...так, я понял - некорректно сформулировал свой вопрос:  
 
Нужно чтобы при изменении любой ячейки на листе "entry data" автоматом запускался макрос "Annuitet", который сейчас привязан к кнопке на листе "calculate - annuity", сам макрос "Annuitet" нужно оставить без изменений, он работает корректно.
VBA. Автоматический запуск макроса на опр. листе при изменении в книге Excel
 
Уважаемые форумчане, добрый день.  
 
...прочитал несколько веток форума, но все равно не смог решить проблему - поэтому прошу подсказать,если быть совсем честным, то даже не подсказать, а наверное написать за меня код :-), ибо пока даун в вопросах VBA.  
 
Есть книга Excel, назовем ее "Example"  
 
Внутри несколько листов:  
- entry data  
- calculate - different  
- calculate - annuity  
- output form  
 
На листе "calculate - different" таблица с расчетом аннуитетного платежа, который рассчитывается по нажатию на кнопку, на которую подвешен макрос:  
 
Sub Annuitet()  
'  
' Annuitet Макрос  
'  
Range("F124").GoalSeek Goal:=Range("E3"), ChangingCell:=Range("F127")  
 
End Sub  
 
И все бы ничего, но очень бы хотелось реализовать механизм, чтобы этот макрос, на этом листе запускался при любом изменении какой-бы то ни было ячейки на листе "entry data". Знаю что это реализуется методом Worksheet_Change, но вот как правильно написать всю обвязку и как все это корректно встроить, до меня не доходит.  
 
Помогите, пожалуйста.
Страницы: 1 2 След.
Наверх