Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Excel цикл по столбцам

excel цикл по столбцам

Нужно в зависимости от длины поля в таблице, которая копируется в Excel, менять column.width в Excel
Что-то типа
for i:=0 to 25 do
if a>b then
worksheet.columns[i].w >


malamba ( 2003-08-07 19:10 ) [1]

Что за таблица? И что за длина поля?


gsvserg ( 2003-08-07 19:23 ) [2]

Таблица AdoQuery, в ней несколько полей. Все поля строковые. Перекидываю ее в Excel. Вычисляю максимальную длину строки в каждом поле, после нужно установить ширину колонок в Excel, чтобы было видно всю строку.


Dred2k ( 2003-08-07 20:16 ) [3]

Вот тебе кусок кода.

for j := Low(tmpColNum) to High(tmpColNum) do begin
App.Columns[j + 1].ColumnW >App.Cells[1, j + 1].Value := FDBGrid.Columns[tmpColNum[j]].Title.Caption;
App.Cells[1, j + 1].HorizontalAlignment := DefExcelAlignment[FDBGrid.Columns[tmpColNum[j]].Title.Alignment];
App.Cells[1, j + 1].Font.Bold := True;
App.Cells[1, j + 1].Interior.Color := RGB(192, 192, 192);
App.Cells[1, j + 1].Borders.Color := RGB(0, 0, 0);
( я поленился, наверное ; ) Вот тебе кусок кода.

for j := Low(tmpColNum) to High(tmpColNum) do begin
App.Columns[j + 1].ColumnW >App.Cells[1, j + 1].Value := FDBGrid.Columns[tmpColNum[j]].Title.Caption;
App.Cells[1, j + 1].HorizontalAlignment := DefExcelAlignment[FDBGrid.Columns[tmpColNum[j]].Title.Alignment];
App.Cells[1, j + 1].Font.Bold := True;
App.Cells[1, j + 1].Interior.Color := RGB(192, 192, 192);
App.Cells[1, j + 1].Borders.Color := RGB(0, 0, 0);
end;

tmpColNum — массив, содержащий номера выводимых мной колоной DBGrid-а. Ширина колонок в Excel выставляется соразмерно ширине колонок грида. Коэффициент соразмерности можно при желании сформулировать и в общем виде (я поленился, наверное ;)).
Кроме ширины выставляются свойства первой строки на листе (заголовок). Лист — текущий.


Alex Bredin ( 2003-08-08 10:44 ) [4]

я тож пытался так сделать, но потом сообразил, что Excel сделает это лучше))

//пробуем применить автоформат.
Range1:=Sheet.Range[Sheet.Cells[StartR, StartC],Sheet.Cells[StartR + Rows, StartC + Cols — 1]];
Range1.AutoFormat(XLFormat,True,True,True,True,True,True);

XLFormat-цел.число(я беру 1)-посмотри


Alex Bredin ( 2003-08-08 10:50 ) [5]

а вообще над Range можно извращаться как хочешь, только перед этим включи запись макроса, а потом перенеси его текст в Delphi

Читать еще:  Как остановить макрос vba excel


gsvserg ( 2003-08-08 11:43 ) [6]

Alex Bredin © (08.08.03 10:44)
Спасибо, попробовал твой метод — работает.
Только в Excel появляются линии под первой и предпоследней строками. Я так понял что это из-за xlFormat=1.
Всем спасибо.


Alex Bredin ( 2003-08-08 14:53 ) [7]

понял ты неправильно.
Цитата из экселевского макроса:

Selection.AutoFormat Format:=xlRangeAutoFormatSimple, Number:=True, Font _
:=True, Alignment:=True, Border:=True, Pattern:=True, W >
думаю все ясно и так


gsvserg ( 2003-08-08 15:35 ) [8]

У меня есть статистика НФЛ, в которой я захожу в таблицу для создания условно отформатированных тепловых карт.

Мои данные начинаются в столбце E и заканчиваются в столбце P, но мне нужно, чтобы они начинались с a2 и переходили к последней строке этого столбца, а затем делали то же самое для каждого столбца, чтобы условия не перекрывались и создавался один большой Тепловая карта. Я просто хочу тепловую карту для каждого отдельного столбца, чтобы я мог проанализировать этот путь. (НЕ ВСЕ КОЛОННЫ СОДЕРЖАТ ЦИФРЫ, И ОНИ РАСПРОСТРАНЯЮТСЯ, ТАК ОБЫЧНОЕ ФОРМАТИРОВАНИЕ НЕ ДОЛЖНО ПОДНИМАТЬ ТЕКСТОВЫЕ КОЛОННЫ ВСЕГДА)

