2017-08-29 47 views
1

我对这一切都非常非常陌生,在编写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 

我想“小区1”是细胞的格式从“小区2”复制到是其中的值从何而来,以及“小区3”是函数插入的单元格。

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

谢谢! FFstack

+0

如果您直接在工作表中使用它作为UDF,它将不起作用。从工作表调用的函数不能更改单元格的格式,即使它本身也是如此。 –

+0

因此,我必须将此作为第二步?像插入信息,然后运行一个宏来解决它? – FFstack

+0

是的,但是然后一个子会比一个函数更好。 –

回答

0
Public Function CopyFormat(cell1 As Range, cell2 As Range) 
CopyFormat = Format(cell2, cell1.NumberFormat) 
End Function 
  • 当你做一个功能,无需REDIM在函数本身
  • 还定义的变量,在函数输出时,开启该功能所需结果的名称(即CopyFormat = ...
  • 当指的可变范围,无需报价(即Range("cell1")Range(cell1)代替)
  • 在功能复制/粘贴可能并不理想:此方法只抓住.NumberFormat财产和与Format功能

如果使用在Excel工作表的功能,它可以放在像=CopyFormat(A1,B1)应用它,否则如果在VBA,就离开了=

编辑:如果你想将粗体等复制过来,这对于一个函数来说是不可能的(如上面Scott所解释的)。这似乎是最简单的方式做到这一点是使用一个子与标准,就像这样:

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 

此子无法从工作表中调用,但可以通过VBA这样叫:

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

如果您有特定的单元格可以运行,您可以创建一个循环来完成整个列等。

+0

感谢您的有用提示!我认为我解释得不够好,数字格式正确,我想如何输出,但我需要将格式化,粗体和斜体复制到最终输出的单元格中。这就是为什么我开始在函数内复制/粘贴。 – FFstack

+0

哦,因为你不能使用一个函数(就像Scott说的)。我编辑了我的答案。 –

0

这将复制格式从小区1到小区2,然后小区2的值输出:

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 

这是否解决问题了吗?

+0

我一直希望将这个函数作为一个函数使用,所以我可以将它与表单中的其他公式一起使用,是否有方法来更改输出以便它是公式的返回值,然后我可以确定cell1和cell2式? – FFstack

+0

您可以使其成为函数并返回输出。 – JensS

相关问题