3°C
завтра: 7°C
Погода в Перми
3°C
днем5°C
вечером7°C
завтра7°C
Подробно
 63,96
−0.1086
Курс USD ЦБ РФна 20 апреля
63,9602
−0.1086
 71,92
−0.3208
Курс EUR ЦБ РФна 20 апреля
71,9232
−0.3208
  • member

    Сообщений: 29

    Господа, программисты, не дайте умереть за компом!
    Помогите (напишите), если не сложно парочку маааленьких макросов для Excel

    Есть таблица, в которой некоторое количество столбцов (например, A:AZ) и много строк (около тысячи). Среди столбцов есть один (пусть будет Z), ячейки которого имеют целые значения n (от 1 до 20).
    Нужно два макроса:

    1. Пробежаться по ячейкам столбца Z. Если значение ячейки >1, то добавить под этой строкой (в которой находится данная ячейка) (n-1) пустых строк. Т.е. Если в ячейке Z25 стоит значение 7, то добавить после 25-й строки 6 пустых строк.

    2. И второй макрос в продолжение первого (думаю тоже не сложный). Пробежаться по ячейкам первого столбца (A). Если ячейка оказалась пустой, то скопировать ячейки A:AZ из предыдущей строки в данную. Скопировать именно не всю строку, а только от A до AZ. Остальные стобцы должны остаться неизменными.

    Помогите такое чудо сотворить, а то у меня вручную терпежу не хватит перелопатить эту долбаную таблицу! Там больше половины строк имеют n>1:хммм:

    СофтоПарк.Ру Место встречи с необходимым!

  • Sorry but...

    Сообщений: 44140

    *Скопировать именно не всю строку, а только от A до AZ*
    точно от A до AZ? Это же вся строка таблицы получается и насчет остальных колонок замечание тогда не понятно.

    Кладоискатель высшей категории

  • member

    Сообщений: 29

    В ответ на: *Скопировать именно не всю строку, а только от A до AZ*
    точно от A до AZ? Это же вся строка таблицы получается и насчет остальных колонок замечание тогда не понятно.
    Замечание верное. Написал не совсем корректно, учитывая, что вся таблица состоит из столбцов от A до AZ.

    На самом деле, это не настолько Важно. Таблицу можно было бы увеличить на пару столбцов... Ну, да ладно.

    Пусть будет так: "Скопировать именно не всю строку, а только от A до AS. Остальные столбцы AT:AZ должны остаться неизменными"

    СофтоПарк.Ру Место встречи с необходимым!

  • Sorry but...

    Сообщений: 44140

    Это первый:

    Sub Макрос1()
    b = 0
    Row = 0
    Do While b < 100
    Row = Row + 1
    rc = ActiveSheet.Cells(Row, 26).Value
    If rc > 0 Then
    For cnt = 1 To rc
    ActiveSheet.Cells(Row, 1).Offset(1, 0).EntireRow.Insert
    Next
    End If
    If IsEmpty(ActiveSheet.Cells(Row, 1)) Then
    b = b + 1
    End If
    Loop
    End Sub

    А зачем тебе два отдельных? можно же сделать все в одном, или там какие-то дополнительные действа?

    Кладоискатель высшей категории

  • member

    Сообщений: 29

    Во-первых, сразу спасибо! Правда, еще не посмотрел:улыб:Во-вторых, два коротких проще рассмотреть:улыб:Хочется еще и понять что и как. Я как то пытался разобрать один (изучить) как пример, но так и ничего не понял. Он был на пол-страницы. А так два коротеньких осилю в понимании, думаю. Смотришь, сам чего смастерю потом.

    СофтоПарк.Ру Место встречи с необходимым!

  • Sorry but...

    Сообщений: 44140

    второй завтра накидаю - сейчас убегаю.
    а в первый чуток подправлю? а то критерий окончания таблицы будет не 100 пустых строк подряд, а всего встреча 100 пустых строк в таблице:улыб:

    Sub Макрос1()
    b = 0
    Row = 0
    Do While b < 100
    Row = Row + 1
    rc = ActiveSheet.Cells(Row, 26).Value
    If rc > 0 Then
    For cnt = 1 To rc
    ActiveSheet.Cells(Row, 1).Offset(1, 0).EntireRow.Insert
    Next
    End If
    If IsEmpty(ActiveSheet.Cells(Row, 1)) Then
    b = b + 1
    else
    b=0
    End If
    Loop
    End Sub

    Кладоискатель высшей категории

  • Sorry but...

    Сообщений: 44140

    гы, чуть не забыл:улыб:

    Sub Макрос2()
    b = 0
    Row = 0
    br = 0
    er = 0
    Do While b < 100
    Row = Row + 1
    If IsEmpty(ActiveSheet.Cells(Row, 1)) Then
    b = b + 1
    If br = 0 Then
    br = Row
    er = Row
    Else
    er = Row
    End If
    Else
    b = 0
    If br <> 0 Then
    ActiveSheet.Range("A" & br - 1 & ":AS" & br - 1).Copy
    ActiveSheet.Range("A" & br & ":AS" & er).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    br = 0
    er = 0
    End If
    End If
    Loop
    End Sub

    Кладоискатель высшей категории

  • member

    Сообщений: 29

    Классно! Второй работает отлично! А вот первый чего то у меня не фурычит...:хммм:Вообще никакой реакции, никаких изменений...

    Хотя, я кажется немного промахнулся со столбцом... Прошу прощения!

    Вопрос. Где задается столбец, в котором нужно смотреть количество добавочных строк?
    rc = ActiveSheet.Cells(Row, 26).Value
    Число 26 определяет, нет?

    Да, и маленькая поправка. Если стоит число 1, то добавлять строки не нужно. Это как подправить?

    СофтоПарк.Ру Место встречи с необходимым!

  • member

    Сообщений: 29

    Т.е. количество добавочных строк должно быть (n-1). Сейчас, какое число стоит, столько строк и добавляется...
    Можно, конечно исправить сам столбец... Но мне хочется понять еще и сам макрос:улыб:

    СофтоПарк.Ру Место встречи с необходимым!

  • v.i.p.

    Сообщений: 13508

    В ответ на: а то критерий окончания таблицы будет не 100 пустых строк подряд, а всего встреча 100 пустых строк в таблице
    Зачем так сложно?
    Excel может сам сказать номер последней используемой строки:

    LastRow = Cells.SpecialCells(xlLastCell).Row

  • Sorry but...

    Сообщений: 44140

    К сожалению, Excel выдает номер последней когда-нибудь используемой строки. Т.е. если вы с троке 65536 вы когда-нибудь нажали пробельчик, то именно эту строчку вам вернет LastRow = Cells.SpecialCells(xlLastCell).Row (или Ctrl_End).

    Кладоискатель высшей категории

  • v.i.p.

    Сообщений: 13508

    Вероятность такого события черезвычайно мала. А вот реализация намного понятней

  • Sorry but...

    Сообщений: 44140

    Я пришел к этому не от досужих размышлений, а сделав выводы из практического опыта. Очень многое, к сожалению, задекларированное в MSOffice *приятным* в итоге вываливается в очередной гимор разработчика.

    Кладоискатель высшей категории

  • v.i.p.

    Сообщений: 13508

    Возможно. Просто за всё время применения данного метода я ни разу не испытывал подобных проблем

  • guru

    Сообщений: 5269

    > Просто за всё время применения данного метода я ни разу не испытывал подобных проблем

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

Записей на странице:

Перейти в форум

Модератор: