将Excel公式转换为VBA宏

问题描述 投票:0回答:2

我在excel工作表中有以下公式,我想制作一个宏:

IF(OR(AA2=2,AA2=3,AA2=4),"00",IF(AA2=5,"0"&LEFT(Z2,1),IF(AA2=6,LEFT(Z2,2))))

我想基于另一列为某个范围建立此公式。我已经编写了多个公式来完成这项工作,例如:

Range("B3:B" & Cells(Rows.Count, "M").End(xlUp).Row).Value = "=B2+1"

基本上我想让上面的If / Or语句在VBA中具有所需的范围。

任何帮助,将不胜感激!

vba excel-vba excel
2个回答
0
投票

当通过VBA输入公式时,您将拥有Excel的动态范围:

Range( Cells(2,"AB"), Cells (colMVal, "AB")).Formula = "=IF(OR(AA2=2,AA2=3,AA2=4),""00"",IF(AA2=5,""0""&LEFT(Z2,1),IF(AA2=6,LEFT(Z2,2))))"

请注意,公式将一直输入到第2行,直到列M值,以指示最后一行(colMVal)。另请注意公式中的双引号。

如果需要修改任何东西而不是动态,你可以使用“$”,这样:

Range( Cells(2,"AB"), Cells (colMVal, "AB")).Formula = "=IF(OR(AA$2=2,AA$2=3,AA$2=4),""00"",IF(AA$2=5,""0""&LEFT(Z$2,1),IF(AA$2=6,LEFT(Z$2,2))))"

我锁定的所有引用都验证该行是2,因此AA $ 2。当Excel将公式填充到所需范围的每一行时,它将动态分配正确的行。


0
投票

只需设置您的功能,打开宏记录器,单击包含您的功能的单元格,点击F2并按Enter键。如果要设置动态开始和结束行或列,可以使用以下方法。

Sub DynamicRange()
'Best used when only your target data is on the worksheet

'Refresh UsedRange (get rid of "Ghost" cells)
  Worksheets("Sheet1").UsedRange

'Select UsedRange
  Worksheets("Sheet1").UsedRange.Select

End Sub

要么

Sub DynamicRange()
'Best used when first column has value on last row and first row has a value in the last column

Dim sht As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range

Set sht = Worksheets("Sheet1")
Set StartCell = Range("D9")

'Find Last Row and Column
  LastRow = sht.Cells(sht.Rows.Count, StartCell.Column).End(xlUp).Row
  LastColumn = sht.Cells(StartCell.Row, sht.Columns.Count).End(xlToLeft).Column

'Select Range
  sht.Range(StartCell, sht.Cells(LastRow, LastColumn)).Select

End Sub

要么

Sub DynamicRange()
'Best used when you want to include all data stored on the spreadsheet

Dim sht As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range

Set sht = Worksheets("Sheet1")
Set StartCell = Range("D9")

'Refresh UsedRange
  Worksheets("Sheet1").UsedRange

'Find Last Row and Column
  LastRow = StartCell.SpecialCells(xlCellTypeLastCell).Row
  LastColumn = StartCell.SpecialCells(xlCellTypeLastCell).Column

'Select Range
  sht.Range(StartCell, sht.Cells(LastRow, LastColumn)).Select

End Sub

要么

Sub DynamicRange()
'Best used when your data does not have any entirely blank rows or columns

Dim sht As Worksheet
Dim StartCell As Range

Set sht = Worksheets("Sheet1")
Set StartCell = Range("D9")

'Select Range
  StartCell.CurrentRegion.Select

End Sub

要么

Sub DynamicRange()
'Best used when column length is static

Dim sht As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range

Set sht = Worksheets("Sheet1")
Set StartCell = Range("D9")

'Refresh UsedRange
  Worksheets("Sheet1").UsedRange

'Find Last Row
  LastRow = sht.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

'Select Range
  sht.Range("D9:M" & LastRow).Select

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.