PDA

Показать полную графическую версию : [архив] Microsoft Excel


Страниц : 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Guest
05-03-2004, 13:50
:(  это уже сделал..... не помогло :-(

да еще забыл сказать, WinXP установлен на разделе NTFS

llgg
09-03-2004, 18:14
bd proffy
Можно написать примерно след. код в редакторе VBA (вызывается по Alt+F11) для нужного листа:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("A1") Then
   Range("A1").Copy
   ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("C1")
End If
End Sub

Вместо A1, C1, Sheet2 нужно поставить свои значения.

llgg
10-03-2004, 11:57
Лучше использовать следующий код:

Dim Check1

Private Sub Worksheet_Activate()
Check1 = 0
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
   Range("A1").Copy
   ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range("C1")
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Set myRange = Intersect(Range("A1:A1"), Target)
If Not myRange Is Nothing Then
   Check1 = 1
Else
   If Check1 = 1 Then
      Range("A1").Copy
      ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range("C1")
      Check1 = 0
   End If
End If
End Sub

DSK
13-03-2004, 14:09
Подскажите пожалуйста каким образом в документе Exel можно вывести суммы значений ячеек столбца по каждой странице в "подвале" каждой страницы ?
Пример:
есть данные:
Страница 1
колонка 1
1
2
3
4
5
Страница 2
колонка 1
6
7
8
9
10
Хочется получить:
Страница 1
колонка 1
1
2
3
4
5
всего по странице1 колонка1 15
Страница 2
колонка 1
6
7
8
9
10
всего по странице2 колонка1 40
и т.д.

Greyman
15-03-2004, 11:17
DSK
Подскажите пожалуйста каким образом в документе Exel можно вывести суммы значений ячеек столбца по каждой странице в "подвале" каждой страницы ?
А под "подвалом " что имеется в виду, нижний колонтитул что-ли? Тебе итоговые суммы именно с таким текстом нужны или достаточно просто итоговое число? Не знаю, можно ли сделать автоматом, но можно попробовать макрос, вставляющий дополнительные строчки с разрывами страницы прямо в рабочий лист (соответственно применять его нужно будет только один раз, иначе надо либо предварительно удалять вставленные постраничные итоги, либо услажнять сам макрос, перекладывая на него эту работу).

DSK
15-03-2004, 13:08
Greyman, спасибо за ответ !

А под "подвалом " что имеется в виду, нижний колонтитул что-ли?
Да.

Тебе итоговые суммы именно с таким текстом нужны или достаточно просто итоговое число?
Достаточно просто итоговое число.


Не знаю, можно ли сделать автоматом, но можно попробовать макрос ...
Получилось сделать процедуру на Visual Basic, которая вставляет итоги на каждой странице, провозился целый день
:( *
Мне кажется что должно быть какое-то более простое решение ... Типа в колонтитул вставить какую-нибудь формулу ... Пробовал сделать так, но не получилось :(
Хочется всё-таки узнать: можно ли выводить итоги на каждой странице по колонкам стандартными (имеется ввиду без применения VB) средствами Exel? И если можно, то как ?

Greyman
15-03-2004, 18:16
DSK
Непосредственно в колонтитулы нельзя вставлять ни формулы, ни ссылки на ячейки или рисунки (если тока в 2003-ем че появилось - не в курсе). Максимально близкое к этому - раздел "Итоги" в меню "Данные". Там можно включить промежуточные итоги по группам со вставкой разрывов страниц. Однако промежуточные итогоги там вставляются при изменении в одном из столбцов, соответственно все равно придется вводить дополнительный скрытый столбец, в который например макросом записывать в ячейках текущий номер страницы.
* *А если те нужны стандартные средства, то я бы посоветовал посмотреть в сторону баз данных с их настраиваемыми отчетами, а ексел они все элементарно импортируют. Единственное, Аксесс например вроде группировку по страницам не делает (у меня не получилось), но думаю что кто-то это должен делать...

DSK
15-03-2004, 19:13
Greyman, спасибо !

Greyman
15-03-2004, 21:28
DSK
Дык скожи хоть, за что спасибо. На каком варианте в итоге остановился? Если на промежуточных итогах, то доп-столбец можно даже без макросов формировать, просто можно копировать формулу, которая меняет свое значение, например каждые 60 строк, соответствено в итоге на странице у тебя будет 60 строк с их строничными итогами...

Исправлено: Greyman, 21:29 15-03-2004

DSK
16-03-2004, 12:33
Дык скожи хоть, за что спасибо. На каком варианте в итоге остановился?

Спасибо за обсуждение !
как в итоге сделал - писал ... :)

Получилось сделать процедуру на Visual Basic, которая вставляет итоги на каждой странице, провозился целый день ...

Хотелось бы найти более рациональный вариант ...

Если на промежуточных итогах, то доп-столбец можно даже без макросов формировать, просто можно копировать формулу, которая меняет свое значение, например каждые 60 строк

Как копировать формулу ? Руками ?
Это можно делать когда строк не много, а когда их много - руками забодаешься копировать ...
У меня в итоге получился документ размером 800 страниц ...

А значения в дополнительный столбец каким образом можно заносить без макросов ? Есть ли в Exel какая-нибудь переменная окружения или функция, которая бы хранила или возвращала № текущей страницы на листе? Если есть, то можно это значение вставить в ячейку дополнительного столбца и размножить эту ячейку на все строки документа...
И тогда вариант с итогами по группам годится !

Greyman
16-03-2004, 15:45
DSK
Хотелось бы найти более рациональный вариант ...
Более рацианальный ИМХО нужно все-же в базах данных смотреть. Для табличного процессора этот вариант просто не рассматриваеться. Можно попробовать Биллу с саппорт написать, вдруг в Офис2010 таки предусмотрит такую вещь...:)
Как копировать формулу ? Руками ?
Это можно делать когда строк не много, а когда их много - руками забодаешься копировать ...
У меня в итоге получился документ размером 800 страниц ...
А значения в дополнительный столбец каким образом можно заносить без макросов ?
Конечно руками. Какая разница, то? Формула ведь одна: выделил ячейку с формулой, выбрал - копировать, выделил весь столбец (или только 800 строк), нажал Энтер (или - вставить). В чем проблем, то? Соответственно так и заносишь...
Есть ли в Exel какая-нибудь переменная окружения или функция, которая бы хранила или возвращала № текущей страницы на листе? Если есть, то можно это значение вставить в ячейку дополнительного столбца и размножить эту ячейку на все строки документа...
Пока вроде не встречал, ИМХО нету. Хотя Эхель сам это знает (после предпросмотра по крайней мере)...
И тогда вариант с итогами по группам годится !
А чем тебе не нравиться предложенный вариант с принудительным указанием страницы? Смотришь сколько строк влезает на одну страницу, а потом используешь формулу, которая меняет свое значение через данное количество строк (можно даже на несколько строк меньше). Если интересует сам образец формулы, то можно использовать что-нить вроде этого:
=ОКРВВЕРХ(СТРОКА(E1)/20;1)
Меняет свое значение каждые 20 строк. Единственный минус - это у тебя строки должны быть одинаковой высоты, иначе может получиться, что одна группа на одну страницу влезть не сможет. Но это решаеться либо принудительной задачей одинаковой высоты всем строкам, либо определение числа строк на страницы по наиболее толстым из имебщихся...

DSK
16-03-2004, 16:50
Более рациональный ИМХО нужно все-же в базах данных смотреть.
100% согласен !!!
Но "маемо тэ що маемо" :)
Т.е. "имеем то что имеем" :)
А имеем dbf-файлы и FoxPro v2.6 для DOSa ... :(
Следовательно путь: генератор отчётов->отчёт в каком-то виде -> конвертация в Exel не катит ...

Можно попробовать Биллу с саппорт написать, вдруг в Офис2010 таки предусмотрит такую вещь...
я им писал ...
они мне ответили, что для того чтобы они мне ответили нужно онлайн зарегистрироваться, на кучу вопросов ответить и тогда может быть они ответят ...
в общем хлопотно ...
Хотя Эхель сам это знает (после предпросмотра по крайней мере) ...
Исходя из этого я и думал, что есть доступная переменная или функция, которая возвращает текущий № страницы ...
Почему её нету не понятно ... Даже в Foxe v2.6 1994 года выпуска (разработчик Microsoft) в отчётах есть переменная _pageno - которая возвращает № текущей страницы ...

Единственный минус - это у тебя строки должны быть одинаковой высоты, иначе может получиться, что одна группа на одну страницу влезть не сможет. Но это решаеться либо принудительной задачей одинаковой высоты всем строкам, либо определение числа строк на страницы по наиболее толстым из имебщихся...

В том-то и вся беда, что строки совершенно разной высоты и их количество на странице может меняться от 5 до 50 :(

А делал следующим образом:
Брал высоту печатаемой страницы, проходил по всем ячейкам и суммировал их высоты и как только сумма высот~размеру страницы, то вставлял строку с посчитанными итогами ...

oasu
17-03-2004, 09:25
Уважаемые, подскажите пожалуйста прогу для конвертации файлов Excel  в формат .dbf

hasherfrog
17-03-2004, 09:45
:lol: Сам Excel не подходит, что ли? Save as, выбираешь формат...

Greyman
17-03-2004, 13:40
DSK
В общем порылся я в этом несчастном Эхеле... Номер страницы она самостоятельно действительно возвращать не умеет,... но есть так называемая коллекция объектов "PageBreak", используя которые, номера страниц таки можно узнать (и управлять разрывами страниц соответственно). Воть тебе пример, который я прикинул с этим делом:

Sub Макрос1()
nPages = Worksheets(1).HPageBreaks.Count + 1
'Считаем количество страниц
nStrok = 800
' Задаем число строк
' Можно брать значение из какой-нить ячейки
' или предварительно подсчитывать количество в выделенном диапазоне
Stolb = 5
'Номера страниц проставляем в столбце "E"
If nPages = 1 Then
For i = 1 To nStrok
*Worksheets(1).Cells(i, Stolb).Value = 1
Next i
Else
page = 1
pbRow = Worksheets(1).HPageBreaks(page).Location.Row - 1
For i = 1 To nStrok
*iRow = Worksheets(1).Cells(i, Stolb).Row
*If iRow > pbRow Then
* page = page + 1
* If page < nPages Then
* *pbRow = Worksheets(1).HPageBreaks(page).Location.Row - 1
* Else
* *pbRow = nStrok
* End If
*End If
*Worksheets(1).Cells(i, Stolb).Value = page
Next i
End If
End Sub

Так что можешь это использовать в своем макросе для самостоятельной вставки постраничных итогов (соответственно pbRow надо будет уменьшать пропорцианально номеру текущей страницы, иначе твои итоги могут уже на следующую страницу вылезти). Или можно использовать его прямо в таком виде в комбинации со стандартной функцией промежуточных итогов по группам.
* *Так легче?

BRAT2
18-03-2004, 11:49
Допустим есть така таблица (в Excel):
1 к
2 а
3 в
и т.д.
Можно ли сделать так, чтобы при сортировке по алфавиту столбца с буквами, столбец с цифрами изменился соответствующим образом, т.е напроти буквы "а" была цифра 2, напротив "в" - цифра 3 и т.д.? Как это сделать?

Blast
18-03-2004, 11:55
MER
только вот зачем темы дублировать?
эту: http://forum.oszone.net/topic.cgi?forum=22&topic=1816
я закрываю, а тебе бы правила перечитать...

Bugs
18-03-2004, 11:59
MER
Проще всего остортировать по буквам, а потом или скрипотм или руками протащить нумерацию

Greyman
18-03-2004, 12:07
MER
* *"По уму", ИМХО, делать лучше так:
1) Выделяешь область, которую надо сортировать (как столбцы, так и строки, главное, чтобы обрасть неразрывная была).
2) Идешь в сортировку (ну тут вроде ясно - Данные/ Сортировка)
3) Выбираешь столбец, по которому надо сортировать записи (в твоем случае - второй) и параметры сортировки (например можешь даже сортировать не по столбцам, а по строкам).

Тока обрати внимание, что если сортируемые значения представлены в виде формул, то после сортировки они могут измениться (даже скорее всего, если они используют ссылки). Поэтому чтобы этого избежать, перед сортировкой необходимо перевести содержимое ячеек из формул в их значения).

DSK
18-03-2004, 14:43
Greyman
Идея понятна !
Тоже вариант !
Так легче?
Думаю что варианты приблизительно равны ...

Самое главное что я хотел выяснить: можно ли было без использования макросов решить поставленную мне задачу ...
Общими усилиями выяснили, что нельзя!

Большое спасибо за обсуждение проблемы !




© OSzone.net 2001-2012