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

Вход

Регистрация

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

 

= Мир MS Excel/Выбрать данные соответствующие названиям столбцов - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выбрать данные соответствующие названиям столбцов (Макросы/Sub)
Выбрать данные соответствующие названиям столбцов
ska Дата: Пятница, 11.03.2016, 00:46 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Здравствуйте, прошу помочь разобраться

есть макрос:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim idData As Range
    Set idData = Intersect(Target, Columns("b:b"))
    If Not idData Is Nothing Then
        Set shData = Sheets("Данные_")
        For Each Cell In idData
            If Cell <> "" Then
                With shData
                    r = .Columns(1).Find(Cell, , xlValues, xlWhole).Row
                    c = .Rows(1).Find("Столбец3", , xlValues, xlWhole).Column
                    Cells(Cell.Row, "c").Resize(, 3) = .Cells(r, c + 1).Resize(, 3).Value
                End With
            Else
                Cells(Cell.Row, "c").Resize(, 3).ClearContents 'если не надо, убрать
            End If
        Next Cell
    End If
End Sub
[/vba]

© Manyasha

Как можно его адаптировать под случай, когда выбираемые данные расположены на строке листа "Данные"в разном порядке, а в строке листа "Выборка" последовательно?

Пример в файле
К сообщению приложен файл: 8533266.xlsm(22Kb)
 
Ответить
СообщениеЗдравствуйте, прошу помочь разобраться

есть макрос:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim idData As Range
    Set idData = Intersect(Target, Columns("b:b"))
    If Not idData Is Nothing Then
        Set shData = Sheets("Данные_")
        For Each Cell In idData
            If Cell <> "" Then
                With shData
                    r = .Columns(1).Find(Cell, , xlValues, xlWhole).Row
                    c = .Rows(1).Find("Столбец3", , xlValues, xlWhole).Column
                    Cells(Cell.Row, "c").Resize(, 3) = .Cells(r, c + 1).Resize(, 3).Value
                End With
            Else
                Cells(Cell.Row, "c").Resize(, 3).ClearContents 'если не надо, убрать
            End If
        Next Cell
    End If
End Sub
[/vba]

© Manyasha

Как можно его адаптировать под случай, когда выбираемые данные расположены на строке листа "Данные"в разном порядке, а в строке листа "Выборка" последовательно?

Пример в файле

Автор - ska
Дата добавления - 11.03.2016 в 00:46
ska Дата: Пятница, 11.03.2016, 01:41 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
А если названия колонок будут одинаковыми на листе "Выборка" и листе "Данные"? Ориентируясь на названия колонок как сделать выборку?

Прикладываю уточненный файл для пояснения вопроса
К сообщению приложен файл: 9592851.xlsm(22Kb)


Сообщение отредактировал ska - Пятница, 11.03.2016, 01:47
 
Ответить
СообщениеА если названия колонок будут одинаковыми на листе "Выборка" и листе "Данные"? Ориентируясь на названия колонок как сделать выборку?

Прикладываю уточненный файл для пояснения вопроса

Автор - ska
Дата добавления - 11.03.2016 в 01:41
ska Дата: Пятница, 11.03.2016, 10:30 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Это реально сделать так, чтобы выборка ячеек была по названию столбцов?
 
Ответить
СообщениеЭто реально сделать так, чтобы выборка ячеек была по названию столбцов?

Автор - ska
Дата добавления - 11.03.2016 в 10:30
Manyasha Дата: Пятница, 11.03.2016, 11:23 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 1832
Репутация: 766 ±
Замечаний: 0% ±

Excel 2007, 2010
ska, пробуйте так:
[vba]
Код
If Cell <> "" Then
    With shData
        r = .Columns(1).Find(Cell, , xlValues, xlWhole).Row
        For i = 3 To lc
            Cells(Cell.Row, i) = WorksheetFunction.HLookup(Cells(1, i), .[a1].CurrentRegion, r, 0)
        Next i
    End With
Else
    Cells(Cell.Row, "c").Resize(, lc).ClearContents 'если не надо, убрать
End If
[/vba]


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеska, пробуйте так:
[vba]
Код
If Cell <> "" Then
    With shData
        r = .Columns(1).Find(Cell, , xlValues, xlWhole).Row
        For i = 3 To lc
            Cells(Cell.Row, i) = WorksheetFunction.HLookup(Cells(1, i), .[a1].CurrentRegion, r, 0)
        Next i
    End With
Else
    Cells(Cell.Row, "c").Resize(, lc).ClearContents 'если не надо, убрать
End If
[/vba]

Автор - Manyasha
Дата добавления - 11.03.2016 в 11:23
ska Дата: Пятница, 11.03.2016, 12:02 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Благодарю, Manyasha, все работает если вместо lc подставить число столбцов, в которых нужна подстановка.

Подскажите, пожалуйста, а количество столбцов в "Таблица2", расположенной на листе "Выборка" на автомате лучше как определить?

[vba]
Код

Dim lc As Integer
lc = как?.Columns
[/vba]

%)


Сообщение отредактировал ska - Пятница, 11.03.2016, 12:05
 
Ответить
СообщениеБлагодарю, Manyasha, все работает если вместо lc подставить число столбцов, в которых нужна подстановка.

Подскажите, пожалуйста, а количество столбцов в "Таблица2", расположенной на листе "Выборка" на автомате лучше как определить?

[vba]
Код

Dim lc As Integer
lc = как?.Columns
[/vba]

%)

Автор - ska
Дата добавления - 11.03.2016 в 12:02
Manyasha Дата: Пятница, 11.03.2016, 12:09 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 1832
Репутация: 766 ±
Замечаний: 0% ±

Excel 2007, 2010
ну да, забыла:
[vba]
Код
lc = Cells(1, Columns.Count).End(xlToLeft).Column
[/vba]
или
[vba]
Код
lc = ActiveSheet.UsedRange.Columns.Count
[/vba]


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804


Сообщение отредактировал Manyasha - Пятница, 11.03.2016, 12:09
 
Ответить
Сообщениену да, забыла:
[vba]
Код
lc = Cells(1, Columns.Count).End(xlToLeft).Column
[/vba]
или
[vba]
Код
lc = ActiveSheet.UsedRange.Columns.Count
[/vba]

Автор - Manyasha
Дата добавления - 11.03.2016 в 12:09
ska Дата: Пятница, 11.03.2016, 13:11 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Небольшое дополнение. Может возникать ошибка в случае если названия столбцов не будут совпадать. Скорректировал код следующим образом:
[vba]
Код

With shData
                    r = .Columns(1).Find(Cell, , xlValues, xlWhole).Row
                    For i = 5 To lc
                        If Not IsError(Application.HLookup(Cells(1, i), .[a1].CurrentRegion, r, 0)) Then
                            Cells(Cell.Row, i) = WorksheetFunction.HLookup(Cells(1, i), .[a1].CurrentRegion, r, 0)
                        End If
                    Next i
                End With
[/vba]

все заработало
 
Ответить
СообщениеНебольшое дополнение. Может возникать ошибка в случае если названия столбцов не будут совпадать. Скорректировал код следующим образом:
[vba]
Код

With shData
                    r = .Columns(1).Find(Cell, , xlValues, xlWhole).Row
                    For i = 5 To lc
                        If Not IsError(Application.HLookup(Cells(1, i), .[a1].CurrentRegion, r, 0)) Then
                            Cells(Cell.Row, i) = WorksheetFunction.HLookup(Cells(1, i), .[a1].CurrentRegion, r, 0)
                        End If
                    Next i
                End With
[/vba]

все заработало

Автор - ska
Дата добавления - 11.03.2016 в 13:11
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выбрать данные соответствующие названиям столбцов (Макросы/Sub)
Страница 1 из 11
Поиск:

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