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

问题描述 投票:0回答:2

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

vba excel formatting
2个回答
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

这能解决您的问题吗?


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 中,则省略
=

编辑:如果您想要复制粗体等,则使用函数是不可能的(正如斯科特上面所解释的)。似乎最简单的方法是使用带有条件的 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

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

© www.soinside.com 2019 - 2024. All rights reserved.