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

Вход

Регистрация

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

 

= Мир MS Excel/сделать выборку по таблице - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » сделать выборку по таблице (Макросы/Sub)
сделать выборку по таблице
Osa Дата: Понедельник, 02.02.2015, 02:12 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Уважаемые эксперты, подскажите, пожалуйста, как сделать выборку по одинаковым ячейкам таблицы, если одной ячейке может соответствовать несколько разных ячеек в другом столбце. Привожу пример в прикрепленных файлах.
К сообщению приложен файл: 0430357.xlsx (10.2 Kb) · 4323833.xlsx (9.3 Kb)
 
Ответить
СообщениеУважаемые эксперты, подскажите, пожалуйста, как сделать выборку по одинаковым ячейкам таблицы, если одной ячейке может соответствовать несколько разных ячеек в другом столбце. Привожу пример в прикрепленных файлах.

Автор - Osa
Дата добавления - 02.02.2015 в 02:12
krosav4ig Дата: Понедельник, 02.02.2015, 04:21 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
[vba]
Код
Sub Макрос()
      Dim arr As Variant
      Application.ScreenUpdating = 0: Application.EnableEvents = 0
      With Intersect(ActiveSheet.UsedRange, [A:G])
          .Copy .Offset(, .Columns.Count + 1)
          With .Offset(, .Columns.Count + 1)
              .UnMerge: .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
              .Copy: .PasteSpecial Paste:=xlPasteValues: .ClearFormats
              arr = .Resize(, 1): .Resize(, 1).Value = .Offset(, 4).Resize(, 1).Value
              .Offset(, 4).Resize(, 1).Value = arr: arr = .Offset(, 1).Resize(, 1)
              .Offset(, 1).Resize(, 1).Value = .Offset(, 5).Resize(, 1).Value
              .Offset(, 5).Resize(, 1).Value = arr: arr = .Offset(, 6).Resize(, 1).Value
              .Offset(, 6).Resize(, 1).Value = .Offset(, 2).Resize(, 1).Value
              With .Offset(, 2).Resize(, 1)
                  .Formula = arr: .NumberFormat = "dd.mm.yy hh:mm"
              End With
              .Columns.AutoFit
          End With
      End With
      Application.CutCopyMode = False
      Application.ScreenUpdating = 1: Application.EnableEvents = 1
End Sub
[/vba]
К сообщению приложен файл: 4323833.xlsm (29.6 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Понедельник, 02.02.2015, 04:22
 
Ответить
Сообщение[vba]
Код
Sub Макрос()
      Dim arr As Variant
      Application.ScreenUpdating = 0: Application.EnableEvents = 0
      With Intersect(ActiveSheet.UsedRange, [A:G])
          .Copy .Offset(, .Columns.Count + 1)
          With .Offset(, .Columns.Count + 1)
              .UnMerge: .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
              .Copy: .PasteSpecial Paste:=xlPasteValues: .ClearFormats
              arr = .Resize(, 1): .Resize(, 1).Value = .Offset(, 4).Resize(, 1).Value
              .Offset(, 4).Resize(, 1).Value = arr: arr = .Offset(, 1).Resize(, 1)
              .Offset(, 1).Resize(, 1).Value = .Offset(, 5).Resize(, 1).Value
              .Offset(, 5).Resize(, 1).Value = arr: arr = .Offset(, 6).Resize(, 1).Value
              .Offset(, 6).Resize(, 1).Value = .Offset(, 2).Resize(, 1).Value
              With .Offset(, 2).Resize(, 1)
                  .Formula = arr: .NumberFormat = "dd.mm.yy hh:mm"
              End With
              .Columns.AutoFit
          End With
      End With
      Application.CutCopyMode = False
      Application.ScreenUpdating = 1: Application.EnableEvents = 1
End Sub
[/vba]

Автор - krosav4ig
Дата добавления - 02.02.2015 в 04:21
Osa Дата: Понедельник, 02.02.2015, 16:40 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
спасибо большое. Если не сложно, то подскажите какой будет макрос в обратную сторону. Мне надо наоборот, чтобы выборка была по именам. в моих приложенных файлах первый - это то, что есть, а второй - то что надо сделать.


Сообщение отредактировал Osa - Понедельник, 02.02.2015, 16:41
 
Ответить
Сообщениеспасибо большое. Если не сложно, то подскажите какой будет макрос в обратную сторону. Мне надо наоборот, чтобы выборка была по именам. в моих приложенных файлах первый - это то, что есть, а второй - то что надо сделать.

Автор - Osa
Дата добавления - 02.02.2015 в 16:40
krosav4ig Дата: Понедельник, 02.02.2015, 19:13 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
[vba]
Код
Sub qwe()
      With Application: .ScreenUpdating = 0: .EnableEvents = 0: .DisplayAlerts = 0
          With ActiveWorkbook.Worksheets("Лист1").Sort
              With .SortFields
                  .Clear
                  .Add Intersect([A1].CurrentRegion, [E:E]), 0, 1, 0
                  .Add Intersect([A1].CurrentRegion, [F:F]), 0, 1, 0
                  .Add Intersect([A1].CurrentRegion, [D:D]), 0, 1, 0
              End With
              .SetRange [A1].CurrentRegion
              .Header = xlYes
              .MatchCase = False
              .Orientation = xlTopToBottom
              .SortMethod = xlPinYin
              .Apply
          End With
          Dim col As Range, rcnt&, rnum&: rnum = 2
          With Intersect([A2].CurrentRegion, [E:G], ActiveSheet.UsedRange.Offset(1))
              .Select
              Do
                  On Error Resume Next
                  Selection.ColumnDifferences(ActiveCell).Select
                  rcnt = Selection.Row - rnum: rnum = Selection.Row
                  If rcnt > 1 Then
                      For Each col In .Rows(rnum).Offset(-rcnt - 1).Resize(rcnt).Columns
                          col.Merge
                      Next
                  End If
              Loop Until Err.Number
              If Selection.Rows.Count > 1 Then
                  For Each col In Selection.Columns
                      col.Merge
                  Next
              End If
          End With
          Intersect([A1].CurrentRegion, [D:D]).Cut
          Intersect([A1].CurrentRegion.EntireRow, [H:H]).Insert Shift:=xlToRight
          Intersect([A1].CurrentRegion, [D:G]).Cut
          Intersect([A1].CurrentRegion, [A:A]).Insert Shift:=xlToRight
      .ScreenUpdating = 1: .EnableEvents = 1: .DisplayAlerts = 1: End With
End Sub
[/vba]
К сообщению приложен файл: 0430357.xlsm (17.6 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Понедельник, 02.02.2015, 19:13
 
Ответить
Сообщение[vba]
Код
Sub qwe()
      With Application: .ScreenUpdating = 0: .EnableEvents = 0: .DisplayAlerts = 0
          With ActiveWorkbook.Worksheets("Лист1").Sort
              With .SortFields
                  .Clear
                  .Add Intersect([A1].CurrentRegion, [E:E]), 0, 1, 0
                  .Add Intersect([A1].CurrentRegion, [F:F]), 0, 1, 0
                  .Add Intersect([A1].CurrentRegion, [D:D]), 0, 1, 0
              End With
              .SetRange [A1].CurrentRegion
              .Header = xlYes
              .MatchCase = False
              .Orientation = xlTopToBottom
              .SortMethod = xlPinYin
              .Apply
          End With
          Dim col As Range, rcnt&, rnum&: rnum = 2
          With Intersect([A2].CurrentRegion, [E:G], ActiveSheet.UsedRange.Offset(1))
              .Select
              Do
                  On Error Resume Next
                  Selection.ColumnDifferences(ActiveCell).Select
                  rcnt = Selection.Row - rnum: rnum = Selection.Row
                  If rcnt > 1 Then
                      For Each col In .Rows(rnum).Offset(-rcnt - 1).Resize(rcnt).Columns
                          col.Merge
                      Next
                  End If
              Loop Until Err.Number
              If Selection.Rows.Count > 1 Then
                  For Each col In Selection.Columns
                      col.Merge
                  Next
              End If
          End With
          Intersect([A1].CurrentRegion, [D:D]).Cut
          Intersect([A1].CurrentRegion.EntireRow, [H:H]).Insert Shift:=xlToRight
          Intersect([A1].CurrentRegion, [D:G]).Cut
          Intersect([A1].CurrentRegion, [A:A]).Insert Shift:=xlToRight
      .ScreenUpdating = 1: .EnableEvents = 1: .DisplayAlerts = 1: End With
End Sub
[/vba]

Автор - krosav4ig
Дата добавления - 02.02.2015 в 19:13
Osa Дата: Понедельник, 02.02.2015, 20:38 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Извините, но почему-то в столбце "инсотрудн" возникают лишние строчки. У каждого сотрудника может быть только одно значение.
 
Ответить
СообщениеИзвините, но почему-то в столбце "инсотрудн" возникают лишние строчки. У каждого сотрудника может быть только одно значение.

Автор - Osa
Дата добавления - 02.02.2015 в 20:38
krosav4ig Дата: Понедельник, 02.02.2015, 23:46 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
Osa, ну дык какие у вас в первом файле, такие и возникают.


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
СообщениеOsa, ну дык какие у вас в первом файле, такие и возникают.

Автор - krosav4ig
Дата добавления - 02.02.2015 в 23:46
Osa Дата: Вторник, 03.02.2015, 00:04 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Понял... мой косяк. Извините!
К сообщению приложен файл: 9323825.jpg (35.1 Kb)


Сообщение отредактировал Osa - Вторник, 03.02.2015, 00:12
 
Ответить
СообщениеПонял... мой косяк. Извините!

Автор - Osa
Дата добавления - 03.02.2015 в 00:04
Osa Дата: Вторник, 03.02.2015, 02:44 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Скажите, а есть ли другой способ решения такой задачи? Скажем так, для большого размера табличных данных.
 
Ответить
СообщениеСкажите, а есть ли другой способ решения такой задачи? Скажем так, для большого размера табличных данных.

Автор - Osa
Дата добавления - 03.02.2015 в 02:44
Pelena Дата: Вторник, 03.02.2015, 09:12 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 19187
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Сводная не подойдёт?
К сообщению приложен файл: 9797151.xlsx (15.0 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеСводная не подойдёт?

Автор - Pelena
Дата добавления - 03.02.2015 в 09:12
Osa Дата: Вторник, 03.02.2015, 18:10 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Pelena, объясните, пожалуйста, как сделать сводную? По примеру мне ничего не понятно.
 
Ответить
СообщениеPelena, объясните, пожалуйста, как сделать сводную? По примеру мне ничего не понятно.

Автор - Osa
Дата добавления - 03.02.2015 в 18:10
Pelena Дата: Вторник, 03.02.2015, 19:44 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 19187
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Становитесь в таблицу -- вкладка Вставка -- Сводная таблица -- проверяете выделившийся диапазон -- ставите переключатель на новый лист или на существующий -- ОК.
Получаете заготовку для сводной и список полей справа. Затем начинаете выбирать нужные поля, можно перетаскивать мышкой. На вкладке Конструктор выберите макет В виде таблицы.
Подробнее можно прочитать в справке или здесь http://www.planetaexcel.ru/techniques/8/130/


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеСтановитесь в таблицу -- вкладка Вставка -- Сводная таблица -- проверяете выделившийся диапазон -- ставите переключатель на новый лист или на существующий -- ОК.
Получаете заготовку для сводной и список полей справа. Затем начинаете выбирать нужные поля, можно перетаскивать мышкой. На вкладке Конструктор выберите макет В виде таблицы.
Подробнее можно прочитать в справке или здесь http://www.planetaexcel.ru/techniques/8/130/

Автор - Pelena
Дата добавления - 03.02.2015 в 19:44
Osa Дата: Вторник, 03.02.2015, 20:10 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Pelena, это как раз то, что требуется. Спасибо огромное! Сейчас попробую.


Сообщение отредактировал Osa - Вторник, 03.02.2015, 20:10
 
Ответить
СообщениеPelena, это как раз то, что требуется. Спасибо огромное! Сейчас попробую.

Автор - Osa
Дата добавления - 03.02.2015 в 20:10
Osa Дата: Вторник, 03.02.2015, 23:38 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Pelena, еще вопросик. у меня все получается, только не могу понять почему в каждой ячейке перед значениями стои знак "-" в голубом прямоугольнике. Может подскажете?
 
Ответить
СообщениеPelena, еще вопросик. у меня все получается, только не могу понять почему в каждой ячейке перед значениями стои знак "-" в голубом прямоугольнике. Может подскажете?

Автор - Osa
Дата добавления - 03.02.2015 в 23:38
Pelena Дата: Среда, 04.02.2015, 00:00 | Сообщение № 14
Группа: Админы
Ранг: Местный житель
Сообщений: 19187
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
На вкладке Параметры отключите Кнопки +/-


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеНа вкладке Параметры отключите Кнопки +/-

Автор - Pelena
Дата добавления - 04.02.2015 в 00:00
Osa Дата: Среда, 04.02.2015, 00:27 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Спасибо огромнейшее. Вы гуру.
 
Ответить
СообщениеСпасибо огромнейшее. Вы гуру.

Автор - Osa
Дата добавления - 04.02.2015 в 00:27
Osa Дата: Среда, 04.02.2015, 01:25 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Появился еще один вопрос. У меня в исходной таблице есть выделенные цветом ячейки. Сводная таблица их не отражает. Можно ли это как-то реализовать?
 
Ответить
СообщениеПоявился еще один вопрос. У меня в исходной таблице есть выделенные цветом ячейки. Сводная таблица их не отражает. Можно ли это как-то реализовать?

Автор - Osa
Дата добавления - 04.02.2015 в 01:25
Gustav Дата: Среда, 04.02.2015, 04:57 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Например, добавить столбец в исходные данные и текстом прописать цвет этих ячеек: зеленый, красный, синий. Или какие-то условные коды: 1, 2, 3. Чтобы прописать один цвет сразу в несколько ячеек можно сначала отсортировать данные по цвету - в последних версиях Excel такая возможность имеется.

Или написать на VBA крохотную функцию (UDF), которая сразу будет выводить код цвета - там, RGB или ColorIndex.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Среда, 04.02.2015, 05:05
 
Ответить
СообщениеНапример, добавить столбец в исходные данные и текстом прописать цвет этих ячеек: зеленый, красный, синий. Или какие-то условные коды: 1, 2, 3. Чтобы прописать один цвет сразу в несколько ячеек можно сначала отсортировать данные по цвету - в последних версиях Excel такая возможность имеется.

Или написать на VBA крохотную функцию (UDF), которая сразу будет выводить код цвета - там, RGB или ColorIndex.

Автор - Gustav
Дата добавления - 04.02.2015 в 04:57
Pelena Дата: Среда, 04.02.2015, 07:33 | Сообщение № 18
Группа: Админы
Ранг: Местный житель
Сообщений: 19187
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Появился еще один вопрос

Osa, слишком много вопросов в одной теме. Читайте Правила форума


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Появился еще один вопрос

Osa, слишком много вопросов в одной теме. Читайте Правила форума

Автор - Pelena
Дата добавления - 04.02.2015 в 07:33
Мир MS Excel » Вопросы и решения » Вопросы по VBA » сделать выборку по таблице (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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