Как в ListObjects подключить событие SelectionChange? Цель: отобразить в ячейке выбранный текст в ListObjects.
Код
Private Sub Worksheet_Activate()
Dim ws As Worksheet
Set ws = ActiveSheet
Set lo = ws.ListObjects("Table4") '
' AddHandler lo, "SelectionChange", AddressOf Table4_SelectionChange
End Sub
Sub Table4_SelectionChange(ByVal Target As Range)
MsgBox "The selection in the list object has changed."
End Sub
Цель: подключить CSV файл к Excel и проанализировать его.
Пример анализа DateTime: 1. Группировки; 2. Сортировки; 3. Фильтры; 4. Построение графиков; 5. Вычисления DateTime. (предположително)
1.ДатаВремя хранить
- Вар-1. в одном поле: DateTime или - Вар-2. в разных полях: Date, Time, Миллисекунды, часовой пояс?
Или применять Вар-1 и Вар-2 в зависимости от обстоятельств и допускается оба варианта? Чтобы можно было подключить CSV в Excel без дополнительных настроек? Или с минимальными настройками: например изменить в Excel формат поля таблицы. Ну или в PowerQuery что-нибудь "подкрутить" по мелочи.
Т.е. чтобы данные прошли путь CSV -> PowerQuery -> Excel.
Под максимальный DateTime я понимаю :yyyy-MM-dd HH:mm:ss.MS +zone Пример: 2024-03-19 13:18:31.395 +03:00.
2. Для примера я сделал несколько столбцов с различными вариантами представления DateTime.
3. Мои опасения. 3.1 Если использовать Column1(или Column2). PowerQuery распознал тип поля как Текст.
Я боюсь, что если буду строить сводную таблицу или использовать таблицу полученную из запроса в других таблицах, то данные не будут распознаны как ДатаВремя. 3.2 Если использовать Column3. В Column3 не отображаются милисекунды и часовй пояс.
Тогда Column3 нужно использовать вместе с полями Column7(миллисекунды), Column8(часовой пояс).
PowerQuery В редакторе изображение нормально отображается. При просмотре плохо. Поэтому прилагаю ссылку на и изображение. ссылка на изображение https://i.ibb.co/zxTKwQr/118332915257742.png
Excel В редакторе изображение нормально отображается. При просмотре плохо. Поэтому прилагаю ссылку на и изображение. Ссылка на изображение https://i.ibb.co/V3CHQvC/552662915259037.png
Код
let
Источник = Csv.Document(File.Contents("E:\Projects\39\01_pr\01\2024-03-21_15-24-36.csv"),
[Delimiter="|",
Columns=10,
Encoding=1251]),
#"Измененный тип" = Table.TransformColumnTypes(Источник,
{
{"Column1", type text},
{"Column2", type text},
{"Column3", type datetime},
{"Column4", type datetime},
{"Column5", type date},
{"Column6", type time},
{"Column7", Int64.Type},
{"Column8", type text},
{"Column9", type text},
{"Column10", type text}
}
)
in
#"Измененный тип"
Как сделать чтобы формат датаВремя в запросе соответствовал подключённому csv файлу?, Как сделать чтобы формат датаВремя в запросе соответствовал подключённому csv файлу?
Как седлать SQL запрос из двух таблиц? Т.е. у меня есть SQL запрос. Я хочу его проверить. Просто вставить и чтоб он отработал. Exel переключает в PQ. А где он там вставляется не понятно...
На шаге, цитата: "на вкладке Данные или на вкладке Power Query находим команду Получить данные - Объединить запросы - Объединить (Get Data - Merge Queries - Merge):" и далее по тексту.... У меня не активна кнопка "ок"
Вопросы. 1. как совместить дни(часы, минуты) когда фотоловушка срабатывает с днями(часы, минуты) когда ловушка не работает? Т.е. я получаю данные года ловушка срабатывает. Для полного анализа срабатывания нужны дни когда фотоловушка не срабатывает. Т.е. в резуkьтате должна получить таблица в которой будут данные: срабатывания + несрабатывания. 2. Может есть в общем готовые решения для таких задач?
Описание. Получаю данные по срабатыванию фотоловушки в формате: - Имя; - Размер; - ДатаВремя_создания. Данные будут поступать периодически не предсказуемо: раз в неделю, раз в месяц, раз в квартал.
Минимальные ожидания. Логика: - в файле "ФотоЛовушкаГлав.xlsx" вставил на лист данные `Имя`, `Размер`, `ДатаВремя_создания`(Или экспортировать); - в файле "ФотоЛовушкаГлав.xlsx" нажал кнопку Excel: данные перенеслись на лист с полным календарём; - автоматически построились графики;
Главная цель получить полный календарь за год (или за меньшие периоды). Где будут содержаться данные с днями когда ловушка срабатывает и когда ловушка не срабатывает. Каждый день должен детализирован до минуты. По возможности, чтобы можно было проанализировать сразу несколько дней.
Максимальные ожидания. Ожидаемая логика: - Открыл файл ФотоЛовушкаГлав.xlsx; - В файле ФотоЛовушкаГлав.xlsx прописал путь к папке с файлами; - в файле "ФотоЛовушкаГлав.xlsx" нажал кнопку Excel: данные перенеслись на лист с полным календарём; - автоматически построился график;
Примечание. Признаюсь сразу: не знаю, что хочу.... Хочу хоть как-то проанализировать принцип срабатывания фотоловушки... Навксидку, наверное, было бы неплохо построить график: - количество срабатываний: - в месяц; - в день; - в час; - в минуту;
- размер файлов генерируемых фотоловушкой: - в месяц; - в день; - в час; - в минуту;
Буду признателен за любый полные или частичные решения, предложения, рекомендации...
На вскидку я так понимаю, что нужно выполнить следующую логику: 1. Получить текст ячейки; 2. Результат: ЧУП «Мобильный город» Вороново, ул. Литовчика, 43
Пн: выходной Вт - Пт: 9:30 - 16:30 Сб: 9:30 - 13:30 Вс: выходной 375296435132 3. Логика распределения строк текста: п.1 Первую строку перенести в поле "Организация"; п.2 Вторую строку разделить по первой запятой ","; п.3 Вторую строку первое слово перенести в поле "Город"; п.4 Вторую строку остальную часть перенести в поле "Адрес"; п.5 Последню строку перенести в поле "Телефон"; п.6 Оставшийся текст перенести в поле "График";
Вопрос. Правильно ли я понимаю логику ? Буду признателен если кто подскажет фрагменты кода по каждому(или по отдельным) пункту или всё решение...
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:I5")) Is Nothing Then
On Error Resume Next
ActiveSheet.ShowAllData
Range("A7").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A1").CurrentRegion
End If
End Sub
Мне необходимо получить выборку из таблицы для конкретного менеджера между датами 1/05/2013 и 1/11/2013. Т.е. - поле: Дата; условие: >=1/05/2013 и <=1/11/2013; - поле: Менеджер; условие: любой менеджер;
Т.е. я предполагаю вводить в критерии (жёлтая область) диапазон дат >=1/05/2013 и <=1/11/2013 + имя менеджера. Или в данном случае это так не делается?
Вопрос. Как фильтровать по интервалу дат? Возможно ли это сделать с AdvancedFilter или нужно использовать другие инструменты?
Первоначально код возвращал диапазон с именами колонок. Потом перестал… Я вроде ничего не менял…
Код
' --- Data_ListObject ---
Public Sub SelectSqlQuery()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim objList As ListObject
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim s As String
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
Set objList = Sheets("Data_ListObject").ListObjects("TestSQL_tbl")
s = objList.Range.Address(0, 0)
strSQL = "SELECT * FROM [Data_ListObject$" & s & "]" ' ++
rs.Open strSQL, cn
Sheets("Result_Range").Range("B3").CopyFromRecordset rs
End Sub
Код
' --- Data_Range ---
Public Sub SelectSqlQuery2()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim objList As ListObject
Dim strFile As String
Dim strCon As String
Dim strSQL As String
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
strSQL = "SELECT * From [Data_Range$]"
rs.Open strSQL, cn
Sheets("Result_Range").Range("B3").CopyFromRecordset rs
End Sub
Имеетcя папка в которую сбрасываются отчёты. Отчёты имеют - постоянный состав столбцов: код, имя, описание. - переменный состав столбцов: характеристика_1, характеристика_2, характеристика_3, ... Т.е. в одном файле n_Отчёт.xlsx поля код, имя, описание будут точно, а поля характеристика_1, характеристика_2, характеристика_3 могут быть в полном составе или частичном. Наименование поля "характеристика_n" принято условно, т.е. имя может быть произвольным.
Структура папок: ..\Folder\Главный.xlsx ..\Folder\Data\01_Отчёт.xlsx ..\Folder\Data\02_Отчёт.xlsx ..\Folder\Data\03_Отчёт.xlsx
Вопрос. Как собрать из файлов n_Отчёт.xlsx диапазоны в одну таблицу(диапазон) в файле Главный.xlsx?
Если я правильно понял Target - это отсюда Private Sub Worksheet_Change(ByVal Target As Range). Parent - это Worksheet, которому принадлежит Target. AutoFilter - это автофильтр родительского Worksheet для диапазона Target
Вопрос. Что такое AutoFilter? Что делает AutoFilter?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim FilterCol As Integer
Dim FilterRange As Range
Dim CondtitionString As Variant
Dim Condition1 As String, Condition2 As String
If Intersect(Target, Range("Условия")) Is Nothing Then Exit Sub
On Error Resume Next
Application.ScreenUpdating = False
'определяем диапазон данных списка
Set FilterRange = Target.Parent.AutoFilter.Range
'считываем условия из всех измененных ячеек диапазона условий
For Each cell In Target.Cells
FilterCol = cell.Column - FilterRange.Columns(1).Column + 1
If IsEmpty(cell) Then
Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol
Else
If InStr(1, UCase(cell.Value), " ИЛИ ") > 0 Then
LogicOperator = xlOr
ConditionArray = Split(UCase(cell.Value), " ИЛИ ")
Else
If InStr(1, UCase(cell.Value), " И ") > 0 Then
LogicOperator = xlAnd
ConditionArray = Split(UCase(cell.Value), " И ")
Else
ConditionArray = Array(cell.Text)
End If
End If
'формируем первое условие
If Left(ConditionArray(0), 1) = "<" Or Left(ConditionArray(0), 1) = ">" Then
Condition1 = ConditionArray(0)
Else
Condition1 = "=" & ConditionArray(0)
End If
'формируем второе условие - если оно есть
If UBound(ConditionArray) = 1 Then
If Left(ConditionArray(1), 1) = "<" Or Left(ConditionArray(1), 1) = ">" Then
Condition2 = ConditionArray(1)
Else
Condition2 = "=" & ConditionArray(1)
End If
End If
'включаем фильтрацию
If UBound(ConditionArray) = 0 Then
Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol, Criteria1:=Condition1
Else
Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol, Criteria1:=Condition1, _
Operator:=LogicOperator, Criteria2:=Condition2
End If
End If
Next cell
Set FilterRange = Nothing
Application.ScreenUpdating = True
End Sub
Как получить список строк(записей) таблицы по критерию используя VBA? Мне необходимо: п.1. получить все строки у которых поле "Выбор" = "Да"; п.2. выполнить "For Each ... Next …" для всех выбранных записей(строк) в п.1 с получением данных из всех столбцов.
Описание: На SQL Server имеется база данных в следующем составе: - количество таблиц: 3-5 шт. таблиц; - количество полей в каждой таблице: - 20-50 шт. полей; - количество записей в каждой таблице: 10 000 - 50 000 шт. записей. Данные в таблицах SQL Server постоянно обновляются.
Цель: Подключить Excel к SQL Server. Подключённые таблицы отобразить в таблицах или сводных таблицах. Построить несколько диаграмм на основании подключённых таблиц или сводных таблиц. Нажав кнопку "Обновить" постоянно получать актуальные данные.
Предварительное решение: Для подключения предполагается использовать Данные -> Получить данные -> Из бы данных SQL Server.
Вопрос Будет ли достаточным использовать для таких целей способ подключения Данные -> Получить данные -> Из бы данных SQL Server или нужно дополнительно использовать Power Query / Pivot?
Описание: В SQL Server имеется таблица: - Table: Assignment. Данные в таблице SQL Server постоянно обновляются.
Цель: Подключить Excel к SQL Server. Нажав кнопку "Обновить" постоянно получать актуальные данные. На основании данных построить диаграмму, которая будет отображать поступление, расход, остаток по каждой дате.
Предварительное решение: Я подключил Excel к SQL Server. Я получаю таблицу Assignment в Excel.
Вопрос. 1. Как сделать чтобы к таблице Assignment добавилось поле "Остаток" и это поле рассчитывало остаток денежных средств на период? Буду благодарен, если кто-нибудь поможет реализовать решение полностью или хотябы предоставит описание как это сделать.
Имеется три таблицы. Я объединяю таблицы в одну таблицу. Как перечислить через запятую, в каких списках имеется текущая запись? Т.е. как сделать чтобы столбец "Использование"(Таблица3) (см. Рисунок 2) заполнился как показано на рисунке?
Имеется файл "Куб.cub" Я хочу построить на основании этого файла диаграмму. Нажимаю на диаграмму.
И чё ? Где-то должна быть кнопка "Подключить источник данных" ("Выбрать подключение"). Но я её не нахожу. Если вставляю сводную таблицу, то кнопка есть "Выбрать подключение" имеется и с этим проблем нет.
Или куб можно подключить только к "сводной таблице", а диаграмму строить только на основании "сводной таблицы"?
Имеется таблица. Данные в таблицы вводит пользователь. На основании таблицы строится сводная таблица.
Вопрос. Как сделать чтобы в данной таблице учитывался "остаток" за день? Или чтобы "остаток" как-то рассчитывался в Сводной таблице? Или нужно всё таки делать отдельные поля для "Приход", "Расход", "Остаток"?
Основная суть: имеется таблица в которой Приход, Расход находятся в одном поле. Как имея такую таблицу построить учёт финансов с учётом остатка за день?
Как сделать чтобы я нажал на кнопку и таблица фильтровалась согласно SQL запроса? Или формировалась таблица(диапазон) согласно SQL запроса на другом листе (или на этом же).
Запрос типа следующего:
Код
SELECT *
FROM ИнвентарнаяВедомость
WHERE Описание = 'Описание 1'