#excel #vba
#excel #vba
Вопрос:
Я очень новичок в Excel, VBA и макросах… Я пытаюсь создать макрос, который, наконец, добавил столбец с именем «XXX», т.Е. после последнего столбца, а затем в этом недавно добавленном столбце макрос должен найти 2 столбца…
Ответ №1:
1. Скопируйте и вставьте формат заголовка
.Cells(1, LastCol).Copy .Cells(1, LastCol 1).PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False
- Применить формулу к диапазону столбцов «Время отклика»
For i = 2 To LastRow .Cells(i, LastCol 1).Formula = .Cells(i, col2) - .Cells(i, col1) Next i
- Преобразование десятичного числа в формат времени
.Cells(i, LastCol 1).NumberFormat = "hh:mm:ss"
РЕДАКТИРОВАТЬ: [Полный код]
Option Explicit
Sub addformula()
Dim LastRow As Long
Dim LastCol As Long
Dim iRow As Long
Dim wsh As Worksheets
Dim col1 As Long, col2 As Long
With ActiveWorkbook.Worksheets("Formula testing")
'Find Full Out Gate at Inland or Interim Point (Destination)_actual and Full Out Gate at Inland or Interim Point (Destination)_recvd
With ActiveWorkbook.Worksheets("Formula testing")
col1 = .Cells.Find(What:="Full Out Gate at Inland or Interim Point (Destination)_actual", _
After:=Range("A1"), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column
col2 = .Cells.Find(What:="Full Out Gate at Inland or Interim Point (Destination)_recvd", _
After:=Range("A1"), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column
With ActiveWorkbook.Worksheets("Formula testing")
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
.Cells(1, LastCol 1).Value = "Response Time"
' Copy Header Fromat
.Cells(1, LastCol).Copy
.Cells(1, LastCol 1).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
' Apply Formula to "Response Time" column range
For i = 2 To LastRow
.Cells(i, LastCol 1).Formula = .Cells(i, col2) - .Cells(i, col1)
.Ячейки (i, LastCol 1).NumberFormat = «hh:mm:ss»
Next i
End With
End With
End With
ActiveWorkbook.Worksheets("Formula Testing").UsedRange.Columns.AutoFit
End Sub
Комментарии:
1. это работает, но вывод отображается в десятичных числах, он должен вычесть этот столбец и выдать их как значение времени… Пожалуйста, ознакомьтесь с моими изменениями в части вопроса о том, каким должен быть желаемый результат и какой макрос сгенерирован … пожалуйста, сообщите
2. РЕДАКТИРОВАТЬ: @jazz , чтобы получить формат времени, вы можете использовать add this code . Ячейки (i, LastCol 1).NumberFormat = «hh:mm:ss»
Ответ №2:
Я изменил вашу строку формулы на нижеприведенную строку кода.
Range(Cells(2, LastCol 1).Address amp; ":" amp; Cells(LastRow, LastCol 1).Address).Formula = "=" amp; Cells(2, col2).Address(0, 0) amp; "-" amp; Cells(2, col1).Address(0, 0)
Пожалуйста, попробуйте приведенный ниже код.
Option Explicit
Sub addformula()
Dim LastRow As Long
Dim LastCol As Long
Dim iRow As Long
Dim wsh As Worksheets
Dim col1 As Long, col2 As Long
With ActiveWorkbook.Worksheets("Formula testing")
With ActiveWorkbook.Worksheets("Formula testing")
col1 = .Cells.Find(What:="Full Out Gate at Inland or Interim Point (Destination)_actual", _
After:=Range("A1"), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column
col2 = .Cells.Find(What:="Full Out Gate at Inland or Interim Point (Destination)_recvd", _
After:=Range("A1"), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column
With ActiveWorkbook.Worksheets("Formula testing")
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
.Cells(1, LastCol 1).Value = "Response Time"
Range(Cells(2, LastCol 1).Address amp; ":" amp; Cells(LastRow, LastCol 1).Address).Formula = "=" amp; Cells(2, col2).Address(0, 0) amp; "-" amp; Cells(2, col1).Address(0, 0)
End With
End With
End With
ActiveWorkbook.Worksheets("Formula Testing").UsedRange.Columns.AutoFit
End Sub