Ответы пользователя по тегу Visual Basic
  • Как записать и использовать такой макрос в Excel?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Очевидно, формула, которую надо размножить, записана во "второй строчке", т.е. диапазоне H3:K3.
    Вставьте нижеприведённый код в Module1 (который указан на скриншоте).

    ' Не самый оптимальный, но наглядный способ. Ctrl+Break - экстренная остановка.
    Option Explicit
    '123456789012345678901234567890123456h8nor@ya567890123456789012345678toster56789
    
    Sub Макрос1()
      Dim i As Long
      
      i = 3 ' Формулу будем копировать с 3-й строки
      With ThisWorkbook.ActiveSheet
        Do
          i = i + 1
          .Range("H" & i & ":K" & i) = .Range("H" & i - 1 & ":K" & i - 1).FormulaR1C1
        Loop Until i = .UsedRange.Rows.Count ' Цикл ДО последней строки с данными
      End With
    End Sub
    Ответ написан
    Комментировать
  • Как раскидать строки по листам?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    ' Таблица с данными должна начинаться с ячейки A1, лист активен. Старые данные не очищаются.
    Option Explicit
    Option Base 1
    '123456789012345678901234567890123456h8nor@ya567890123456789012345678toster56789
    
    Sub Создать_листы_по_последнему_столбцу()
      Dim a As Integer, k As Byte, m As Variant
      
      With ThisWorkbook
        With .ActiveSheet
          m = .Cells(1, 1).Resize(.UsedRange.Rows.Count, .UsedRange.Columns.Count)
        End With
        For a = LBound(m, 1) + 1 To UBound(m, 1)
          k = FindSheet(m(a, UBound(m, 2)))
          If k = 0 Then
            .Sheets.Add After:=.Sheets(.Sheets.Count): k = .Sheets.Count
            With .Sheets(k)
              .Name = m(a, UBound(m, 2))
              .Cells(1, 1) = m(LBound(m, 1), 1): .Cells(1, 2) = m(LBound(m, 1), 2)
            End With
          End If
          With .Sheets(k)
            .Cells(.UsedRange.Rows.Count + 1, 1) = m(a, LBound(m, 2)) ' Нижняя граница "m"
            .Cells(.UsedRange.Rows.Count + IIf(Val(Application.Version) >= 12, 0, 1), _
              2) = m(a, UBound(m, 2)) ' Верхняя граница "m"
          End With
        Next a
      End With
    End Sub
    
    Function FindSheet(ByVal SheetName As String) As Byte
      Dim GetBook As Workbook, GetSheet As Worksheet
      
      Set GetBook = ThisWorkbook
      For Each GetSheet In GetBook.Worksheets
        If GetSheet.Name = SheetName Then FindSheet = GetSheet.Index: Exit For
      Next GetSheet: Set GetSheet = Nothing: Set GetBook = Nothing
    End Function
    Ответ написан
    Комментировать
  • Какие варианты развития карьеры мне доступны?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    макросы в basic

    VBA - довольно узкая специализация. Как программист я довольно долго искал место.
    Макросы нужны для выполнения рутинных задач. Для серьёзного проекта нужна система, работающая с БД, но далеко не все компании готовы тратить время на разработку собственных систем учёта (чаще используют готовую CRM).
    На фрилансе далеко не уедешь, так что постоянная работа нужна в любом случае.
    SQL + VB(A) = обслуживающий программист 1C (вполне возможно)
    Ответ написан
    Комментировать
  • Как писать формулы в Excel?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    S=a*b - площадь прямоугольника
    V=a*b*c - объем прямоугольного параллелепипеда
    Формулы в Excel начинаются со знака "=" (равно).
    Ответ написан
    1 комментарий