Страницы: 1
RSS
Макрос для центрирования ячейки в столбце
 
Здравствуйте!
Может, кто знает, как автоматически   разместить ячейку в первом столбце максимально по центру относительно заполненных ячеек в правом (втором) столбце (количество ячеек будет всегда меняться, т.е. будет динамика) и одновременно разметить в той же строке ячейку в 9-м столбце таблицы (блока)? См. пример.
В идеале: находясь в ячейке B6 выполняется задача.
Благодарю за внимание)
Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.
 
1. Какая строка считается концом блока - перед толстой линей или перед строкой с заполненной ячейкой в столбце А?
2. По каким либо причинам после центровки изменится толщина линии  - как Вы определите границы блоков?

Если красивость нужна в отчетном документе - объединить ячейки первого столбца. Если эта таблица с данными используетс для дальнейших обработок - размножить значеия столбца А на все строки и не создавать себе проблемы в будущем.
 
Забыла сказать, что объединение ячеек исключено, дублировать значения в строках 1-го столбца тоже. Да, данные будут использоваться для для дальнейших обработок. Границы блоков - жирной линией для наглядности, в данном случае толщина линий границ не имеет значения. Конец блока - первая непустая ячейка 1-го столбца.
Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.
 
Цитата
flower написал: Конец блока - первая непустая ячейка 1-го столбца.
Допустим написали макрос для центрирования текста в ячейках столбца. Вы добавили ещё что-то и как макрос поймёт относительно чего центрировать текст?
Я бы заполнил все пустые ячейки соответствующим текстом, в рамках каждого блока кроме центровой ячейки сделал бы заливку и цвет текста белым в остальных ячейках.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
flower, cм. вопрос №2 в сообщении №2. Как пользователь или программа определит, куда относить какую-нибудь клубнику - к фруктам или клубничке? )
Не получится ли так, что через время будете искать спасения от своей центровки?
 
Визуализация хотелки с помощью УФ.
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Цитата
flower написал:
В идеале: находясь в ячейке B6 выполняется задача.
в соответсвии с идеалом. ставите курсор в В6, выполняете это:
Код
Sub ToCentre()
  Dim Lr&, R&, rg As Range
  Lr = ActiveCell.End(xlDown).Row + 1:  Set rg = ActiveCell.Offset(0, -1)
  Do While R < Lr
    If Not IsEmpty(rg.Offset(1, 0)) Then R = rg.Row + 1 Else R = rg.End(xlDown).Row: If R > Lr Then R = Lr
    If R - rg.Row > 1 Then Cells(Int((rg.Row + R) / 2), 1) = rg: rg = Empty
    Set rg = Cells(R, 1)
  Loop
End Sub
Изменено: Ігор Гончаренко - 02.01.2019 14:03:19
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, увы, ваш макрос работает только в одном блоке,а не сразу во всех, и не работает для ячейки I6

есть такой макрос:
но не нравится его центрирование, не идеально по центру получается в разных случаях. Как исправить не знаю(( и нужно, чтобы при вызове максроса из ячейки B6 он сработал одновременно для столбцов №№ 1 и 9, но самое главное максимальное центрирование))
Код
Sub середина1()

' Сочетание клавиш: Ctrl+q

    Application.DisplayAlerts = False
    sb = Selection.Column
    st = Selection.Row
    If Cells(st, sb - 1) = "" Then
        MsgBox "Внимание! Левый столбец ПУСТ!", vbInformstion, "Конец фильма"
        Exit Sub
    End If
    psp = Cells(Application.Rows.Count, sb).End(xlUp).Row
        psl = Cells(psp, sb - 1).End(xlUp).Row
        ns = psl - 1
    
    For i = psp To st Step -1
        c = ""
        tk = psp - psl + 1
        c = Fix(tk / 2)
        Cells(psl + c - 1, sb - 1) = Cells(psl, sb - 1)
        Cells(psl, sb - 1) = ""

        Cells(psl + c - 1, sb - 1).VerticalAlignment = xlCenter
        Cells(psl + c - 1, sb - 1).HorizontalAlignment = xlCenter
        
        p = psl - 1
        psl = Cells(psl, sb - 1).End(xlUp).Row
        i = psl + 1
        psp = p
    If psp = 0 Then
    Application.DisplayAlerts = True
        Exit Sub
    End If
    Next i
    Application.DisplayAlerts = True
End Sub
Изменено: flower - 02.01.2019 14:47:23
Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.
 
flower, код следует оформлять соответствующим тегом. Посмотрите, как это выглядит у Игоря. Ищите такую кнопку (см. скрин) и исправьте своё сообщение.
 
vikttur,
относить ничего не нужно и добавляться ничего не будет в этот вариант, нужно, чтобы макрос работал для любого количества ячеек во 2-м столбце, это промежуточная форма для дальнейшей работы с данными) в эту форму будут все время копироваться новые блоки с разным количеством ячеек в столбцах...
Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.
 
Цитата
flower написал:
не идеально по центру получается в разных случаях
Идеально не всегда получится: как сделать идеально для чётного количества строк в блоке?
 
с колонкой I провтыкал
Код
Sub ToCentre()
  Dim Lr&, R&, R1&, rg As Range
  Lr = ActiveCell.End(xlDown).Row :  Set rg = ActiveCell.Offset(0, -1)
  Do While R < Lr
    If Not IsEmpty(rg.Offset(1, 0)) Then R = rg.Row + 1 Else R = rg.End(xlDown).Row - 1: If R > Lr Then R = Lr
    If R - rg.Row > 3 Then
      R1 = Int((rg.Row + R) / 2): Cells(R1, 1) = rg:  Cells(R1, 9) = rg.Offset(0, 8)
      rg = Empty:  rg.Offset(0, 8) = Empty
    End If
    Set rg = Cells(R, 1)
  Loop
End Sub
Изменено: Ігор Гончаренко - 02.01.2019 15:13:49
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Юрий М
допустим 10 ячеек во 2-м столбце, тогда, ячейки в 1 и 9 столбцах лучше разместить в 5-й ячейке, т.е. выше будет 4 пустых, а ниже 5 ячеек.
если 24 ячейки, то в 12-й ячейке...

Ігор Гончаренко
да, так намного лучше, но вот еще бы это работало сразу для всех блоков на листе...ВСЁ работает, прошу прощения!
и для нечетного количества ячеек в блоках ячейку первого столбца размещать на 1 ячейку выше высчитанной середины, в сообщении выше прописано)
Изменено: flower - 02.01.2019 15:25:03
Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.
 
Ігор Гончаренко
макрос работает для всех блоков, я его применила в файле с пустыми строками между блоками, потому не сработал, так что норм, спасибо! вот только бы еще с центрированием четного количества ячеек в столбце подкорректировать...
Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.
 
поправил в #12
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко
всё работает, круто! Спасибо большое за помощь!!!
Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.
Страницы: 1
Наверх