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)

Plague 12.05.2009 11:01

на самом деле я вопрос еще проще решил, через UltraCompare, сравнивая имеющееся и непрерывный отчет, и наложив фильтр "показывать только измененные строки". Но вообще интересно было бы посмотреть варианты решения, так сказать для общего развития. Вариант со скриптом, не смейтесь, но я как мартышка и очки с ним - так и не нашел куда его приладить :biggrin:

Цитата:

Сообщение от Alex Dark (Сообщение 1653326)
приаттач пример на 10-20 строк

да чего атачить-то? :biggrin: сделай колонку с последовательностью от 1 до 10, удали оттуда несколько строк:
1
2
4
5
7
9
10

а потом заставь эксель найти недостающие и вывести в другую колонку...

EvroStandart 12.05.2009 12:46

Вложений: 1
для общего развития набросал процедуру. :)

Рудко 13.05.2009 08:53

Как сделать так, чтоб таблица не учитывала некоторые элемент? А именно графику и буквы. Дело в том, что когда вносишь эти элементы в ячейку, формула не работает.
Речь идет о таблице подсчета времени и без графических элементов и букв она теряет смысл.

EvroStandart 13.05.2009 10:13

Цитата:

Сообщение от Рудко (Сообщение 1653588)
Как сделать так, чтоб таблица не учитывала некоторые элемент?

Пример в студию!

Alex Dark 15.05.2009 10:12

Рудко, так как до примера дело не дошло, то могу предположить что в ячейку ты заносишь некоторую информацию которая не соответствует принятым в экселе стандартам. Соответственно формула у тебя не считается. Выхода два:
1. откажись от "графики и букв"
2. пиши свой макрос, который будет понимать и отсеивать "графику и буквы" перед расчетом

grooogler 23.05.2009 23:24

Вот скрипт, http://slil.ru/27685747

Он должен работать как фильтр. Если посмотреть, там всё понятно.
В общих словах, он сравнивает инфу из первого и второго листа, и повторяющиеся строки пишет в листе 3, а не повторяющие в листе 4.

Лист 1
1111 1111
2222 2222
333 333
444 444
555 555

Лист 2
2222 2222
333 333
444 444


В листе 3 показывает:
2222 2222
333 333
444 444
2222 2222
333 333
444 444


То есть почему то два раза одно и тоже.

Как исправить?

EvroStandart 25.05.2009 10:28

Этот скрипт в каком формате?

Alex Dark 25.05.2009 11:59

это 2007 эксель

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

PS Этот код сравнивает любое количество колонок на точное совпадение листа2 с со строкой на листе1 и данные листа1 скидываются соответственно на 3 и 4 листы. т.е если на листе2 будет строка отсутствующая на листе1 то она вообще ни куда не попадет
Код:

Sub Main2()
    Sheets(3).Cells.ClearContents:
    Sheets(4).Cells.ClearContents:
    Sheets(3).Activate
    i = 1
    i3 = 1
    i4 = 1
    Do While Not IsEmpty(Sheets(1).Cells(i, 1).Value)
        j = 1
        Sheets(1).Rows(i).Copy Sheets(3).Rows(i3)
        Sheets(1).Rows(i).Copy Sheets(4).Rows(i4)
        ok2 = 0
        Do While Not IsEmpty(Sheets(2).Cells(j, 1).Value)
            ok = 0
            For ii = 1 To Sheets(1).Cells(i, Columns.Count).End(xlToLeft).Column
                If Sheets(1).Cells(i, ii).Value = Sheets(2).Cells(j, ii).Value Then
                    ok = ok + 1
                End If
            Next
            If ok = Sheets(1).Cells(i, Columns.Count).End(xlToLeft).Column Then
                'совпадение
                Sheets(4).Select
                Rows(i4).Delete
                i3 = i3 + 1
                ok2 = 0
                Exit Do
            Else
                'нет совпадения
                ok2 = ok2 + 1
            End If
            j = j + 1
        Loop
        If ok2 = Sheets(2).Cells(1, Columns.Count).End(xlToLeft).Column Then
            Sheets(3).Select
            Rows(i3).Delete
            i4 = i4 + 1
        End If
        i = i + 1
    Loop
End Sub


grooogler 26.05.2009 23:21

Убрал старый код, поставил этот.

Теперь так:

1 лист

1111 1111
2222 2222
333 333
444 444
555 555

2 лист
2222 2222
333 333
444 444





3 лист
2222 2222
333 333
444 444
555 555

4 лист
555 555


А должно быть:

3 лист
2222 2222
333 333
444 444

4 лист
1111 1111
555 555

Скрипт должен сравнивать ячейки в столбцах А листа 1 и 2.
Если ячески совпадают - всю соответствующая строка помещается в Лист 3
Если ячески не совпадают - всю соответствующая строка помещается в Лист 4

p.s. http://slil.ru/27696874

Alex Dark 27.05.2009 09:59

Извините был напуган (из анекдота)

Подправь две строки выделенные красным.
Код:

            If ok = Sheets(1).Cells(i, Columns.Count).End(xlToLeft).Column Then
                'Совпадение
                Sheets(4).Select
                Rows(i4).Delete
                i3 = i3 + 1
                ok2 = -1
                Exit Do
            Else
...

        If Not ok2 = -1 Then
            Sheets(3).Select
            Rows(i3).Delete
            i4 = i4 + 1
        End If


grooogler 28.05.2009 00:36

Теперь верно.
Но нужно чтоб было немного не так.
Сравниваться должны в первом и втором листе только ячейки в столбце А.

Примеры:

А)

(1
1 1
2 2
3 3
4 4

(2
2 2
3 3

(3
2 2
3 3


(4
1 1
4 4


Б)

(1
1 1
2 2
3 3
4 4zzzzzzz

(2
2 2
3 3
4 yyyyyyyyyyyy

(3
2 2
3 3
4 4zzzzzzz

(4
1 1

Alex Dark 28.05.2009 06:20

Цитата:

Сообщение от grooogler (Сообщение 1656611)
Но нужно чтоб было немного не так

Ну извиняй... В твоем алгоритме сравнение шло по вертикали и по горизонтали. Я его просто правильно переписал.

PS
Код:

Sub Main3()
    Sheets(3).Cells.ClearContents:
    Sheets(4).Cells.ClearContents:
    Sheets(3).Activate
    i = 1
    i3 = 1
    i4 = 1
    Do While Not IsEmpty(Sheets(1).Cells(i, 1).Value)
        j = 1
        Sheets(1).Rows(i).Copy Sheets(3).Rows(i3)
        Sheets(1).Rows(i).Copy Sheets(4).Rows(i4)
        ok2 = 0
        Do While Not IsEmpty(Sheets(2).Cells(j, 1).Value)
            If Sheets(1).Cells(i, 1).Value = Sheets(2).Cells(j, 1).Value Then
                Sheets(4).Select
                Rows(i4).Delete
                i3 = i3 + 1
                ok2 = -1
                Exit Do
            Else
                'разные
                ok2 = ok2 + 1
            End If
            j = j + 1
        Loop
        If Not ok2 = -1 Then
            Sheets(3).Select
            Rows(i3).Delete
            i4 = i4 + 1
        End If
        i = i + 1
    Loop
End Sub


sysser 02.06.2009 21:38

ПРивет ребята!

Задача такая: имеем 123.txt файл с четкой структурой

Шапка
|п\п|фам|имя|отч|статус|некий номер|
|1|Иванов|Иван|Иваныч|инвалид|123-456-789 00|
|2|Петров|Петр|Петрович|ветеран|321-654-987 11|
...
|879|Семенов|Семен|Семенович||213-546-879 22|

Необходима возможность сортировки по разным полям, например по "некий номер" или по "фам".
В самом текстовике не сделаеш, но можно в Экселе.
Когда капируеш через буфер в Эксел, то он вставляет каждую строчку в одну ячейку.
Но если проставить после "|" ТАБ (Tab), то копируется в другую (следующую) ячейку, и после легко сортируется.
Но в ручную проставлять ТАБы сил не хватает.
Помогите автоматизировать процесс.

И подскажите толковый справочник по VBA

Borland 02.06.2009 22:56

sysser, в экселе есть замечательный модуль импорта данных. И если текст импортировать им - накакое предварительное редактирование текстовика не понадобится. Просто при импорте надо будет указать ему символ "|" в качестве разделителя ячеек... ;)

razik 23.06.2009 22:23

Не обновляються данные
 
Проблеммы:
1. знак равно и плюс возле цифер прячутся(не отображаться визуально)
2. дата: например вордовская "11.10" становиться "11.01.1900 2:24:00"

В архиве: искодный док(так должно быть в ексель), файл ексель в который я скопировал, файл ексель который изменил типы http://rapidshare.com/files/247806263/berezani.rar.html. Тип "дата" и "текст".
Изменяется только при нажатии F2 и enter по каждой ячейке.

CTRL+SHIFT+ALT+F9 не помогает.

Как можно обновить весь лист?

Заранее спасибо.

Judge 24.06.2009 02:03

Я, конечно, в Excel совсем не спец, но у меня получилось так:
1. Формат - Ячейки - выбрать Текстовый.
2. Знак "+" будет при таком формате ячейки отображаться.
3. А перед знаком равенства поставить пробел и тогда знак "=" тоже отображается.

razik 24.06.2009 07:31

Спасибо, получилось. Скажите пожалуйста, как быть с датой?

PavelKraft 24.06.2009 08:38

Цитата:

Сообщение от razik (Сообщение 1661242)
Скажите пожалуйста, как быть с датой?

После копирования текста из Word'a в Excel выделяешь все нужные строчки -> формат ячеек... -> дата -> тип 14.3
Дата будет в формате 11.10.2009, а отображаться как "11.10"
Удачи!

razik 26.06.2009 11:17

Цитата:

Сообщение от PavelKraft (Сообщение 1661244)
После копирования текста из Word'a в Excel выделяешь все нужные строчки -> формат ячеек... -> дата -> тип 14.3
Дата будет в формате 11.10.2009, а отображаться как "11.10"
Удачи!

Не сработало:help:

Alex Dark 26.06.2009 12:04

razik, даты в экселе это великое шаманство. Могу только посочувствовать. Дело в том, что в старое доброе DOS-овское время дату записывали в формате 01/10/1980, а микрософт через точку. Теперь он часто путает числа с датами и не полные даты конвертит так как хочет.
Единственный выход из этой ситуации записывать даты всетаки через наклонную черточку. т.к. наклонную черточку он пока еще понимает правильно

PS Учти число 1,3 он у тебя обязательно воспримет как дату не зависимо от твоего желания

Judge 27.06.2009 00:43

Цитата:

Сообщение от razik (Сообщение 1661637)
Не сработало

Должно было сработать: я пробовал. Выложи ещё раз файлики, а то на Рапиде - "ERROR".

Alex Dark 27.06.2009 10:35

Judge, оно срабатывает через раз и не понятно по какому принципу.

Judge 27.06.2009 19:48

Ну не знаю. Вводил даты копированием и в смежные строчки, и через несколько строк, затем выбирал формат ячейки Дата - 14.3 и везде результат был один: дата 11.10 из Word отображалась в Excel как 11.10. http://www.kolobok.us/smiles/standart/meeting.gif

Alex Dark 29.06.2009 07:07

А я пробовал на работе и дома. Результаты разные.
Кстати, если мне набо кинуть в эксель даты, то я их кидаю только в формате с / (наклонная черточка).
Проверено. Ошибок не бывает.

kasha 01.09.2009 20:01

нашел функцию для excel 2007 на русском
 
люди помогите пожалуйста, просто не сталкивался с такйо функцией как СОПАД.... :))

=ИЛИ(СОВПАД(B2;A2:A4)) Сравнение строки "Виноград" с каждым значением из списка (ЛОЖЬ)

вообщем-то мне все-равно аналогично надо сделать только на английском.

=OR(.......(B2;A2:A4))

вопрос конечно нелепый, но такой вот абзац )).
спасибо.

Borland 01.09.2009 20:28

1) http://www.imho.ws/misc.php?do=showrules
http://www.imho.ws/search.php
Microsoft Excel: Вопросы и ответы
+2
клею...
2) http://office.microsoft.com/en-us/excel/HP052090811033.aspx = http://office.microsoft.com/ru-ru/excel/HP052090811049.aspx

