Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Выборка с одного листа на другой / 13 сообщений из 13, страница 1 из 1
19.03.2012, 10:55
    #37711352
Студен15
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с одного листа на другой
Пусть на листе2 есть некий исходный массив информации. Например, перечень выставленных счетов.
Необходимо на листе1 отображать некую выборку из листа2 согласно параметрам введенным пользователем.
Например, в начальном шаблоне задается что в ячейке D2 - начальная дата, а в D3 - конечная дата.
Хотелось бы в ячейке А5 прописать что-то вроде select * from [Лист2] where InvoiceDate<[Лист1].D3 and InvoiceDate>[Лист1].D2
И что бы автоматически при смене цифр в ячейках D2 и D3 весь вставляемый набор данных пересчитывался бы.

Возможно ли такое? Если да, то как?
...
Рейтинг: 0 / 0
19.03.2012, 10:57
    #37711354
Serge 007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с одного листа на другой
Студен15Возможно ли такое? Если да, то как?
Возможно. Формулами.
Будет пример - будет решение
...
Рейтинг: 0 / 0
19.03.2012, 11:38
    #37711427
Студен15
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с одного листа на другой
Пример во вложении
...
Рейтинг: 0 / 0
19.03.2012, 11:39
    #37711428
Студен15
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с одного листа на другой
Не вложился первый раз
...
Рейтинг: 0 / 0
19.03.2012, 12:12
    #37711495
Serge 007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с одного листа на другой
Как должна выглядеть выборка?
...
Рейтинг: 0 / 0
19.03.2012, 12:32
    #37711537
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с одного листа на другой
Serge 007 , а что, по селекту в первом посте не видно?
Вообще, ИМХО, можно действительно сделать запрос через ADO к листу таблицы, и пересчитывать выборку в Worksheet_Change() . Даже сам селект можно вынести отдельно в ячейку, и при необходимости - изменять его (поскольку ТС владеет SQL - это будет и более оптимальный вариант).
...
Рейтинг: 0 / 0
19.03.2012, 12:37
    #37711555
Студен15
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с одного листа на другой
AndreTM Serge 007 , а что, по селекту в первом посте не видно?
Вообще, ИМХО, можно действительно сделать запрос через ADO к листу таблицы, и пересчитывать выборку в Worksheet_Change() . Даже сам селект можно вынести отдельно в ячейку, и при необходимости - изменять его (поскольку ТС владеет SQL - это будет и более оптимальный вариант).

Именно так и хотелось бы.
Что вписать в формулу что бы вернулся набор данных?
...
Рейтинг: 0 / 0
19.03.2012, 13:17
    #37711624
Serge 007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с одного листа на другой
AndreTM Serge 007 , а что, по селекту в первом посте не видно?
К сожалению, я в SQL ни в зуб ногой :)
select * - это выбрать всё?
Тогда см. файл.

ЗЫ Формулы массива вводятся нажатием Ctrl+Shift+Enter
...
Рейтинг: 0 / 0
19.03.2012, 15:39
    #37711905
Студен15
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с одного листа на другой
Serge 007AndreTM Serge 007 , а что, по селекту в первом посте не видно?
К сожалению, я в SQL ни в зуб ногой :)
select * - это выбрать всё?
Тогда см. файл.

ЗЫ Формулы массива вводятся нажатием Ctrl+Shift+Enter

Эм... мне бы именно SQL со всеми примочками типа union, join, group by
...
Рейтинг: 0 / 0
19.03.2012, 20:08
    #37712393
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с одного листа на другой
Студен15Эм... мне бы именно SQL со всеми примочками типа union, join, group byТипа так?
...
Рейтинг: 0 / 0
19.03.2012, 20:09
    #37712396
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с одного листа на другой
Кажется, отправил несохраненный вариант...
...
Рейтинг: 0 / 0
20.03.2012, 07:40
    #37712747
Студен15
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с одного листа на другой
AndreTMСтуден15Эм... мне бы именно SQL со всеми примочками типа union, join, group byТипа так?

Спасибо
То, что нужно
...
Рейтинг: 0 / 0
20.03.2012, 11:27
    #37713019
_snark_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с одного листа на другой
Пожалуй свои три копейки вставлю

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Function Test(sql As String) As Variant
' sql = Select t1.Name as name, t1.Number as n, t2.Cnt as cnt FROM [Лист1$] as t1 INNER JOIN [Лист2$] as t2 on t1.name = t2.name

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1

Debug.Print Application.ActiveWorkbook.FullName

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordset = CreateObject("ADODB.Recordset")

objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & Application.ActiveWorkbook.FullName & ";" & _
        "Extended Properties=""Excel 8.0;HDR=Yes;"";"

objRecordset.Open sql, _
    objConnection, adOpenStatic, adLockOptimistic, adCmdText

Dim vArray As Variant
ReDim vArray(1 To objRecordset.RecordCount, 1 To objRecordset.Fields.Count)

R = 1
Do Until objRecordset.EOF
    C = 1
    For Each f In objRecordset.Fields
        vArray(R, C) = f.Value
        C = C + 1
    Next
    R = R + 1
    objRecordset.MoveNext
Loop
Test = vArray
End Function



Ну и функцию вызывать очевидным образом, например, test("Select t1.Name as name, t1.Number as n, t2.Cnt as cnt FROM [Лист1$] as t1 INNER JOIN [Лист2$] as t2 on t1.name = t2.name") при этом вводить как функцию массива.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Выборка с одного листа на другой / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]