从一个单元复制格式,从另一个单元复制值的功能?

时间:2017-08-29 16:45:20

标签: excel vba excel-vba formatting

我对这一切都非常非常新,当谈到编写VBA功能等时,这个社区似乎非常有帮助。我一直在网站上寻找类似的问题,并且找不到任何与之相关的问题。我的特殊问题。

我需要创建一个函数来复制一个单元格的格式和另一个单元格中的值,并将它们组合成一个输出。

对于某些上下文,我有一张表格,它找到格式为[00:00:00]的数字,将它们转换为总时间值(hh:mm:ss)并为每个值添加一个公共值。并非所有初始值都是数字,其他值是文本,需要在最终输出中保留其粗体/斜体属性。所以我正在寻找的是一种从单元格中复制值的方法(比方说G2)和来自不同单元格的格式(比方说A2),并将它们组合起来进行最终输出。

我糟糕的编码技巧产生了这个:

Function Copy_Format(cell1, cell2)
    Dim cell1 As String, cell2 As String
    Range("cell1").Copy
    Range("cell2").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
    Range("cell2").Copy
    Range("output").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
End Function

我希望“cell1”成为复制格式的单元格,“cell2”是值的来源,“cell3”是函数插入的单元格。

任何和所有帮助将不胜感激!总体目标是使这一过程分为一步,因为这将最终分发给超过一百人,几乎没有Excel经验。

谢谢! FFstack

2 个答案:

答案 0 :(得分:0)

Public Function CopyFormat(cell1 As Range, cell2 As Range)
CopyFormat = Format(cell2, cell1.NumberFormat)
End Function
  • 执行函数时,无需重新调整函数本身定义的变量
  • 此外,在函数中输出时,将函数名称设置为所需结果(即CopyFormat = ...
  • 引用范围内的变量时,不需要引号(即Range(cell1)代替Range("cell1")
  • 在函数中复制/粘贴可能并不理想:此方法只是抓取.NumberFormat属性并将其应用于Format函数

如果在Excel工作表上使用该功能,可以像=CopyFormat(A1,B1)那样放置,否则如果在VBA中,只需忽略=

编辑:如果您想要复制的粗体等,这是功能无法实现的(如上所述)。似乎最简单的方法是使用带有标准的Sub,如下所示:

Sub Copy_Format(cell1 As Range, cell2 As Range, cell3 As Range)
Dim sel As Range
Set sel = Selection

Application.ScreenUpdating = False

cell1.Copy
cell3.PasteSpecial Paste:=xlPasteFormats

cell2.Copy
cell3.PasteSpecial Paste:=xlPasteValues

sel.Activate
Application.CutCopyMode = False

Application.ScreenUpdating = True

End Sub

无法从工作表中调用此Sub,但可以通过VBA调用此类:

Sub test()
Call Copy_Format(Range("A1"), Range("B1"), Range("C1"))
End Sub

如果你要运行特定的单元格,你可以循环来完成整个列等等。

答案 1 :(得分:0)

将格式从cell1复制到cell2,然后将cell2的值复制到输出:

Function Copy_Format(cell1, cell2, output)
    cell1.Copy
    cell2.Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

    cell2.Copy
    output.Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

    Copy_Format = output
End Function

这会解决您的问题吗?