VBAmacros:公式是基于更改位置的列

我试图调整我的macros,以便它创build一个列,总是改变立场的特定列旁边。 在下面的macros中,它只是左边6列的绝对参考。 但是,这不会总是如此。 我应该通过在顶行中find列名来设置它吗?

macros基本上创build一个新的列,如果它是一个重复,则放置一个IF语句,然后设置条件格式以突出显示所有“1”的值。 对不起,如果我没有解释清楚!

Sub test() Columns("L:L").Select Selection.Insert Shift:=xlToRight Range("L2").Select ActiveCell.FormulaR1C1 = "=IF(RC[-6]=R[-1]C[-6],R[-1]C+1,1)" Range("L2").Select Selection.Copy Range("K2").Select Selection.End(xlDown).Select ActiveCell.Offset(0, 1).Select Range(Selection, Selection.End(xlUp)).Select ActiveSheet.Paste Application.CutCopyMode = False Calculate Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=1" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Color = -16383844 .TintAndShade = 0 End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 13551615 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False End Sub 

我有一个工作代码,但它需要你的数据在表中。 这是dynamic操作和引用数据(列,行等)的最佳方式。

另外我非常依赖ListObject方法。 它确实处理表格。

 Public Sub InsertColumn(Optional columnName As String, Optional BeforeORAfter As String) Dim loTableName As ListObject Dim loColumn As ListColumn Dim newColDest As Long 'Handles user input if they desire the column inserted before or after Select Case UCase(BeforeORAfter) Case Is = "BEFORE" newColDest = 0 'Inserts column and moves reference column right Case Else newColDest = 1 'Inserts column to the right of reference column End Select 'Ensures the user selects a reference column name Select Case columnName Case Is = "" columnName = InputBox("Enter column name to be referenced.", "Enter Column Name") Case Else End Select 'Sets the ListObject as the table. Set loTableName = Range("TableName").ListObject With loTableName On Error GoTo InsertError 'Exits sub in case the column couldn't be found .ListColumns.Add (.ListColumns(columnName).Index + newColDest) End With Exit Sub InsertError: 'Most likely error is user typed the column header incorrectly. MsgBox "Error creating column. Ensure a correct reference column was chosen", vbExclamation + vbOKOnly, "Insert Error" End Sub 

有任何疑问或问题,请让我知道。

这下面将是你可以使用的东西(它会要求列search和执行您的录制的macros中的行动…检查我的网站http://multiskillz.tekcities.com/k2500_0vbaMenu.html

 Sub test_modified() 'worksheet workbook object Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets(1) 'range object to select a column Dim fRng As Variant fRng = Application.InputBox(Prompt:="value to find", Title:="InputBox Method", Type:=2) 'range object to find the column Dim colRng As Range Set colRng = ws.Rows(1) 'find column Dim fcol As Range Set fcol = colRng.Find(fRng, LookIn:=xlValues, lookat:=xlPart, MatchCase:=False) 'convert the column address to a number Dim colNb As Byte colNb = fcol.Column 'going on from your recorded macro 'Columns("L:L").Select ws.Columns(colNb).Select Selection.Insert Shift:=xlToRight Range("L2").Select ActiveCell.FormulaR1C1 = "=IF(RC[-6]=R[-1]C[-6],R[-1]C+1,1)" Range("L2").Select Selection.Copy Range("K2").Select Selection.End(xlDown).Select ActiveCell.Offset(0, 1).Select Range(Selection, Selection.End(xlUp)).Select ActiveSheet.Paste Application.CutCopyMode = False Calculate Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=1" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Color = -16383844 .TintAndShade = 0 End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 13551615 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False End Sub 

干杯帕斯卡