PavelKraft 01.09.2009 23:06

to kasha,

OR(EXACT(B2;A2:A4))

kasha 02.09.2009 12:27

Kraft спасибо, а оказалось немного не то что надо )). Эта функция сверяет так сказать левую ячейку с парвой (паралелльно).
а мне так сказать надо, чтобы:
в колонке и ячейке А1 значание например "Аня" , а в колонке В у меня идут например 100 ячеек разные имена, ну и например Аня у меня в В35 ячейке. и тогда как результат формулы, в столбец С выводилась бы 1 или 0 или тру или фолс.
Есть ли что-то подобное к экселе?

Alex Dark 02.09.2009 13:08

kasha, функция =ПОИСКПОЗ(<что ищем>;<где ищем>;параметр поиска) не подойдет?
Возвращает номер строки в диапазоне если поиск успешный или #Н/Д если не удачно

Только там поимк какой то замудрённый. Учти

PavelKraft 02.09.2009 14:21

Предвидя вопрос:
Английский аналог функции ПОИСКПОЗ - MATCH
И на будущее кому может пригодится: список всех функций по русски и по английски можно найти в файле FUNCS.xls находящемся в папке ...\Microsoft Office\Office12\1049 (для Office 2003; в других версиях пользуем поиск).

EvroStandart 02.09.2009 17:16

