IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Обсуждение программ (http://www.imho.ws/forumdisplay.php?f=3)
-   -   Microsoft Excel: Вопросы и ответы (http://www.imho.ws/showthread.php?t=26600)

Alex Dark 23.03.2011 13:59

ну у меня офиса нет под рукой, но я бы сделал так

Код:

For block = 9 To 56
I= block mod 2
if i=0 then
        '        кратно 2
else
        '        не кратно 2
endif
next


PS MOD Делит одно число на другое и возвращает только остаток.

Borland 23.03.2011 14:08

Alex Dark, переменную I вводить необязательно...;)
Код:

For block = 9 To 56
if block mod 2 = 1 then
        '        нечет, "один набор команд"
        .......
else
        '          чёт, "другой набор команд"
        .......
endif
next


Alex Dark 23.03.2011 14:18

ЗЫ :biggrin: я в курсе.
просто так нагляднее и понятнее

Plague 23.03.2011 16:44

Alex Dark, Borland, :yees:
половина вопроса решена. один талмуд отрихтовал, всё работает :yees:
Теперь нужно вернуться на почти полтора года назад, в файлик который сочинил Alex Dark
как я понимаю, там скрипт пропускает первые две строки и первые две колонки, по остальным ячейкам бежит и выполняет заданные операции. Вот тут тоже надо разделить: на ячейки в четных строках выполнять старую манипуляцию по раскраске ячеек, а в нечетных немного другую (на все сравниваемые условия минуту добавить)...
Пробовал по такому же принципу (If MyRow mod 2 = 1 Then) - ровным счетом ничего не изменилось. Ни ошибку не выдало, ни работать не стало иначе...

добавлено
в какой переменной у него лежит номер строки?
вроде в дебагере смотрю MyRow чуть выше - как раз то что надо, но именно в этом месте
Код:

.....
  Else
+  If MyRow mod 2 = 1 Then
        If AA < 0.000011574074 Then  '  до 1 секунды
.....

оно empty :idontnow:

Borland 23.03.2011 20:23

Цитата:

Сообщение от Plague (Сообщение 1741912)
в какой переменной у него лежит номер строки?
вроде в дебагере смотрю MyRow

В MyRow и лежит, насколь я логику автора понимаю.

Цитата:

Сообщение от Plague (Сообщение 1741912)
на ячейки в четных строках выполнять старую манипуляцию по раскраске ячеек, а в нечетных немного другую

Чтобы сильно много не переправлять, я бы сделал так: скопипастил бы sub БоеваяРаскраска с новым именем (например AltБоеваяРаскраска) с соответствующим изменением условий (где там надо - минуту прибавить), а 52-ю строку (вызов "Боевой раскраски") заменил бы на соответствующий if:
Код:

if MyRow mod 2 = 1 then
        AltБоеваяРаскраска
else
        БоеваяРаскраска
endif

Где-то так...

<added>
Цитата:

Сообщение от Plague (Сообщение 1741912)
именно в этом месте
.....
оно empty

"Именно это место", насколь я понимаю, в теле "боевой раскраски"? Не знаю точно, как оно в VBA с глобальностью переменных, но подозреваю, что внутри подпрограммы просто недоступна MyRow, заданная в вызывающей программе. Т.е. MyRow НЕ глобальная.

Plague 23.03.2011 20:41

по первому варианту понятно, по причинам потери - тоже, - я так и предполагал. вопрос как ее туды перекинуть, пусть даже если и заюзав твой вариант но для общей информации и просвещения, так сказать...

Borland 23.03.2011 21:09

Цитата:

Сообщение от Plague (Сообщение 1741927)
как ее туды перекинуть

Ну к примеру - параметром "раскраски". Причём можно передавать не номер строки, а сразу признак (не)чётности, т.е. "MyRow mod 2".
Либо в явном виде декларировать MyRow как Public (http://www.ozgrid.com/VBA/variable-scope-lifetime.htm).

Alex Dark 26.03.2011 13:49

Цитата:

Сообщение от Plague (Сообщение 1741912)
оно empty

Всё правильно.
процедура "БоеваяРаскраска" предпологает что ты стоишь уже в нужной ячейке (перед вызовом процедуры происходит позиционирование на ячейке)
MyRow определена в "Макрос1" и не доступна в "БоеваяРаскраска".
Решение:
1. строку Dim MyRow, MyCol вывести в первую строку модуля (а из "Макрос1" убрать). Переменная станет глобальной для модуля

2. в "БоеваяРаскраска" есть переменная А. Это текущая ячейка. a.row() возвратит её номер строки т.е.

If (a.Row() mod 2) = 1 Then

paziy 19.05.2011 16:26

Сложные расчеты
 
Ребят, нужна помощь
1.Есть несколько столбцов с цифрами, нужно чтоб когда протягиваешь его вниз он считал только до 5, потом начинал опять в первом случае с 0,1,2.... во втором с 1,2,3..., бьюсь с форматами, но не могу придумать как сделать.
2.В некоторых яйчейках используется по несколь цифр, а при этом действия надо производит с каждой из цифр в этой яйчейке. Например 765. А мне надо просчитать 7*2=B5, 6*4=C6, 5*3=D7. Как рабить это число на цифры, чтоб потом считать?
3.Необходимо сопоставит данные и вывести кол-во цифр. Т.е. Конечный результат все процедуры у меня будет выглядеть так 4413233334, надо чтоб он в одной яйчейке вывел кол-во едениц, во второй количество пятерок в третей 8к. Т.е. K1=1, К2=2, К3=33333, К4=444

EvroStandart 20.05.2011 11:14

1. Это никакими форматами не сделать. Если только макрос написать.

2. Используй строковые функции. MID тебе поможет.

3. это тоже только макросом.

ариль 11.01.2012 21:33

Нажмите здесь, чтобы увидеть текст полностью
копирую данные из интернет-бнка сбербанка (запрос открывается в отдельном окне браузера).
данные в excel попадают в таком виде, что после цифр в каждой ячейки два пробела. можно удалять их вручную, но как автоматизировать этот процесс? с двумя пробелами после цифр нельзя использовать формулы - не работают.

Borland 11.01.2012 22:30

ариль, стандартный "поиск и замена"
"искать" - ввести два пробела, "Заменить на" - оставить поле пустым. Все сдвоенные пробелы удалятся.

Alex Dark 12.01.2012 08:18

Borland, быстрее всего автор хочет упростить работу и т.к. Ctrl+F ещё нажимать надо, а плюс ещё человеческий фактор ...


ариль, ну если ты так сильно хочешь макрос я тебе его напишу, там нет ни чего сложного. Ты только скажи какой у тебя офис и пример входного текста.

В принципе не вдаваясь в подробности и до безобразия тупо вот так
Код:

Sub Макрос2()
Dim CC As Integer, MyCol As Integer
Dim RR As Integer, MyRow As Integer
Dim MyCells
CC = 5 '  число строк
RR = 10  '  число столбцов

For MyCol = 1 To CC
For MyRow = 1 To RR

Set MyCells = Cells(MyRow, MyCol)
If MyCells.Formula = MyCells.Value And (Not IsEmpty(MyCells.Value)) Then
    ss = MyCells.Value
    If IsNumeric(Left(ss, 1)) Then
        Do While InStr(1, ss, " ")
            ss = Replace(ss, " ", "", 1)
        Loop
        MyCells.Value = ss
    End If
End If

Next
Next

End Sub

Посмотришь под отладчиком и всё поймёшь.
В ватчесы добавишь ss, MyCells.Formula и MyCells.Value



PS А что в сбербанке нет нормальной выгрузки??? Что то как то подозрительно. Они вместе с файлом для печати должны присылать файл выгрузки для автоматической обработки. Его и пользовать.

ариль 12.01.2012 21:55

Borland в 2003 SP3 не работает - она не находит ничего.

Alex Dark
Нажмите здесь, чтобы увидеть текст полностью
приходит вообще вордовский файл с пробелами - замучаешься преобразовывать
в чём преимущество скрпита? Ещё искал (забыл) как называются формулы, по которым в зависимости от значения в ячейки придаётся цвет ячейки и пр атрибуты - как называется этот раздел справки?

Borland 12.01.2012 23:18

Цитата:

Сообщение от ариль (Сообщение 1755883)
в 2003 SP3 не работает - она не находит ничего.

Значит там не пробелы, а другие символы.
Можно, в конце концов, скопипастить их прямо из ячейки и вставить в форму поиска замены.

Только щас подумалось: пробелы наверно не два подряд "после цифр" а в качестве разделителей разрядов посреди числа? Типа как винда размер файла в байтах отображает? Тогда и вправду предложенная мной схема замены не сработает. Телепалки сообразить что "два пробела после цифр" - это разделители разрядов, не хватило... Заменяйте ничем именно одиночные пробелы.
Единственно что - если в таблице есть "полезные пробелы" (скажем, некий текст) - то поиск/замену нужно проводить только по ячейкам с цифрами, а не по всей таблице...
И замена эта будет работать и в ворде, и в экселе...
Либо, если опять не угадал - "пример файла в студию".

Alex Dark 15.01.2012 23:10

ариль, с инет-банкингом от сбербанка не сталкивался.
Но с точки зрения здравого смысла, тот же самый экспорт в 1С у них должен быть. А это не что иное как обычный текстовик.

К сказанному Borland добавить нечего.
Слишком мало данных.

Evgeshka 08.09.2012 02:44

ужасно стал тормозить excel, office 2007. проблема в том, что чтобы добавить или удалить линию (не дай бог несколько через Ctrl) - то можно чай попить, в магазин сбегать - в прямом смысле. Раньше такого не было... никак не пойму в чём дело... очень много проблем на работе из-за этого... пробовала эту же таблицу на другом компе - та же самая история...

Brainiacs 08.09.2012 12:33

Доброго времени!

Насколько я понял из Вашего сообщение, проблемы с одним файлом exel, с некой таблицей???
Если так, выкладывайте файл, посмотрим что там не так.

With Best Regards
Brainiacs

Alex Dark 08.09.2012 21:56

Согласен с Brainiacs
Правда пока читал Ваши строки, первая мысль была, почисть temp сделай дефрагментацию.

Если таблица содержит конфидециальную инфу, то лучше в приват. Дальше меня не уйдёт.

Есть ещё предположение, что ваш файл был создан или когда то использован в 2007 или 2010.

И ещё. Если файл напичкан формулами (и не простыми формулами) и макросами. Если содержит не один лист с хреновой кучей колонок и строк, то в принципе вполне возможно.

И ещё. Если есть циклическая(ие) ссылки, то книга открывается очень долго. Вот только не помню, сообщение о циклической ссылке отключается или нет.
Если отключается, то - циклическая ссылка

Evgeshka 10.09.2012 15:54

таблицу можно скачать здесь : http://narod.ru/disk/60783793001.189...bleau.xls.html

конфиденциальной информации нет, так что выкладываю сразу на сайте.

формул пока нет так много и они самые простые... макросами в данной таблице и не пахнет... у меня 5 рабочих таблиц и во всех есть формулы, но 3 работают нормально, а 2 тормозят. пробовала тупо скопировать таблицу в новый документ, но это не помогает...

Brainiacs 10.09.2012 20:32

Хммм интересно, в 2003 офисе всё ок, а вот в более новых версияx... происходит то что Вы описывали... попробуем разобраться....

With Best Regards
Brainiacs


добавлено через 1 час 27 минут
2 Evgeshka

Ошибка у Вас где-то в форматах (дело не в цвете, не в числовом формате ячейки, не в формулах, хотя они тоже не правильные, но это допускается)
вообщем разбираться где конкретно - долго, проще переформатировать по столбцам и строкам.
Формат по цвету лучше делать по конкретному диапазону ячеек, а не по строкам и столбцам (при печати скажется).

И про форматирование советую почитать, т.к. Вы работаете с большими, таблицами, хоть и не сложными, но в будущем могут возникнуть проблемы....

Несколько видео по форматированию:

_http://www.teachvideo.ru/v/3618
_http://www.teachvideo.ru/v/3619
_http://www.teachvideo.ru/v/3620
_http://www.teachvideo.ru/v/3621

Там много видео по Excel

Alex Dark 12.09.2012 00:03

Я попробовал открыть на 2010 starter-е.
50% загрузил , я и не заметил, а вот дальше...
Сейчас 58%, прошло минут 5-10 и последние минуты две висит на 58%

Через несколько секунд
К стати, как только написал предыдущие строки и отправил их, загрузился файл в один момент....

Brainiacs 12.09.2012 00:07

2 Alex Dark

Ну значит где-то с середины начиная какая-то ошибка, точно в форматировании.
Так как я тоже пробовал добавить строки в начале файла, всё быстро было,
а если в конце, то ппц секунд 20!

With Best Regards
Brainiacs

Alex Dark 12.09.2012 01:07

Просто тут мысль такая возникла. А этот файлец в openOfficce не маслали.

У меня как то был случай, файлец пришёл в 2007 формате (в xlsx).
В 2003 excel (с возможностью открывать xlsx) не открывался.
2007-го не было под рукой, открыли в опенофисе. сохранили в xls (а подправить надо было два слова в одной из табличек).
Отправили обратно. Там его открыть не смогли.
В 2003, в опене, открывается.
Качнули портабл 2007. Не может открыть.
Установили 2007, всё равно не может открыть.

Что за байда происходила и почему 2007 не открывал, разбираться не стали (смысла не было), но замечал не раз, как в опенофисе книжка побывает, 2007-й (2010) начинают тупить при открытии этого файла (PS не то что бы книжка с одним листочком, а вот именно когда листочков с десяток и более или листочек объёмный с формулами и количеством строк и колонок много-много)

добавлено через 6 минут
Попробовал добавить строку в начале и в конце.
В конце это ж..... вот такая Ж....енская доля

добавлено через 6 минут
К стати, в условном форматировании есть ошибка, ссылается на ошибочную ссылку (последний диапазон, что суммируется в ячейке С1171)
Не исключено что есть и ещё где нибудь ошибка

добавлено через 21 минуту
после удаления всего условного форматирования табличка начала летать. Даже при открытии.

Вывод "Жук оглох" (из анекдота), вернее проблема в условном форматировании

Evgeshka 18.09.2012 03:46

Brainiacs, Alex Dark, в результате ваших комментариев нашла ошибку, но потом не стала заморачиваться и все форматы стёрла, как на рисунке выше, заново оформила форматы и все таблицы работают на ура :). они ещё и весить намного меньше стали.

Lea 31.10.2012 09:30

Формат ячейки.
 
Столкнулась с простой проблемой, на первый взгляд, а решить не могу. 3 ячейки (пусть а, б, с), В них вбиты формулы, которые ссылаются на ячейки с массивом . Соответственно, при изменении массива меняется значение ячеек а,б,с . Ячейки а,б,с имеют формат «число, отрицательное, с округлением до сотых».
Другие 2 ячейки (г,д ) тоже имеют формулу вида (а+2б+с)/4 и такой же формат, как и ячейки а,б,с.
И есть еще одна ячейка (е). Имеет формулу (г-д)*1000. Формат тот же (отрицательное число, с округлением до сотых)

Теперь вопрос. Почему результат в ячейки е такой, как будто бы в предыдущих ячейках нет никакого формата? То есть, в ячейках г,д цифры 66,6025 и 66,7000 округлены до 66,61 и 66,7…, а вот в ячейке Е, где надо вычислить (66,61-66,7)*1000 и получить 90 мы получаем ответ -93,75(то есть считались не округленные числа)…Как сделать так, чтобы в ячейке Е появлялась то самое 90?:confused:

Exel 2010

EvroStandart 31.10.2012 10:10

формат само число не меняет. Он только показывает по разному. Нужно в вычислениях округление прописывать.

Lea 31.10.2012 11:10

Приписывание округления в вычислениях
 
в вычислениях округление прописывать..

А как это делается?

Borland 31.10.2012 11:48

Цитата:

Сообщение от Lea (Сообщение 1765074)
А как это делается?

Вызовом соответствующей функции.
ОКРУГЛ(), ОКРУГЛВВЕРХ(), ОКРУГЛВНИЗ() - если в русском Excel; ROUND(), ROUNDUP(), ROUNDDOWN() - в любом.


Часовой пояс GMT +4, время: 22:24.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.