Как бы я зацикливался на столбцах без явной ссылки на них? Мой статус для одной позиции не будет содержать столько же столбцов, сколько для другой.

Мне нужно, чтобы это было как можно более динамичным. Кроме того, кто-нибудь может помочь мне убрать части условного форматирования? Для этого я просто скопировал код, записанный макросом, поскольку сам не знаю, как его скомпилировать.

Создадим самый простой цикл используя VBA в Excel.

В этот раз напишем всё своими руками:

Расшифрую, приведённый выше код VBA:

  • Весь код макроса заключается между Sub и End Sub, после Sub пишется название макроса.
  • Текст после ‘ означает комментарий
  • Цикл заключается между For … to и Next
  • i — в моём случае переменная, Вы можете выбрать любую другую, в том числе поддерживаются и русские обозначения (например: For переменная=1 To 10 …)
  • Cells(строка, столбец) – ячейка в которую хотим что-то записать или из которой хотим извлечь информацию, в нашем случае столбец мы указали константу (1 и 2), а строку сделали переменной (i+1).
  • Range(“b1”) возвращает значение ячейки “B1”
Читать еще:  Sql выгрузка в excel

А ещё, можно сразу дописать минимакрос по очистке диапазона от значений

Циклы в VBA

Встречаются ситуации, когда от программы VBA требуется совершить несколько раз подряд один и тот же набор действий (то есть повторить несколько раз один и тот же блок кода). Это может быть сделано при помощи циклов VBA.

К циклам VBA относятся:

Далее мы подробно рассмотрим каждый из этих циклов.

Оператор цикла «For» в Visual Basic

Структура оператора цикла For в Visual Basic может быть организована в одной из двух форм: как цикл For … Next или как цикл For Each.

Цикл «For … Next»

Цикл For … Next использует переменную, которая последовательно принимает значения из заданного диапазона. С каждой сменой значения переменной выполняются действия, заключённые в теле цикла. Это легко понять из простого примера:

В этом простом цикле For … Next используется переменная i, которая последовательно принимает значения 1, 2, 3, … 10, и для каждого из этих значений выполняется код VBA, находящийся внутри цикла. Таким образом, данный цикл суммирует элементы массива iArray в переменной Total.

В приведённом выше примере шаг приращения цикла не указан, поэтому для пошагового увеличения переменной i от 1 до 10 по умолчанию используется приращение 1. Однако, в некоторых случаях требуется использовать другие значения приращения для цикла. Это можно сделать при помощи ключевого слова Step, как показано в следующем простом примере.

Так как в приведённом выше примере задан шаг приращения равный 0.1, то переменная dTotal для каждого повторения цикла принимает значения 0.0, 0.1, 0.2, 0.3, … 9.9, 10.0.

Для определения шага цикла в VBA можно использовать отрицательную величину, например, вот так:

Читать еще:  Vba excel inputbox примеры

Здесь шаг приращения равен -1, поэтому переменная i с каждым повторением цикла принимает значения 10, 9, 8, … 1.

Цикл «For Each»

Цикл For Each похож на цикл For … Next, но вместо того, чтобы перебирать последовательность значений для переменной-счётчика, цикл For Each выполняет набор действий для каждого объекта из указанной группы объектов. В следующем примере при помощи цикла For Each выполняется перечисление всех листов в текущей рабочей книге Excel:

Оператор прерывания цикла «Exit For»

Оператор Exit For применяется для прерывания цикла. Как только в коде встречается этот оператор, программа завершает выполнение цикла и переходит к выполнению операторов, находящихся в коде сразу после данного цикла. Это можно использовать, например, для поиска определённого значения в массиве. Для этого при помощи цикла просматривается каждый элемент массива. Как только искомый элемент найден, просматривать остальные нет необходимости – цикл прерывается.

Применение оператора Exit For продемонстрировано в следующем примере. Здесь цикл перебирает 100 записей массива и сравнивает каждую со значением переменной dVal. Если совпадение найдено, то цикл прерывается:

Цикл «Do While» в Visual Basic

Цикл Do While выполняет блок кода до тех пор, пока выполняется заданное условие. Далее приведён пример процедуры Sub, в которой при помощи цикла Do While выводятся последовательно числа Фибоначчи не превышающие 1000:

В приведённом примере условие iFib_Next

Ссылка на основную публикацию
Adblock
detector