Разборки с Экселем

Программирование на Visual Basic for Applications
FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Разборки с Экселем

Сообщение FaKk2 » 14.08.2003 (Чт) 17:01

Вот, мне сегодня пришлось помогать маме, редактировать оочень длинную таблицу..
Ну и ессесно, возникла идея это все автоматизировать..:)
Вот чего я не понимаю и не знаю:
1. Как двигаться по клеткам таблицы, вправо, влево, етс.
2. Можно ли в Range засунуть переменную, т.е. Range(fst, lst)?
3. Что значит строка =SUM(R[-6]C:R[-1]C. Как я понимаю R это от свола Range, но почему там минусовые значения?

Надеюсь и уповаю... :roll:

Кстати, копание F2 никчему не привело :( Хотя, я видимо не то искал... :oops:
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 14.08.2003 (Чт) 17:16

По первому накопал Range("адрес").Select, но тогда надо парсить адрес оригинальной клетки :(
Как то криво получается...Может все таки есть нормальный способ, что нить типа MoveRight, Moveleft? :roll:
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 14.08.2003 (Чт) 19:50

1. вот так можно узнать адресацию
ActiveCell.Row
ActiveCell.Column
2. range(cells(5,"a"),cells(8,"b"))
3. насколько я понимаю это относительная адресация, но зачем тебе она :?: :?:
Ничто так не ограничивает полёт мысли программиста, как компилятор

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 14.08.2003 (Чт) 19:54

1. Мне надо двигаться по клеткам. А те свойства не меняются вроде.
2. Спасибо, щас опробую.
3. Мне надо посчитать сумму клеток в столбце. Т.к. я не знаю как это сделать, я подсмотрел сгенеренный Экселем макрос. Там он именно так и считал сумму. Возможно есть другой способ, который я ща тоже попробую.
Спасибо, за ответы 8)
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 14.08.2003 (Чт) 20:08

Фигня какая то...привожу код, для наглядности:
Код: Выделить всё
first_ad = ActiveCell.Address 'берем адрес первой клетки
    next_add = Int(Mid(first_ad, 4, Len(first_ad))) 'вычленяем номер клетки
    first_add = Int(Mid(first_ad, 4, Len(first_ad))) тоже самое
    t = "$C" & next_add двигаемся к столбцу С. там лежит текст
    Range(t).Select выделяем клетку в столбце С
    first = ActiveCell.Value вытаскиваем значение
    last = first подготавливаем цикл
    Do While first = last крутимся пока значения клеток равны
        next_add = next_add + 1 берем следующую клетку
        t = "$C" & next_add
        Range(t).Select
        last = ActiveCell.Value берем её значение
    Loop
    Selection.EntireRow.Insert вставляем новую строку
    rng = "A" & first_add & ":A" & next_add выделяем найденный интервал
    Range(rng).Select
    Range(rng).Activate
    fun = "=SUM(" & first_ad & ":" & next_ad & ")" - здесь должен быть вызов СУММ, но она не работает
    ActiveCell.FormulaR1C1 = fun говорит, неверный синтаксис
    rng = "$A" & next_add
    Range(rng).Select результат вычеслений подчеркиваем жирным
    Selection.Font.Bold = True


Помогите плиз. Как там тот синтаксис делать? :oops:
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 14.08.2003 (Чт) 20:54

Почти разобрался!
Одна загвоздка. В строке ActiveCell.FormulaR1C1 = "=SUM(A" & first_add & ":A" & next_add - 1 & ")"

Ординарныз кавычек нет. Но в Экселе они вылазят в виде: =SUM('A1889':'A1889') - изза чего функция не работает...
Это почему так? :roll:
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 14.08.2003 (Чт) 21:05

Человеческий гений в моем лице победил!!!
Кому интересно привожу работающий код:
Код: Выделить всё
next_add = 0
Do While next_add <= 4304
    first_ad = ActiveCell.Address
    next_add = Int(Mid(first_ad, 4, Len(first_ad)))
    first_add = Int(Mid(first_ad, 4, Len(first_ad)))
    t = "$C" & next_add
    Range(t).Select
    first = ActiveCell.Value
    last = first
    Do While first = last
        next_add = next_add + 1
        t = "$C" & next_add
        Range(t).Select
        last = ActiveCell.Value
    Loop
    t = "$A" & next_add
    Range(t).Select
    next_ad = ActiveCell.Address
    Selection.EntireRow.Insert
    ActiveCell.Formula = "=SUM(A" & first_add & ":A" & next_add - 1 & ")"
    rng = "$A" & next_add
    Range(rng).Select
    Selection.Font.Bold = True
    next_add = next_add + 1
    t = "$A" & next_add
    Range(t).Select
Loop


Внешний цикл, это цикл который пробегает все 4304 записи. (согласитесь многовато для ручной работы :wink: )

А фишка там была, что надо Formula писать а не FormulaR1C1 :wink:
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.08.2003 (Пт) 10:09

Люди, вы меня убиваете :)
В Excel есть два способа адресации, A1 и R1C1. Я кстати всегда пользуюсь вторым (это в настройках указывается), он мне гораздо ближе :)
При этом адрес ячейки может указываться как R5C10 или R[4]C[-2]. Первый случай -- это абсолютная адресация, ячейка в пятой строке (Row) и десятом столбце (Col). Второй -- адресация относительная, ячейка, на четыре строки ниже и на две левее относительно текущей. Разумеется можно комбинировать: R1C[2] - ячейка с первой строки и на два правее текущей, R[1]C - ячейка, на одну ниже текущей.
Выражение "=SUM(R[-6]C:R[-1]C" означает просуммировать шесть ячеек над текущей.
Lasciate ogni speranza, voi ch'entrate.

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 15.08.2003 (Пт) 10:47

alibek писал(а):Люди, вы меня убиваете :)
В Excel есть два способа адресации, A1 и R1C1. Я кстати всегда пользуюсь вторым (это в настройках указывается), он мне гораздо ближе :)
При этом адрес ячейки может указываться как R5C10 или R[4]C[-2]. Первый случай -- это абсолютная адресация, ячейка в пятой строке (Row) и десятом столбце (Col). Второй -- адресация относительная, ячейка, на четыре строки ниже и на две левее относительно текущей. Разумеется можно комбинировать: R1C[2] - ячейка с первой строки и на два правее текущей, R[1]C - ячейка, на одну ниже текущей.
Выражение "=SUM(R[-6]C:R[-1]C" означает просуммировать шесть ячеек над текущей.

Не умирай :)
Спасибо за объяснения, но задача выполнена :)
Больше ничего не требуется... :D
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 83

    TopList