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

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

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

Студворк — интернет-сервис помощи студентам
Очень нужна помощь
есть таблица на фиксированном листе 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.02.2013, 20:32
Ответы с готовыми решениями:

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

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

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

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

Добавлено через 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  [ТС]
Выдается сообщение
Compile Error Syntax Eror
0
 Аватар для Watcher_1
357 / 163 / 27
Регистрация: 21.06.2011
Сообщений: 350
10.02.2013, 22:39
У меня все отлично отработало...
0
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 17
10.02.2013, 22:42  [ТС]
В таблице поля
K1 K2 K3 X1 X2 X3 X4
могут быть одинаковыми в этом случае требуется вывести
поле K1 K2 K3 X1 и просуммировать поле X2 и поле X3 должно быть взвешенным, т.е. X3 = X4/X2

Добавлено через 2 минуты
перегрузил Excel все работает
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
10.02.2013, 22:47
Цитата Сообщение от shark555 Посмотреть сообщение
в этом случае требуется
ну переделайте по аналогии.
агрегатные функции в нужные места и список полей в предложении GROUP BY поменять соответственно
0
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 17
10.02.2013, 22:56  [ТС]
к сожалению немного не то получилось
лишние строки удалены 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
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
10.02.2013, 23:05
Цитата Сообщение от 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  [ТС]
Лист 1704 - первичный лист
Лист 1 промежуточный где видно какие столбцы анализируются и удаляются
Лист 2 результат
Вложения
Тип файла: xls 1704.xls (34.0 Кб, 32 просмотров)
0
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 17
10.02.2013, 23:33  [ТС]
"возможно, вам имеет смысл нарисовать вручную пример результата для исходных данных?
иначе мне, например, задача до сих пор непонятна.
впрочем, возможно, это именно мои тараканы. "
Очень разумно и большое спасибо
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
10.02.2013, 23:51
меняется только строка запроса. проверяйте.
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  [ТС]
если можно поясните что вот это
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
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
11.02.2013, 06:23
1) создание объектов Connection и Recordset биб-ки работы с БД.
2) формирование строки подключения к БД, в зависимости от версии вашего Excel
0
0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 1
21.12.2015, 13:28
Добрый день! Возникла похожая задача.
только в секции 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.0a ta Source=" & ThisWorkbook.FullName _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
Case Is >= 12
sCon = "Provider=Microsoft.ACE.OLEDB.12.0 ata 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
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
21.12.2015, 13:52
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2015, 13:52
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru