将单元格的值和公式引用移动到该单元格

时间:2019-01-04 21:08:31

标签: excel vba

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

这是代码之前的表

Table before code manipulation

这是理想的结果,所有1和5的数字都移至1列,但公式仍引用该单元格。

Table after code manipulation

我写过:

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

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

是否有一种方法可以将公式中单元格的值和对单元格的引用移动到多张纸上?

2 个答案:

答案 0 :(得分:3)

您可以将值切为:

<?php
$array = 
array(
    0 => array (
        7 => array (
            'y' => 83,
            'label' => '2019-01-04 00:00:00'
        )
    ),
    1 => array (
        7 => array (
            'y' => 80,
            'label' => '2019-01-02 00:00:00'
        )
    ),
    2 => array (
        8 => array (
            'y' => 50,
            'label' => '2019-01-03 00:00:00'
        )
    )
);

$sorted = array();
foreach($array as $key => $value)
    $sorted[key($value)][] = $array[$key][key($value)];

print_r($sorted);

答案 1 :(得分:0)

为什么不复制公式? 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

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