Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Создание перечня по форме - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Создание перечня по форме (После заполнения формы надо получить список.)
Создание перечня по форме
Hugo Дата: Воскресенье, 10.07.2011, 12:32 | Сообщение № 21
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Кстати, вполне может возникнуть и тут вопрос - что к чему приравняется smile
Так вот, всегда левое приравнивается к правому (т.е. a примет значение b), и в общем это логичнее, чем приравнивать наоборот smile


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеКстати, вполне может возникнуть и тут вопрос - что к чему приравняется smile
Так вот, всегда левое приравнивается к правому (т.е. a примет значение b), и в общем это логичнее, чем приравнивать наоборот smile

Автор - Hugo
Дата добавления - 10.07.2011 в 12:32
light26 Дата: Воскресенье, 10.07.2011, 13:28 | Сообщение № 22
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Постараюсь объяснить что я хочу на примере формулы, которую знаю:
Пример: =СЧЕТЕСЛИ(А1:А10;"яблоки*")
Как можно объяснить эту запись?
1. формула считает количество ячеек в заданном диапазоне, содержащих в начале текста слово "яблоки"
2. счетесли считает количество ячеек по заданному условию в заданном диапазоне. То есть, в данном примере, в ячейках с А1 по А10 формула сосчитает в скольких из этих ячеек есть слово "яблоко". Причем символ "*" в конце слова яблоки в формуле дает команду на подсчет ячеек, содержащих это слово в начале текста, не обращая внимание на то что будет после (яблоки красные, яблоки зеленые...). Если запись будет иметь вид "*яблоки*", то формула сосчитает все ячейки, содержащие запись "яблоки" не зависимо от положения этого слова в предложении (спелые красные яблоки, яблоки зеленые, испорченные красные яблоки....). При записи "яблоко" считаются ячейки, содержащие только это слово, т.е. если в ячейке кроме этого слова есть еще хоть пробел, ячейка считаться не будет.

Вот два способа объяснить эту формулу. Оба правильных. Но если первое объяснение начинающему пользователю не даст ничего (это есть и в справке по формулам), то второе будет понятно даже ребенку. smile
Вот тонкость:
Quote (Hugo)
Кстати, вполне может возникнуть и тут вопрос - что к чему приравняется smile
Так вот, всегда левое приравнивается к правому (т.е. a примет значение b), и в общем это логичнее, чем приравнивать наоборот smile

Так что вопросов еще масса, тем более, что VBA на английском
Quote (Hugo)
Второй блок надо бы поставить первым - если MsgBox "Не всё заполнено!", то незачем массив формировать.


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Воскресенье, 10.07.2011, 13:32
 
Ответить
СообщениеПостараюсь объяснить что я хочу на примере формулы, которую знаю:
Пример: =СЧЕТЕСЛИ(А1:А10;"яблоки*")
Как можно объяснить эту запись?
1. формула считает количество ячеек в заданном диапазоне, содержащих в начале текста слово "яблоки"
2. счетесли считает количество ячеек по заданному условию в заданном диапазоне. То есть, в данном примере, в ячейках с А1 по А10 формула сосчитает в скольких из этих ячеек есть слово "яблоко". Причем символ "*" в конце слова яблоки в формуле дает команду на подсчет ячеек, содержащих это слово в начале текста, не обращая внимание на то что будет после (яблоки красные, яблоки зеленые...). Если запись будет иметь вид "*яблоки*", то формула сосчитает все ячейки, содержащие запись "яблоки" не зависимо от положения этого слова в предложении (спелые красные яблоки, яблоки зеленые, испорченные красные яблоки....). При записи "яблоко" считаются ячейки, содержащие только это слово, т.е. если в ячейке кроме этого слова есть еще хоть пробел, ячейка считаться не будет.

Вот два способа объяснить эту формулу. Оба правильных. Но если первое объяснение начинающему пользователю не даст ничего (это есть и в справке по формулам), то второе будет понятно даже ребенку. smile
Вот тонкость:
Quote (Hugo)
Кстати, вполне может возникнуть и тут вопрос - что к чему приравняется smile
Так вот, всегда левое приравнивается к правому (т.е. a примет значение b), и в общем это логичнее, чем приравнивать наоборот smile

Так что вопросов еще масса, тем более, что VBA на английском
Quote (Hugo)
Второй блок надо бы поставить первым - если MsgBox "Не всё заполнено!", то незачем массив формировать.

Автор - light26
Дата добавления - 10.07.2011 в 13:28
Serge_007 Дата: Воскресенье, 10.07.2011, 13:40 | Сообщение № 23
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Ну и к чему это?
Как это связано с темой топика?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеНу и к чему это?
Как это связано с темой топика?

Автор - Serge_007
Дата добавления - 10.07.2011 в 13:40
light26 Дата: Воскресенье, 10.07.2011, 13:44 | Сообщение № 24
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Quote (Serge_007)
Ну и к чему это?

К тому, что для меня объяснение принципа работы этого макроса в виде
Quote (RAN)
В макросе 5 блоков with.
1 блок - собираем данные с листа2 в массив "a".
2 блок - на листе1 проверяем, все-ли заполнено, и если да - формируем запись "temp"
3 блок - создаем словарь с записями из данных массива "a" и проверяем, нет ли в нем записи "temp".
Если такой строки нет
4 блок - заносим данные из столбца "В" листа1 в массив "а"
5 блок - выгружаем данные из массива "а" в пустую строку на листе2, туда-же добавляем формулы
Напоследок Beep!

это объяснение по алгоритму первого способа в предыдущем сообщении, а я бы хотел по второму.


Я не волшебник. Я только учусь
 
Ответить
Сообщение
Quote (Serge_007)
Ну и к чему это?

К тому, что для меня объяснение принципа работы этого макроса в виде
Quote (RAN)
В макросе 5 блоков with.
1 блок - собираем данные с листа2 в массив "a".
2 блок - на листе1 проверяем, все-ли заполнено, и если да - формируем запись "temp"
3 блок - создаем словарь с записями из данных массива "a" и проверяем, нет ли в нем записи "temp".
Если такой строки нет
4 блок - заносим данные из столбца "В" листа1 в массив "а"
5 блок - выгружаем данные из массива "а" в пустую строку на листе2, туда-же добавляем формулы
Напоследок Beep!

это объяснение по алгоритму первого способа в предыдущем сообщении, а я бы хотел по второму.

Автор - light26
Дата добавления - 10.07.2011 в 13:44
Serge_007 Дата: Воскресенье, 10.07.2011, 13:50 | Сообщение № 25
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Ну дык так и пиши...


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеНу дык так и пиши...

Автор - Serge_007
Дата добавления - 10.07.2011 в 13:50
light26 Дата: Воскресенье, 10.07.2011, 13:53 | Сообщение № 26
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
ну дык я так и пишу)))
Quote (light26)
Постараюсь объяснить что я хочу на примере формулы, которую знаю:


Я не волшебник. Я только учусь
 
Ответить
Сообщениену дык я так и пишу)))
Quote (light26)
Постараюсь объяснить что я хочу на примере формулы, которую знаю:

Автор - light26
Дата добавления - 10.07.2011 в 13:53
Serge_007 Дата: Воскресенье, 10.07.2011, 13:55 | Сообщение № 27
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Это не одно и тоже....


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеЭто не одно и тоже....

Автор - Serge_007
Дата добавления - 10.07.2011 в 13:55
Hugo Дата: Воскресенье, 10.07.2011, 14:40 | Сообщение № 28
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Мне кажется, что пример не удачен, т.к. тут всё понятно, если включить логику:
"яблоки*" = содержащих в начале текста слово "яблоки"
следовательно
"*яблоки" = содержащих в конце текста слово "яблоки"
и
"*яблоки*" = содержащих в тексте слово "яблоки"
И даже не обязательно уже знать, что звёздочка означает "любое количество любых символов"...


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеМне кажется, что пример не удачен, т.к. тут всё понятно, если включить логику:
"яблоки*" = содержащих в начале текста слово "яблоки"
следовательно
"*яблоки" = содержащих в конце текста слово "яблоки"
и
"*яблоки*" = содержащих в тексте слово "яблоки"
И даже не обязательно уже знать, что звёздочка означает "любое количество любых символов"...

Автор - Hugo
Дата добавления - 10.07.2011 в 14:40
light26 Дата: Воскресенье, 10.07.2011, 16:03 | Сообщение № 29
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Hugo, Вы несколько невнимательны. я привел не саму формулу в качестве примера, а ее, как средство, что даже такую простую формулу можно разъяснить по-разному: общими фразами либо подробно, разложив по полочкам, с указанием дополнительных возможностей


Я не волшебник. Я только учусь
 
Ответить
СообщениеHugo, Вы несколько невнимательны. я привел не саму формулу в качестве примера, а ее, как средство, что даже такую простую формулу можно разъяснить по-разному: общими фразами либо подробно, разложив по полочкам, с указанием дополнительных возможностей

Автор - light26
Дата добавления - 10.07.2011 в 16:03
Hugo Дата: Воскресенье, 10.07.2011, 19:12 | Сообщение № 30
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Ну так я и написал - пример не совсем удачен, т.к. и короткое описание вполне самодостаточно.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНу так я и написал - пример не совсем удачен, т.к. и короткое описание вполне самодостаточно.

Автор - Hugo
Дата добавления - 10.07.2011 в 19:12
light26 Дата: Воскресенье, 10.07.2011, 19:22 | Сообщение № 31
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Hugo, скодько лет Вы знаете excel? 10? Вот представьте себе, что 11 лет назад Вам объяснили по первому способу принцип действия этой формулы. Сомневаюсь, что у Вас не возникли бы дополнительные вопросы.
смысл этого примера в том, что я хотел бы, чтобы мне подробно объяснили как работает макрос, предложенный в этой теме. чтобы в последствии я мог сам применять его.
Так понятней?


Я не волшебник. Я только учусь
 
Ответить
СообщениеHugo, скодько лет Вы знаете excel? 10? Вот представьте себе, что 11 лет назад Вам объяснили по первому способу принцип действия этой формулы. Сомневаюсь, что у Вас не возникли бы дополнительные вопросы.
смысл этого примера в том, что я хотел бы, чтобы мне подробно объяснили как работает макрос, предложенный в этой теме. чтобы в последствии я мог сам применять его.
Так понятней?

Автор - light26
Дата добавления - 10.07.2011 в 19:22
Hugo Дата: Воскресенье, 10.07.2011, 21:26 | Сообщение № 32
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Хорошо.
Постарался объяснить.
[vba]
Код
Option Explicit

Sub zanesti()
'объявление переменных
       Dim a, i As Long, x As Long, temp

       'по первому листу (т.е. по листу с кодовым именем Лист1)
       With Лист1
           'считаем заполненные ячейки, если мало - то сообщение и выход
           If Application.CountA(.Range("b1:b6")) <> 6 Then MsgBox "Не всё заполнено!", vbCritical: End
           'заносим в временную переменную значения ячеек - формируем слитную  строку
           temp = .[b1] & .[b2] & .[b3] & .[b4] & .[b5] & .[b6]
       End With

       'по второму листу (т.е. по листу с кодовым именем Лист2)
       With Лист2
           'берём в массив значения с A2 по Gпоследняя_заполненная_ячейка_в_первой_колонке+1
           a = .Range(.Cells(2, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 7)).Value
       End With

       'работаем с словарём
       With CreateObject("Scripting.Dictionary")
           'заносим в словарь уже занесённые в список данные из массива
           For i = 1 To UBound(a)
               .Item(a(i, 2) & a(i, 3) & a(i, 4) & a(i, 5) & a(i, 6) & a(i, 7)) = CStr(1)
           Next
           'проверяем по словарю нового клиента (из переменной temp)
           'если такой уже есть (не только ФИО, но и должность и даты), то сообщение и выход
           If .exists(temp) Then MsgBox "Такой клиент уже есть!", vbCritical: End
       End With

       'в переменную берём верхний индекс массива (где пустые значения)
       x = UBound(a)

       'по первому листу (т.е. по листу с кодовым именем Лист1)
       'увеличиваем счётчик и дополняем массив данными с листа
       With Лист1
           If x = 1 Then a(x, 1) = 1 Else a(x, 1) = a(x - 1, 1) + 1
           a(x, 2) = .[b1]
           a(x, 3) = .[b2]
           a(x, 4) = .[b3]
           a(x, 5) = .[b4]
           a(x, 6) = .[b5]
           a(x, 7) = .[b6]
       End With

       'по второму листу (т.е. по листу с кодовым именем Лист2)
       'выгружаем назад дополненный массив (в то же место, откуда его брали)
       With Лист2
           .Range(.Cells(2, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 7)).Value = a
       End With
       'это просто биип <img src="http://s5.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile" />
       Beep
End Sub
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеХорошо.
Постарался объяснить.
[vba]
Код
Option Explicit

Sub zanesti()
'объявление переменных
       Dim a, i As Long, x As Long, temp

       'по первому листу (т.е. по листу с кодовым именем Лист1)
       With Лист1
           'считаем заполненные ячейки, если мало - то сообщение и выход
           If Application.CountA(.Range("b1:b6")) <> 6 Then MsgBox "Не всё заполнено!", vbCritical: End
           'заносим в временную переменную значения ячеек - формируем слитную  строку
           temp = .[b1] & .[b2] & .[b3] & .[b4] & .[b5] & .[b6]
       End With

       'по второму листу (т.е. по листу с кодовым именем Лист2)
       With Лист2
           'берём в массив значения с A2 по Gпоследняя_заполненная_ячейка_в_первой_колонке+1
           a = .Range(.Cells(2, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 7)).Value
       End With

       'работаем с словарём
       With CreateObject("Scripting.Dictionary")
           'заносим в словарь уже занесённые в список данные из массива
           For i = 1 To UBound(a)
               .Item(a(i, 2) & a(i, 3) & a(i, 4) & a(i, 5) & a(i, 6) & a(i, 7)) = CStr(1)
           Next
           'проверяем по словарю нового клиента (из переменной temp)
           'если такой уже есть (не только ФИО, но и должность и даты), то сообщение и выход
           If .exists(temp) Then MsgBox "Такой клиент уже есть!", vbCritical: End
       End With

       'в переменную берём верхний индекс массива (где пустые значения)
       x = UBound(a)

       'по первому листу (т.е. по листу с кодовым именем Лист1)
       'увеличиваем счётчик и дополняем массив данными с листа
       With Лист1
           If x = 1 Then a(x, 1) = 1 Else a(x, 1) = a(x - 1, 1) + 1
           a(x, 2) = .[b1]
           a(x, 3) = .[b2]
           a(x, 4) = .[b3]
           a(x, 5) = .[b4]
           a(x, 6) = .[b5]
           a(x, 7) = .[b6]
       End With

       'по второму листу (т.е. по листу с кодовым именем Лист2)
       'выгружаем назад дополненный массив (в то же место, откуда его брали)
       With Лист2
           .Range(.Cells(2, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 7)).Value = a
       End With
       'это просто биип <img src="http://s5.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile" />
       Beep
End Sub
[/vba]

Автор - Hugo
Дата добавления - 10.07.2011 в 21:26
RAN Дата: Воскресенье, 10.07.2011, 22:36 | Сообщение № 33
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Тощевата титька
Вот тут не просасывается!
Цитата (Hugo)
[vba]
Код
a(x, 2) = .[b1]
a(x, 3) = .[b2]
a(x, 4) = .[b3]
a(x, 5) = .[b4]
a(x, 6) = .[b5]
a(x, 7) = .[b6]
[/vba]




Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеТощевата титька
Вот тут не просасывается!
Цитата (Hugo)
[vba]
Код
a(x, 2) = .[b1]
a(x, 3) = .[b2]
a(x, 4) = .[b3]
a(x, 5) = .[b4]
a(x, 6) = .[b5]
a(x, 7) = .[b6]
[/vba]



Автор - RAN
Дата добавления - 10.07.2011 в 22:36
Hugo Дата: Воскресенье, 10.07.2011, 23:23 | Сообщение № 34
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

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


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
Сообщение"дополняем массив данными с листа"
Я даже не знаю, как подробнее описать.
В каждую строку что-ли добавлять коммент...

Автор - Hugo
Дата добавления - 10.07.2011 в 23:23
light26 Дата: Воскресенье, 10.07.2011, 23:50 | Сообщение № 35
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Quote (Hugo)
В каждую строку что-ли добавлять коммент...

ага )))
не, спасибо, конечно, и на том. я обещаю постараться разобраться, но..что такое переменная, что такое массив, что такое словарь?....
Да, вот такой я бестолковый(((
Кстати, можно у Вас, Hugo, попросить номер icq? Почта моя light26@ya.ru


Я не волшебник. Я только учусь
 
Ответить
Сообщение
Quote (Hugo)
В каждую строку что-ли добавлять коммент...

ага )))
не, спасибо, конечно, и на том. я обещаю постараться разобраться, но..что такое переменная, что такое массив, что такое словарь?....
Да, вот такой я бестолковый(((
Кстати, можно у Вас, Hugo, попросить номер icq? Почта моя light26@ya.ru

Автор - light26
Дата добавления - 10.07.2011 в 23:50
Hugo Дата: Понедельник, 11.07.2011, 00:57 | Сообщение № 36
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Нуу, батенька, Вам азы изучить нужно.
Например http://www.firststeps.ru/ - там слева VBA by Step.
Хотя это тоже не совсем "первые шаги" - что такое переменная там уже нет объяснения, только про типы переменных.
Я тоже не объясню - ну не учитель я...
Разве что так -
переменная - это то, чему можно присвоить что-то
массив - упорядоченная совокупность значений (у каждого значения есть "адрес")
словарь - собрание уникальных строк

А аськи нет - а как-то скайпом обхожусь. Так что пишите на почту.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНуу, батенька, Вам азы изучить нужно.
Например http://www.firststeps.ru/ - там слева VBA by Step.
Хотя это тоже не совсем "первые шаги" - что такое переменная там уже нет объяснения, только про типы переменных.
Я тоже не объясню - ну не учитель я...
Разве что так -
переменная - это то, чему можно присвоить что-то
массив - упорядоченная совокупность значений (у каждого значения есть "адрес")
словарь - собрание уникальных строк

А аськи нет - а как-то скайпом обхожусь. Так что пишите на почту.

Автор - Hugo
Дата добавления - 11.07.2011 в 00:57
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Создание перечня по форме (После заполнения формы надо получить список.)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!