函数从一个单元格复制格式,从另一个值?

对于这一切我都是非常新颖的,而这个社区在编写VBA函数等方面似乎非常有帮助。我一直在寻找类似的问题,并且找不到处理我的特定问题的任何事情。

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

对于某些情况下,我有一个工作表,find格式化为[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

这将格式从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 

这是否解决您的问题?

 Public Function CopyFormat(cell1 As Range, cell2 As Range) CopyFormat = Format(cell2, cell1.NumberFormat) End Function 
  • 当你做一个函数时,不需要ReDim函数本身定义的variables
  • 另外,在函数中输出时,将函数的名称设置为所需的结果(即CopyFormat = ...
  • 当引用范围内的variables时,不需要引号(即Range(cell1)而不是Range("cell1")
  • 在函数中复制/粘贴可能并不理想:此方法只是获取.NumberFormat属性并将其应用于Format函数

如果在Excel工作表上使用函数,可以将其放在like =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 

如果你有特定的单元格运行,你可以做一个循环来做整个列,等等。