Цитата:

Сообщение от kasha (Сообщение 1672396)
в колонке и ячейке А1 значание например "Аня" , а в колонке В у меня идут например 100 ячеек разные имена, ну и например Аня у меня в В35 ячейке. и тогда как результат формулы, в столбец С выводилась бы 1 или 0 или тру или фолс.
Есть ли что-то подобное к экселе?

Чем обычный IF не устраивает? :)

В С1 формулу
=IF($A$1=B1;1;0)
и протянуть её вниз за нижний правый угол, значения B1...B100 автоматически увеличатся

Alex Dark 03.09.2009 06:57

[offtop]
EvroStandart, можно и даже нужно так пользоваться... но...
kasha ставит вопрос обобщенно и (ну я во всяком случае так рассуждал) простой ответ типа протяни if до конца колонки наврятли понравится. Тем более есть указание на то, что диапазон поиска достаточно большой, соответственно кроме факта наличия или отсутствия возможно необходимо знать где эта запись. А листать 10-15 экранов вниз и искать глазами или использовать фильтацию - лишние телодвижения и напряжения :biggrin:
"Лучше потратить лишний день на написание программного кода и получить единственное решение за минуту,
чем две минуты искать это решение самому"
Народная мудрость
[/offtop]

EvroStandart 03.09.2009 11:54

"тогда как результат формулы, в столбец С выводилась бы 1 или 0 или тру или фолс"

Я такое объяснение понимаю так:
рядом с каждой заполненной ячейкой столбца В должна быть заполненная ячейка в столбце С с результатом сравнения.
Функцией это можно сделать только протягивая вручную. Для автоматического заполнения придётся процедуру писать.

Alex Dark 03.09.2009 12:33

Да, конечно, но было бы желательно услышать все же автора

kasha 03.09.2009 16:49

Цитата:

Сообщение от Alex Dark (Сообщение 1672537)
"Лучше потратить лишний день на написание программного кода и получить единственное решение за минуту,
чем две минуты искать это решение самому"

:yees: ;)

всем спасибо


Цитата:

Сообщение от EvroStandart (Сообщение 1672453)
Чем обычный IF не устраивает?

В С1 формулу
=IF($A$1=B1;1;0)
и протянуть её вниз за нижний правый угол, значения B1...B100 автоматически увеличатся

не могу, т.к. у меня есть столбец А и столбец Б ... в них в разнобой идут имена...мне надо каждое имя из А проверить нет ли его во всем столбике Б....если нет, то пусть в Ц ставит напротив имени из А 0 , а если есть значение ищ А1 например в столбике Б, то пусть в С1 ставит 1. И так каждое значение из столбика А надо прогнать по всему столбику Б. и если значение из ячейки А не содержится в Б:Б, то напротив того значения из А, в Ц ставим 0....и т.д.

EvroStandart 04.09.2009 23:41

Цитата:

Сообщение от kasha (Сообщение 1672626)
мне надо каждое имя из А проверить нет ли его во всем столбике Б....если нет, то пусть в Ц ставит напротив имени из А 0

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

Evgeshka 17.12.2009 20:41

у меня проблемка "лёкгая", но я уже голову сломала...

у меня в ячейках цифры 0,00 стоят, а по умолчанию 0,000 или даже 0,0000. От этого "итого" неправильно подсчитывается. Уже как только не пробовала формат ячеек менять - всё равно по умолчанию эти последние цифры никуда не уходят, а их до фига в столбце. вручную иx корректировать - глупо, наверняка есть решение и можно поменять формат ячейки. Подскажите, плиз...

V0land 17.12.2009 20:51

Вложений: 1
Evgeshka,
подходит?

Evgeshka 17.12.2009 21:08

V0land,
неа, не подходит... всё равно цифры никуда не уходят. пробовала также через "custom".

в таблице высвечиваются 2 цифры после запятой,

например 130,01

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

Мне надо, чтобы и там и там было одно значение. если я наверху, в функции, стираю вручную последнюю пятёрку - то всё в порядке. но у меня этих цифр от 2000 до 3000. :)

V0land 17.12.2009 21:12

Evgeshka,
странно. у тебя точно формат Number стоит? я специально привел пример, где цифр после запятой - бесконечное множество) Но если поставить Number и 2 после запятой - оно везде 2 и показывается.

Хотя, может, там у тебя где-то округление? Прям щас не подскажу - виртуальную винду уже вырубил )


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

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