Помогите пожалуйста с макросом

Автор breathing_wind, 21 сентября 2015, 10:52

0 Пользователи и 1 гость просматривают эту тему.

breathing_wind

Я так же силен в програмировании как папуас в степях Белоруси. Но начальство дает неожиданные задачи, в связи с введением в новой CRM они почти не выполнимы. Так вот:  Как должен выглядеть макрос которые меняет местами ячейки в случае если числовой значение второй больше первой? Мне подсказали:

sub Transfer()
dim i 'сюда подставить любой допустимый тип или оставить variant
if range("A2") > range("A1") then
i = range("A1")
range("A1") = range("A2")
range("A2") = i
end if
end sub

Но я так понимаю это подойдет для эксела а не для Калка. Помогите пожалуйста

JohnSUN

Добро пожаловать на форум!
Ещё чуть-чуть подробнее о задаче - что именно должно меняться местами? Только значения? А если в одной из ячеек (или в обеих) записана формула? Стереть её и подменить на "просто значение"? Или переставить формулы?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: breathing_wind от 21 сентября 2015, 08:52Как должен выглядеть макрос которые меняет местами ячейки в случае если числовой значение второй больше первой?
Если ячейки идут подряд, может быть лучше их отсортировать?
Цитата: breathing_wind от 21 сентября 2015, 08:52Но я так понимаю это подойдет для эксела а не для Калка.
Если выше всех макросов напишите:Option VbaSupport 1то и Calc поймет указанный макрос.

kompilainenn

Цитата: rami от 21 сентября 2015, 09:21Если выше всех макросов напишите:
а если приложите файл с примером, то ваще будет
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

rami

Цитата: kompilainenn от 21 сентября 2015, 09:24
Цитата: rami от 21 сентября 2015, 09:21Если выше всех макросов напишите:
а если приложите файл с примером, то ваще будет
Если первой строчкой в редакторе макросов записать:Option VbaSupport 1то это включит поддержку Экселевских макросов в том виде, в котором они есть.
В некоторых случаях это не работает, если в коде Vba есть специфические методы, не поддерживаемые StarBasic. Но макрос автора вопроса нормально работает.

Если речь идёт только о заданном вопросе, то не стоит городить огород, а просто разрешить поддержку Vba.

Если задача намного сложнее, то JohnSUN прав, нужны подробности. И желательно в документе.

breathing_wind

#5
Option VbaSupport 1 Не помог
Даже стыдно признаться)) В общем ситуация такая. Есть числовые значения которые я заливаю в отдельном листе, далее сортирую в соседнем, поиском по названию 1й строки, макросом созданом макрорекодере. На 2 таблицы с одинаковыми названиями строк. НО дело в том что частенько он ошибается в одинаковых именах строк, и данные которые должны быть в таблице "обработанные лиды" попадают в таблицу "Общее колво по источнику". Так вот общее колво не может быть больше - обработанных.
Сам не понял что сказал. Спал 3 часа простите, любился с этой таблицей и чудо Битриксом)))

JohnSUN

Н-да... Лучше б ты лёг поспать, честное слово.
Сам макрос, которым "сортируешь" исходные данные, покажешь? Его, скорее всего полностью переписать придется. В смысле - проще отыскать и задавить в корне источник ошибки, чем бороться с её последствиями с помощью дополнительных макросов.

(Опять же, скорее всего, тебе не нужен будет макрос - для двух значений достаточно использовать формулы с обычными функциями MIN() и MAX())
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

breathing_wind

#7
Показать покажу.. Но тут лучше даже не смотреть... Я же говорю я далек от всего этого. Хотя Никогда не позно научится
Но значений много потому что так нужно проверить каждую строку в парной таблице

JohnSUN

Да нет, это не идиотизмъ... Обычная ерунда, которая рождается, когда задачу решают "бегом-бегом, чего тут думать - трусить надо..."

Весь текст, я так понимаю, просто не поместился в файле. Но суть, кажется, понятна. Я сейчас попробую эту всю многословную программу перевести на человеческий язык, а ты подтвердишь, опровергнешь или уточнишь. ОК?

Время от времени в первый лист с именем "Вставлять Сюда" ты копи-пастишь с сайта какую-то статистику.
Табличка получается из трех колонок - Источник, Общее количество и Количество обработанных.
Эти значения нужно вытянуть по вертикали в первой пустой колонке соседнего листа "Отчет".
В заголовке колонки нужно вписать дату получения данных, сами значения нужно привязать к названиям источников из колонки A.
Какие-либо формулы тебе не нужны, нужны только итоговые значения.

Всё изложил правильно?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

breathing_wind

Да Вы правы, но проблема заключается в том что значения в столбце источник "баба Лида" столбец А, могут меняться и добавляться. Со временем, так что привязать к определенному номеру ячейки нельзя. Но есть парные ячейки например Б3 и Б30, значения которых часто путаются и их надо менять местами

JohnSUN

Они не должны путаться - если колонки во "Вставлять Сюда" всегда идут именно в таком порядке, то и в "Отчет" они будут попадать на свои места.

Для задачи в таком виде есть два решения.
Первый алгоритм:
1. Находим первую пустую колонку в листе "Отчет" (убеждаемся, что лист еще не заполнен до упора - иначе выдаём предупреждение и ничего больше не делаем)
2. В ячейку во второй строке этой колонки вписываем формулу "=TODAY()" (сегодняшнюю дату)
3. Верхнюю половину ячеек заполняем формулой вида
=IF(ISERROR(VLOOKUP(A3;$'Вставлять Сюда'.$A$1:$C$26;1;0));"";VLOOKUP(A3;$'Вставлять Сюда'.$A$1:$C$26;3;0))
а вторую половину заполняем формулой
=IF(ISERROR(VLOOKUP(A30;$'Вставлять Сюда'.$A$1:$C$26;1;0));"";VLOOKUP(A30;$'Вставлять Сюда'.$A$1:$C$26;2;0))
(Если не увидишь сам - подсказываю: разница между ними всего в одной цифре, второй с конца)
4. Заменяем все эти формулы рассчитанными значениями.

Второй алгоритм:
1. Считываем все данные из "Вставлять Сюда" в массив (массив будет не три, а четыре ячейки в строке - четвертая служебная, для запоминания номера строки)
2. Считываем в массив названия источников из колонки A листа "Отчет"
3. Отыскиваем каждое из названий из первого массива во втором массиве. Для найденных значений запоминаем где нашли.
4. Если после разбора названий источников остались неопознанные (без номера строки), то спрашиваем разрешения раздвинуть таблицу по высоте и вставить новичков.
5. В нужные строки первого свободного столбца вписываем значения из третей и второй ячеек первого массива...

Как-то так, в общем
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

breathing_wind

#11
Примерно понял, Спасибо Большое, а для уже введенных данных есть ли способ их отсортировать?

JohnSUN

А просто подсветить ошибочные - мало будет?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

breathing_wind

#13
Так тоже будет отлично, а как это сделано? Покажите пожалуйста

JohnSUN

Да плохо оно сделано, с ошибкой. Это с помощью условного форматирования делается, но я ошибся при задании условия...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне