Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 17
1

Выполнение выборки Select на листе Excel

10.02.2013, 20:32. Показов 7873. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Очень нужна помощь
есть таблица на фиксированном листе Worksheets("1704") cо столбца А по столбец Т, где первая строка название
- требуется создать лист отчет, куда в последствии вывести информацию
- выбрать записи где в столбце A нет записи "NAT MINSK", а в столбце E <> "RUB"
- в таблице могут быть одинаковые записи по полям N-Q, в таком случае надо просуммировать поле X1, а поле X2 определяется как суммированное X3 / X1

Visual Basic
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
35
36
37
Sub SSS_1()
Const N = 90
Dim i, p, g, iter As Integer
Dim c As Object
Dim sSql As String
 
 
 
    If IsWorkSheetExist("отчет") = True Then
        Worksheets("отчет").Delete
        Set NewSheet = Worksheets.Add
        NewSheet.Name = "отчет"
    Else
        Set NewSheet = Worksheets.Add
        NewSheet.Name = "отчет"
    End If
 
 
    Range("B2").Select
    Selection.End(xlDown).Select
    EndRow = ActiveCell.Row
       
    Worksheets("1704").Range("A2:T" & EndRow).Name = t01
    Worksheets("1704").Range("N").Name = "K1"
    Worksheets("1704").Range("O").Name = "K2"
    Worksheets("1704").Range("P").Name = "K3"
    Worksheets("1704").Range("Q").Name = "K4"
    Worksheets("1704").Range("R").Name = "X1"
    Worksheets("1704").Range("S").Name = "X2"
    Worksheets("1704").Range("T").Name = "X3"
    
 
    Sql = "select * from t01 where Worksheets("1704").Cells("A") <> "NAT MINSK" Or Worksheets("1704").Cells("E") <> "RUB" _
    Group by "K1", "K2", "K3", "K4" _
    Order by "K1", "K2", "K3", "K4", "X1", "X2", "X3" 
 
End Sub
Вложения
Тип файла: xls 1704.xls (20.5 Кб, 44 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2013, 20:32
Ответы с готовыми решениями:

Выполнение хранимой процедуры из выборки select
Есть условие которое показывает необходимые данные, необходимо как-то эти данные передать в...

Вывод результата выборки Select SQL в Excel
Доброго времени суток! Подскажите, варианты решений в такой ситуации: Есть программа которая...

.Select на неактивном листе
Братцы кодеры нужна ваша помощь. Есть такая фишка При переключении на другой лист мне нужно в...

Как сложить 3 SELECT выборки
Есть 3 сложных выборки, каждая из которых возращает столбец чисел. Мне нужно сложить эти 3 столбца...

14
призрак
3263 / 891 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
10.02.2013, 22:22 2
вот этот приведенный вами код - к чему?
и почему его нет в прикрепленном файле?

Добавлено через 25 минут
Цитата Сообщение от shark555 Посмотреть сообщение
в таблице могут быть одинаковые записи по полям N-Q, в таком случае надо просуммировать поле X1, а поле X2 определяется как суммированное X3 / X1
не уверен, что понял правильно.

Visual Basic
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
Sub t()
    Dim sCon$, rs As Object, cn As Object, w As Worksheet
    Dim sSQL$
    Set rs = CreateObject("ADODB.Recordset")
    Set cn = CreateObject("ADODB.Connection")
    Select Case CLng(Split(Application.Version, ".")(0))
        Case Is < 12
            sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName _
              & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
        Case Is >= 12
            sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName _
            & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
    End Select ' thnx R Dmitry
    
    sSQL = "SELECT COUNTERPARTY, CPTY_TCID, DIRECTION, INSTR_1, VOLUME," _
        & " RATE, START_DATE, END_DATE, PERIOD, INTEREST, BASIS, КУРС_НБРБ," _
        & " DEAL_ID, K1, K2, K3, sum(X1), sum(X3)/sum(X2), X4" _
        & " FROM [1704$A:T] WHERE COUNTERPARTY<>""NAT MINSK"" AND INSTR_1<>""RUB""" _
        & " GROUP BY COUNTERPARTY, CPTY_TCID, DIRECTION, INSTR_1, VOLUME," _
        & " RATE, START_DATE, END_DATE, PERIOD, INTEREST, BASIS, КУРС_НБРБ," _
        & " DEAL_ID, K1, K2, K3, X4"
    cn.Open sCon
    Set rs = cn.Execute(sSQL)
    Set w = ThisWorkbook.Worksheets.Add
    w.[a2].CopyFromRecordset rs
End Sub
заголовки на новом листе нарисуйте сами.
2
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 17
10.02.2013, 22:35  [ТС] 3
Выдается сообщение
Compile Error Syntax Eror
0
357 / 163 / 27
Регистрация: 21.06.2011
Сообщений: 350
10.02.2013, 22:39 4
У меня все отлично отработало...
0
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 17
10.02.2013, 22:42  [ТС] 5
В таблице поля
K1 K2 K3 X1 X2 X3 X4
могут быть одинаковыми в этом случае требуется вывести
поле K1 K2 K3 X1 и просуммировать поле X2 и поле X3 должно быть взвешенным, т.е. X3 = X4/X2

Добавлено через 2 минуты
перегрузил Excel все работает
0
призрак
3263 / 891 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
10.02.2013, 22:47 6
Цитата Сообщение от shark555 Посмотреть сообщение
в этом случае требуется
ну переделайте по аналогии.
агрегатные функции в нужные места и список полей в предложении GROUP BY поменять соответственно
0
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 17
10.02.2013, 22:56  [ТС] 7
к сожалению немного не то получилось
лишние строки удалены COUNTERPARTY<>"NAT MINSK" AND INSTR_1<>"RUB"
а вот с остальным не получилось
есть строки 6,7,8,9 где поля
K1 K2 K3 X1 идентичны
0645 001 2
0645 001 2
0645 001 2
0645 001 2

в этом случае строка должна быть один раз напечатана, а поле X2 суммироваться, поле X3 = X4/X2 (так называемая средне взвешенная ставка поле X4 ранее определялся, как произведение X2 * ставку)
0
призрак
3263 / 891 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
10.02.2013, 23:05 8
Цитата Сообщение от shark555 Посмотреть сообщение
есть строки 6,7,8,9 где поля
K1 K2 K3 X1 идентичны
гм... это больше становится похоже на работу, а не на помочь/подсказать...
ладно.
давайте по порядку.
у приведенных вами строк другие поля различны.
напр., COUNTERPARTY, CPTY_TCID, INSTR_1.
да почти все.
а в результат они попадают.
что выводить тогда?

возможно, вам имеет смысл нарисовать вручную пример результата для исходных данных?
иначе мне, например, задача до сих пор непонятна.
впрочем, возможно, это именно мои тараканы.
1
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 17
10.02.2013, 23:32  [ТС] 9
Лист 1704 - первичный лист
Лист 1 промежуточный где видно какие столбцы анализируются и удаляются
Лист 2 результат
Вложения
Тип файла: xls 1704.xls (34.0 Кб, 32 просмотров)
0
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 17
10.02.2013, 23:33  [ТС] 10
"возможно, вам имеет смысл нарисовать вручную пример результата для исходных данных?
иначе мне, например, задача до сих пор непонятна.
впрочем, возможно, это именно мои тараканы. "
Очень разумно и большое спасибо
0
призрак
3263 / 891 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
10.02.2013, 23:51 11
меняется только строка запроса. проверяйте.
Visual Basic
1
2
3
    sSQL = "SELECT K1, K2, K3, X1, sum(X2), sum(X4)/sum(X2), sum(X4)" _
        & " FROM [1704$A:T] WHERE COUNTERPARTY<>""NAT MINSK"" AND INSTR_1<>""RUB""" _
        & " GROUP BY K1, K2, K3, X1"
остальное то же самое
1
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 17
11.02.2013, 01:31  [ТС] 12
если можно поясните что вот это
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Dim sSQL$
    Set rs = CreateObject("ADODB.Recordset")
    Set cn = CreateObject("ADODB.Connection")
    Select Case CLng(Split(Application.Version, ".")(0))
        Case Is < 12
            sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName _
              & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
        Case Is >= 12
            sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName _
            & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
    End Select ' thnx R Dmitry
0
призрак
3263 / 891 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
11.02.2013, 06:23 13
1) создание объектов Connection и Recordset биб-ки работы с БД.
2) формирование строки подключения к БД, в зависимости от версии вашего Excel
0
0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 1
21.12.2015, 13:28 14
Добрый день! Возникла похожая задача.
только в секции where указывается считаная дата код выглядит так:
Sub Netting()
Dim sCon$, rs As Object, cn As Object, w As Worksheet, d As String
d = Worksheets("Расчет").Range("B1").Value
Dim sSQL$
Set rs = CreateObject("ADODB.Recordset")
Set cn = CreateObject("ADODB.Connection")
Select Case CLng(Split(Application.Version, ".")(0))
Case Is < 12
sCon = "Provider=Microsoft.Jet.OLEDB.4.0ata Source=" & ThisWorkbook.FullName _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
Case Is >= 12
sCon = "Provider=Microsoft.ACE.OLEDB.12.0ata Source=" & ThisWorkbook.FullName _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
End Select ' thnx R Dmitry

sSQL = "SELECT Sum(Покупка), Sum(Продажа)" _
& " FROM [Данные$A:H]" _
& " WHERE Валюта_1=""USD"" AND Дата_валютирования=""" & d & """" _
& " GROUP BY Валюта_1, Дата_валютирования"
cn.Open sCon
Set rs = cn.Execute(sSQL)
Set w = ThisWorkbook.Worksheets.Add
w.[a2].CopyFromRecordset rs
End Sub

дата считывается корректно, строка sql выглядит так: "SELECT Sum(Покупка), Sum(Продажа) FROM [Данные$A:H] WHERE Валюта_1="USD" AND Дата_валютирования="24.03.2015" GROUP BY Валюта_1, Дата_валютирования"

но при выполнении кода выдается ошибка "Несоответствие типов данных в выражении условия отбора"

Не могу понять что чему не соответствует.
Вложения
Тип файла: rar Неттинг 2.rar (22.5 Кб, 14 просмотров)
0
15151 / 6424 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
21.12.2015, 13:52 15
b0s0ta, дату он не поймет в таком виде. Измените две строки
Visual Basic
1
2
3
4
5
6
    Dim sCon$, rs As Object, cn As Object, w As Worksheet, d ' As String
'...
    sSQL = "SELECT Sum(Покупка), Sum(Продажа)" _
        & " FROM [Данные$A:H]" _
        & " WHERE Валюта_1=""USD"" AND Дата_валютирования=" & Format(d, "\#yyyy\/mm\/dd\#") _
        & " GROUP BY Валюта_1, Дата_валютирования"
1
21.12.2015, 13:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2015, 13:52
Помогаю со студенческими работами здесь

Выполнение выборки ничего не выдаёт
результат ничего не выводит а в табло,на каждый элемнт выборки пишет - ошибка чтения значения,что...

Ошибка при выполнении выборки SELECT
$result = mysql_query(&quot;SELECT * FROM `пользователи` WHERE login=$newlog&quot;,$msconnect); $row =...

Что возвращает оператор выборки SELECT
Вот запрос: $result = mysql_query(&quot;SELECT name FROM data WHERE login='$login' AND...

Поиск значения на листе и выполнение действий
Здравствуйте. Дело с vba практически никогда не имел. Срочно нужно написать небольшой макрос. Я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru