[ОТВЕТИТЬ]
25.07.2012 02:08
tgm
 
Может из этого что-то подойдет:

и продолжение






25.07.2012 12:49
SLAVICK
 
Цитата:
tgm Может из этого что-то подойдет:

и продолжение






Спасибо - нашел :)
Может кому нужно будет:
Sub getdirfiles()
Dim d, pth, strs, Path
CurrentDb.Execute ("delete * from fromexcel") ' Если перед вставкой надо очистить таблицу
Path = "c:\temp\excel\"
pth = Path & "*.xls"
d = Dir(pth)
Do While d <> ""
strs = "Insert into fromexcel select * from " _
& "[Лист1$] IN '" & Path & d & "'[Excel 8.0;HDR=YES;IMEX=2]"
CurrentDb.Execute strs
d = Dir
Loop
End Sub
26.07.2012 11:32
SLAVICK
 
А может кто то подсказать, как заменить конкретное имя листа, на его порядковый номер в книге
Вот кусок кода
Do While d <> ""
strs = "Insert into fromexcel select * from " _
& "[Лист1$] IN '" & Path & d & "'[Excel 8.0;HDR=YES;IMEX=2]"
CurrentDb.Execute strs
d = Dir
Loop
листы в разных книгах имеют разные имена, но везде 1-й лист
пробовал Sheets(1) - не получается :(
26.07.2012 23:56
tgm
 
Добрый вечер SLAVICK, так как с Access особо не сталкивался, перенаправил Ваш вопрос на форум.
Ответ здесь:
27.07.2012 13:13
SLAVICK
 
Спасибо. :D
Вот готовое и доработанное решение 8-) :
Sub getdirfiles()
Dim d, pth, strs, Path ' Имя таблицы должно быть 2012 и ее (уже созданная)структура должна соответствовать файлам
CurrentDb.Execute ("delete * from 2012 ") ' Если перед вставкой надо очистить таблицу "2012"
Path = "c:\Documents and Settings\user\Рабочий стол\2012\" ' Папка где находятся файлы
pth = Path & "*.xls*" ' Все расширения файлов ...
d = Dir(pth)
Do While d <> "" ' "[A1:m1048576] as Z" Диапазон на первом листе если нужно название листа - тогда "[??????$]"
strs = "Insert into 2012 select * from " _
& "[A1:m1048576] as Z IN '" & Path & d & "'[Excel 8.0;HDR=YES;IMEX=2]"
CurrentDb.Execute strs
d = Dir
Loop
End Sub
01.08.2012 21:27
Aleksandr H.
 
Есть таблица которая состоит с 3 столбцов: номер, индекс, отклонение. Как выбрать для каждого номера индекс, отклонение по котором, наибольшее (неважно в + или -)? (см. файл)
Мои мысли:
1) в новом столбце вычисляем модуль отклонения
2) делаем сводную таблицу для номеров (удаляем дублирующиеся номера, сводим до единичного номера - кто как зовет)
3) с помощью формул массива ищем максимальное с п.1 для каждой строки с п.2 (почему-то в приложенном файле у меня эта формула не сработала, хотя на другом файле все работало )
4) вот здесь запинка, как узнать номер строки в которой встречаются записи с п.3
Вложения
Тип файла: xlsx MaksOdchyl2.xlsx (12.7 Кб, 115 просмотров)
02.08.2012 00:46
sf13
 
[attachment=0:pfn9ipzz]MaksOdchyl2_m.xlsx[/attachment:pfn9ipzz]
Вложения
Тип файла: xlsx MaksOdchyl2_m.xlsx (14.4 Кб, 106 просмотров)
02.08.2012 07:31
Aleksandr H.
 
Вариант с ВПР и сортировкой отклонения рассматривался, но был отклонен в виду своей "простоты" 8-)
02.08.2012 13:11
sf13
 
Цитата:
Aleksandr H. Вариант с ВПР и сортировкой отклонения рассматривался, но был отклонен в виду своей "простоты" 8-)
Так бы и сказали: "ВПР не предлагать"
Ну ладно, пусть будет сводная таблица ...
Вложения
Тип файла: xlsx MaksOdchyl2_m2.xlsx (19.1 Кб, 95 просмотров)
02.08.2012 17:52
SLAVICK
 
Цитата:
Aleksandr H. Вариант с ВПР и сортировкой отклонения рассматривался, но был отклонен в виду своей "простоты" 8-)
можно просто с формулой массива и фильтром :D
Вложения
Тип файла: xlsx MaksOdchyl2.xlsx (13.7 Кб, 106 просмотров)
02.08.2012 18:11
SLAVICK
 
Цитата:
SLAVICK
Цитата:
Aleksandr H. Вариант с ВПР и сортировкой отклонения рассматривался, но был отклонен в виду своей "простоты" 8-)
можно просто с формулой массива и фильтром :D
Забыл сказать - после введения формулы - желательно одновременно нажать CTRL + SHIFT + ENTER ;)
И ABS - в моей формуле можно не писать - получится так =МАКС(ЕСЛИ($A$2:$A$8=A2;$D$2:$D$8))-D2
02.08.2012 18:26
SLAVICK
 
Можно и одним столбцом без модуля 8-)
Ставим фильтр на 0 и будет нам счастье :D
Вложения
Тип файла: xlsx MaksOdchyl2.xlsx (13.5 Кб, 107 просмотров)
03.08.2012 17:42
Закупщик56541
 
Добрый день!
Подскажите, пож-та, в чем может быть причина НЕнахождения позиций через функцию ВПР? И как быть, если такое происходит? Глазами вижу, что есть строки с абсолютно одинаковым текстом, но не поиск не работает.
Если это имеет значение, у меня 2 файла - выгрузка из 1С и таблица в Excel.

Спасибо заранее за ответ.
06.08.2012 01:42
andrey_f
 
Цитата:
Нейжмакова Анастасия в чем может быть причина НЕнахождения позиций через функцию ВПР? И как быть, если такое происходит? Глазами вижу, что есть строки с абсолютно одинаковым текстом, но не поиск не работает.
Если это имеет значение, у меня 2 файла - выгрузка из 1С и таблица в Excel.
Добрый день.
Скорее всего, в выгрузке из 1С присутствуют дополнительные непечатаемые символы. Проверьте вручную, например, это может быть пробел в конце строки или что-то подобное. В данном случае можно воспользоваться данной обработкой.
06.08.2012 14:28
RazVal
 
Цитата:
administrator
Цитата:
Нейжмакова Анастасия в чем может быть причина НЕнахождения позиций через функцию ВПР? И как быть, если такое происходит? Глазами вижу, что есть строки с абсолютно одинаковым текстом, но не поиск не работает.
Если это имеет значение, у меня 2 файла - выгрузка из 1С и таблица в Excel.
дополнительные непечатаемые символы. Проверьте вручную, например, это может быть пробел в конце строки или что-то подобное.
Кроме этого, функция ВПР в Excel чувствительна к типу значения в ячейке. То есть число 102 не соответствует текстовой строчке "102", которая внешне будет выглядеть точно также, и даже лишних символов иметь не будет. Проще всего преобразовать столбец с числовыми кодами в текстовом формате прибавив к ним ноль в соседней ячейке и продлить формулу вниз.
Если же речь о двух текстовых ячейках, то бывают ещё несоответствия кодировки. Например Русская буква "С" (эс) и английская "С" (си) - ничем внешне не отличаются, но для функции ВПР - являются разными символами. В таком случае надо производить массовую замену всех таких букв: А, В, С, Е, Н, К, М, О, Р, Т, Х - на аналогичные Русские, если будете делать это часто, то советую записать простенький макрос.
Возможно, есть и другие ситуации - проще было бы помочь, если бы ты смогла выложить сюда файл с двумя ячейками, по которым должна срабатывать функция ВПР, а она не срабатывает. ;)
06.08.2012 18:15
Закупщик56541
 
Ребята, спасибо большое за ответ!

Действительно мешали пробелы. Вы мне просто спасли жизнь!!!!! Думала с ума сойду, если мне придется 10 тыс. строк просматривать глазами)
10.08.2012 11:35
SLAVICK
 
Здравствуйте, есть такая надстройка - "myaddin", так вот - там есть макрос, который меняет функции полей сводных таблиц (можно только выбранных, можно всех сразу) - на сумму, количество ....
проблема в том, что когда работаешь не на своем компе - приходится это все менять ручками, перебирая каждое поле :(
Может кто то знает где взять макрос, который бы так менял выбранные поля, можно без графической оболочки, и только на сумму. - искал - не нашел :?: :o
10.08.2012 13:12
SLAVICK
 
Нашел на планете эксель - такой код
Sub rmk()
Dim ptTable As PivotTable, pvtField As PivotField, cl As Long, rw As Long, i As Long
Application.ScreenUpdating = 0
For Each ptTable In ActiveSheet.PivotTables
With ptTable
If Not (Intersect(.TableRange1, Selection) Is Nothing) Then
For Each pvtField In .DataFields
On Error Resume Next
pvtField.Caption = Split(pvtField.Name, "полю")(1)
pvtField.Function = xlSum
pvtField.NumberFormat = "0"
Next
Exit Sub
End If
End With
Next
Application.ScreenUpdating = 1
End Sub
А как его переделать, чтоб менялись не все поля, а только выделенные?
13.08.2012 10:04
andrey_f
 
Я не пробовал на данных, но навскидку если, то:

Код:
Sub rmk()
 Dim ptTable As PivotTable, pvtField As PivotField, cl As Long, rw As Long, i As Long
 Application.ScreenUpdating = 0
    For Each ptTable In ActiveSheet.PivotTables
        With ptTable
        If Not (Intersect(.TableRange1, Selection) Is Nothing) Then
            For Each pvtField In .DataFields
                If Not (Intersect(.DataRange, Selection) Is Nothing) Then
                    On Error Resume Next
                    pvtField.Caption = Split(pvtField.Name, "полю")(1)
                    pvtField.Function = xlSum
                    pvtField.NumberFormat = "0"
                End If
            Next
            Exit Sub
        End If
    End With
 Next
 Application.ScreenUpdating = 1
 End Sub
13.08.2012 10:38
SLAVICK
 
Выдает ошибку :(
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок1.jpg
Просмотров: 189
Размер:	17.4 Кб
ID:	6263   Нажмите на изображение для увеличения
Название: Снимок2.jpg
Просмотров: 185
Размер:	71.9 Кб
ID:	6264  
13.08.2012 11:08
andrey_f
 
а так?

Код:
Sub rmk()
 Dim ptTable As PivotTable, pvtField As PivotField, cl As Long, rw As Long, i As Long
 Application.ScreenUpdating = 0
    For Each ptTable In ActiveSheet.PivotTables
        With ptTable
        If Not (Intersect(.TableRange1, Selection) Is Nothing) Then
            For Each pvtField In .DataFields
                If Not (Intersect(.pvtField.DataRange, Selection) Is Nothing) Then
                    On Error Resume Next
                    pvtField.Caption = Split(pvtField.Name, "полю")(1)
                    pvtField.Function = xlSum
                    pvtField.NumberFormat = "0"
                End If
            Next
            Exit Sub
        End If
    End With
 Next
 Application.ScreenUpdating = 1
 End Sub
13.08.2012 12:23
SLAVICK
 
Опять - ошибка - там же. :?
Миниатюры
Нажмите на изображение для увеличения
Название: 2012-08-13_112017.jpg
Просмотров: 398
Размер:	68.2 Кб
ID:	6265   Нажмите на изображение для увеличения
Название: 2012-08-13_112053.jpg
Просмотров: 388
Размер:	67.8 Кб
ID:	6266  
14.08.2012 01:25
andrey_f
 
Ну и последний вариант ) Уже попробовал на данных самостоятельно - работает.
Вообще, вслепую без данных код писать крайне сложно, вот и ошибки получаются.
Когда каждый день этим занимаешься - это одно (раньше у меня это получалось), а я в последнее время редко программирую,вот и получаются мелкие баги.

Код:
Sub rmk()
 Dim ptTable As PivotTable, pvtField As PivotField, cl As Long, rw As Long, i As Long
 Application.ScreenUpdating = 0
    For Each ptTable In ActiveSheet.PivotTables
        With ptTable
            If Not (Intersect(.TableRange1, Selection) Is Nothing) Then
                For Each pvtField In .DataFields
                    If Not (Intersect(pvtField.DataRange, Selection) Is Nothing) Then
                        On Error Resume Next
                        pvtField.Caption = Split(pvtField.Name, "полю")(1)
                        pvtField.Function = xlSum
                        pvtField.NumberFormat = "0"
                    End If
                Next
                Exit Sub
            End If
        End With
    Next
 Application.ScreenUpdating = 1
 End Sub
Кстати, если удалить строку "Exit Sub", то можно будет обрабатывать за один раз сразу несколько таблиц, если в них одновременно выделить нужные поля. А при текущем раскладе будет обработана лишь первая попавшаяся сводная таблица, которая имеет хотя бы одно выделенное поле.
14.08.2012 10:20
SLAVICK
 
Теперь одним нужным макросом стало больше :D , конечно надстройкой пользоваться удобнее, но ее не возьмешь с собой везде. И не бросишь в нужную книгу. Спасибо :D

А баг действительно очень мелкий - лишняя точка - я еле нашел отличие :)
19.09.2012 14:46
viitalii
 
Буду признателен, если кто подскажет такой момент.

У меня Excel 2007, хочу на курсы сходить, но ближайшие толоквые в моих краях Excel 2010.
Стоит ли идти? Не запутаюсь ли?

