【问题标题】:Move a cell's value and a formula reference to that cell将单元格的值和公式引用移动到该单元格
【发布时间】:2019-02-03 09:08:58
【问题描述】:

我在工作簿中有几张工作表,如果列表中有多个数字,我需要将相邻列移到 1 以上。此相邻列正在工作表中的公式中使用。我希望公式引用其新位置的值。

这是代码前的表格

这是理想的结果,其中所有 1 和 5 的数字都移动到 1 列上,但公式仍然引用单元格。

我写过:

For i = 1 To WS_Count
    sheet_name = ActiveWorkbook.Worksheets(i).Name
    row_count = Worksheets(sheet_name).Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row

    For x = 11 To row_count
        cell = ActiveWorkbook.Worksheets(sheet_name).Cells(x, 1)
        If cell = "" Then GoTo NextIteration

        If ActiveWorkbook.Worksheets(sheet_name).Cells(x - 1, 1) = ActiveWorkbook.Worksheets(sheet_name).Cells(x, 1) Or ActiveWorkbook.Worksheets(sheet_name).Cells(x + 1, 1) = ActiveWorkbook.Worksheets(sheet_name).Cells(x, 1) Then
            ActiveWorkbook.Worksheets(sheet_name).Cells(x, 5) = ActiveWorkbook.Worksheets(sheet_name).Cells(x, 4)
            ActiveWorkbook.Worksheets(sheet_name).Cells(x, 4).ClearContents
        End If

NextIteration:
    Next x
Next i

剪切在多张纸上无法正常工作。它没有正确移动到新工作表。

有没有办法将单元格的值和对单元格的引用从公式中移动到多个工作表上?

【问题讨论】:

  • 您似乎正在将值从一个单元格分配到另一个单元格。这样做只会用静态值覆盖任何公式(在目标单元格中​​)。相反,您可能想使用Range.Cut

标签: excel vba


【解决方案1】:

您可以将值剪切过来:

Dim ws As Worksheet, i As Long, x As Long, row_count As Long, v

For i = 1 To WS_Count

    Set ws = ActiveWorkbook.Worksheets(i)
    row_count = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _
                 SearchDirection:=xlPrevious, LookIn:=xlValues).Row

    For x = 11 To row_count
        v = ws.Cells(x, 1).Value
        If Len(v) > 0 Then
            If ws.Cells(x - 1, 1) = v Or ws.Cells(x + 1, 1) = v Then
                ws.Cells(x, 4).Cut ws.Cells(x, 5)
            End If
        End If
    Next x
Next i

【讨论】:

  • 谢谢。我在提交问题之前尝试过这个,但是我设置活动工作簿的方式也让我很困惑。这效果很好。
【解决方案2】:

为什么不复制公式? https://docs.microsoft.com/en-us/office/vba/api/excel.range.formula

算法

for.... 
   if ....  
      You can copy formula to the adjacent cell, then empty the cell

如果直接将公式从一个单元格复制到另一个单元格,公式不会改变

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2012-08-22
    • 1970-01-01
    相关资源
    最近更新 更多