Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 复制的区域搜索行中的下一个空单元格,但跳过合并的单元格_Vba_Excel_Merge_Excel 2007_Range - Fatal编程技术网

Vba 复制的区域搜索行中的下一个空单元格,但跳过合并的单元格

Vba 复制的区域搜索行中的下一个空单元格,但跳过合并的单元格,vba,excel,merge,excel-2007,range,Vba,Excel,Merge,Excel 2007,Range,我见过很多人谈论这个问题,但更多的是从将合并的单元格复制到单个单元格的角度。我有一个过程,它从工作簿中获取一个范围,打开第二个工作簿并尝试将其粘贴到指定行的下一个空白单元格中 Public Sub BankBalances() Dim fname As String Dim fname2 As String Dim mt As String, yr As String 'get the selected month mt = MonthBox.Value 'get the selected ye

我见过很多人谈论这个问题,但更多的是从将合并的单元格复制到单个单元格的角度。我有一个过程,它从工作簿中获取一个范围,打开第二个工作簿并尝试将其粘贴到指定行的下一个空白单元格中

Public Sub BankBalances()
Dim fname As String
Dim fname2 As String
Dim mt As String, yr As String
'get the selected month
mt = MonthBox.Value
'get the selected year
yr = YearBox.Value
'set the file path to the selected year, month and the saving format
fname = yr & mt & "DB" & ".xlsx"
'set the file path to the selected year, month to open the trial balance sheet
fname2 = yr & mt & "TB" & ".xlsx"
'get the ranges
Dim rng1 As Range
Dim rng2 As Range
Set rng1 = Workbooks(fname2).Worksheets("excel").Range("I100")
'check for the next empty cell in row 55
Set rng2 = Workbooks(fname).Worksheets("UK monthly dashboard").Cells(55, Columns.Count).End(xlToLeft).Offset(0, 1)
'set the new range to hold the data from the original range
rng2.Value = rng1.Value
'set the result to format according to the other information in the workbook
rng2.Value = Round(rng1.Value / 1000, 0)

End Sub
上述代码将数据粘贴到未合并行的下一个空白单元格中。我需要它能够粘贴到合并的单元格中

我想知道的是,是否有一种方法可以使用VBA将数据放入合并的单元格中,或者是否需要执行单独的过程来检查合并的单元格,取消合并,然后在数据跨行复制后将其合并

如果是这样的话,我是否可以像检查下一个空单元格一样,检查它是否被合并,然后执行取消合并并再次合并


如果我理解你说的话,那么是的,但是如果我可以改变你的例子,我希望把A1的内容放进合并的D1:D2中。因此,它的值是一个单元合并成两个单元——4小时前的JamesDev

这就是你想要的吗

Sub Sample()
    Dim Rng1 As Range
    Dim Rng2 As Range
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        Set Rng1 = .Range("A1")
        Set Rng2 = .Range("D1:D2")

        '~~> Check if cells are merged
        If Rng2.MergeCells Then
            '~~> If merged then write to first cell
            Rng2.Cells(1, 1).Value = Rng1.Value
        Else
            Rng2.Value = Rng1.Value
        End If
    End With
End Sub

可能重复?这是类似的,但因为这是一个问题,只是让范围复制它不是一个重复。第二,这也是我的问题,第三,这只是为了看看是否有人提出了任何东西,但我很高兴这一个被关闭。如果你复制说单元格A1:A5,你有D1:D5合并,那么你想A1:A5的内容“在”合并的单元格中吗?如果我明白你说的话,那么是的,但是如果我可以改变你的例子,我想把A1的内容放到D1:D2中合并。所以它的值是一个单元格合并成两个单元格,你需要合并单元格吗?我从不使用合并单元格,而是使用“在选定区域中居中”的格式,即单元格/对齐/水平/在选定区域中居中。这正是我想要的……但它还没有足够奇怪地解决问题,它仍然跳过单元格并将其放置在所需目标的右侧。单元格中都有破折号,我以前没怎么想过,但检查后,这意味着单元格中的值为0。我已经尝试过删除它,看看它是否有效,但仍然无效。因此,删除所有格式并删除值,这样就可以工作了,所以我很乐意将其标记为正确答案。查看范围以查看是否存在0、删除它并删除所有格式、复制范围并重新应用格式是否简单?