Спасибо
20.09.2012 02:22
RazVal
 
Цитата:
viitalii У меня Excel 2007, хочу на курсы сходить, но ближайшие толоквые в моих краях Excel 2010.
Стоит ли идти? Не запутаюсь ли?
Запутаться - нет, а вот стоит ли ходить - не однозначно.
Лучше взять самоучитель и начать решать реальные нужные задачи - над первой промучаться три дня, вторую решить за день, третью - за час. А дальше - просто обрастать инструментами. Вот потом уже можно и поузнавать, вообще, разные возможности Excel, но уже не базовые: открыть файл, создать новый лист, прибавить 1 к 1, сохранить файл, закрыть файл, - а продвинутые. И советую просить провести удалённое занятие sf13. :)
27.09.2012 12:45
SLAVICK
 
Здравствуйте.
Очередная головоломка :)
Есть два списка - во второй по коду нужно подтянуть значение и формат с первого списка. Впр - подтягивает только значения.
Мои мысли(точнее пути решения):
1.В надстройке Plex - есть функции "Cellcolor" и "cellfontcolor" - они определяют цвет заливки ячейки и шрифта, функция ЯЧЕЙКА("формат";B2) - формат ячейки - а вот как применить к нужной ячейке эти данные?
2. Условное форматирование - можно прописать формулу (на совпадение) - а вот как задать нужный формат?
:?: :?
Вложения
Тип файла: xlsx вопрос.xlsx (15.1 Кб, 128 просмотров)
02.10.2012 11:19
Закупщик56160
 
Добрый день, коллеги, у меня проблема с формулой Если, нужно её немного переделать, во вложении пример, на 18 воротах действующий шаблон для записи поставщиков на приёмку где формулы в столбце R рассчитывают время приёмки опирать на 3 условия:

Если в V 8 (столб ТИП) стоит «т» то количество артикулов умножается на 2:30 ($R$5)
Если в V 8 (столб ТИП) стоит «c» то количество паллет умножается на 4:00 ($R$6)
Если в V 8 (столб ТИП) не стоит ничего, то время приёмки следующего поставщика не присваивается.

В итоге формула времени имеет следующий вид:
=ЕСЛИ(V8="т";ОКРУГЛВВЕРХ((AA8*$R$5+R8)/0,00347222222222222;0)*0,00347222222222222;ЕСЛИ(V8="с";ОКРУГЛВВЕРХ((AA8*$R$6+R8)/0,00347222222222222;0)*0,00347222222222222; ЕСЛИ(V8=" ";"0";ЕСЛИ(V8=" ";"0";" "))))
(форм 1)

Теперь мне в неё нужно вставить ещё одно условие:
Если в столбце S появляется поставщик с определённым номером (перечень на листе 5), время будет считать по формуле: ОКРУГЛВВЕРХ((P8*$G$1+G8)/0,00347222222222222;0)*0,00347222222222222, т. е. количество должно умножаться на 2:00 мин.
(форм 2)

На 17 воротах я всё это уже реализовал, получилась следующая формула
=ЕСЛИ(Q8=1;ОКРУГЛВВЕРХ((P8*$G$1+G8)/0,00347222222222222;0)*0,00347222222222222;ЕСЛИ(K8="т";ОКРУГЛВВЕРХ((P8*$G$5+G8)/0,00347222222222222;0)*0,00347222222222222;ЕСЛИ(K8="с";ОКРУГЛВВЕРХ((P8*$G$6+G8)/0,00347222222222222;0)*0,00347222222222222; ЕСЛИ(K8=" ";"0";ЕСЛИ(K8=" ";"0";" ")))))
(форм 3)

,но она опирается на вспомогательную формулу в ячейке Q8 - = ЕСЛИОШИБКА(ВПР(H8;Лист5!$A:$B;2;1);" ")

А у меня существует острая необходимость обойтись только одной формулой.
Можно к формуле 1 как-нибудь сразу добавить условия вычисления времени (2:00 на артикул) на приёмку определённых поставщиков, номера которых находятся на листе 5.

Спасибо.
Вложения
Тип файла: zip ШАБЛОН АВИЗАЦИИ + СКЛАД С (ST).zip (75.3 Кб, 41 просмотров)
02.10.2012 12:15
SLAVICK
 
Так ? :)
Вложения
Тип файла: zip ШАБЛОН АВИЗАЦИИ + СКЛАД С (ST).zip (77.9 Кб, 61 просмотров)
02.10.2012 14:20
Закупщик56160
 
Да, спасибо, как раз то, что надо :)


Опции темы


Часовой пояс GMT +3, время: 22:05.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.