【问题标题】:VBA copies string and pastes scientific notationVBA 复制字符串并粘贴科学记数法
【发布时间】:2017-03-10 17:46:45
【问题描述】:

下面的代码有问题。 该代码应该复制长字符串。 源文件将此内容作为字符串。它大约有 50 个字符长。有数字和字母混合。

问题在于,对于某些粘贴的范围,它们采用科学计数法,其他函数无法查找。

这里是相关部分的代码

For i = 1 To Columns.Count        
    If Left(ActiveWorkbook.Sheets(1).Cells(7, i).Value, 4) = "1068" Then
        ActiveWorkbook.Sheets(1).Range(ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown)).Copy _
        Destination:=ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)                   
    End If
Next i

有没有办法只粘贴这样一个范围的值? 我尝试过使用“粘贴值”方法但收到 VBA 错误消息

【问题讨论】:

  • 假设您有多行数据,这段代码对我来说似乎很奇怪,因为您开始检查第 7 行,A 列的 1068,然后如果找到,则从上到下选择每个单元格并粘贴在 A 列的底部?然后你重复其余的列?
  • 是的,这很奇怪。但是我从中复制的报告是如此不规则,以至于它从第 3 行开始一次从第 5 行开始。所以7号是最接近的,肯定会同时满足数据
  • 如果报告是常规的,比如从第一行开始,我肯定会使用第二行以下
  • 很遗憾,您对问题的描述并未向任何人提供您想要做什么的细节。复制“长字符串”可能与复制单元格不同。请尝试举一个示例,其中您有 5 行,第 3 行和第 5 行在 A 和 C 列中有您的“1068”。您想为第一行复制什么,以及您想将它粘贴到哪里。然后为 Col. C. 解释同样的内容。
  • 您希望我如何展示它?附加信息是源文件是由其他宏转换为 xlsx 的 csv 文件

标签: vba excel


【解决方案1】:

而不是:

ActiveWorkbook.Sheets(1).Range(ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown)).Copy _
    Destination:=ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)                   

改为这样做:

ActiveWorkbook.Sheets(1).Range( _
          ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), _
          ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown) _
                              ).Copy

ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues  

Application.CutCopyMode = False

或者,我建议一些类似的东西来使代码更清晰:

Dim rngCopyFrom as Range
Dim rngCopyTo as Range
Set rngCopyFrom = ActiveWorkbook.Sheets(1).Range( _
              ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), _
              ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown) _
                              )
Set rngCopyTo = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
rngCopyFrom.Copy
rngCopyTo.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode=False 

【讨论】:

    【解决方案2】:

    更改单元格的格式。

    您可以使用以下方法更正它:

    .NumberFormat = "##0_)"
    

    以下是如何管理格式的示例:

    ActiveWorkbook.Sheets(1).Cells(7, i).NumberFormat = "##0_)"
    ActiveWorkbook.Sheets(1).Range(ActiveWorkbook.Sheets(1).Cells(7, i).End(xlUp), ActiveWorkbook.Sheets(1).Cells(7, i).End(xlDown)).NumberFormat = "##0_)"
    ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).NumberFormat = "##0_)"
    

    一旦格式改变,科学记数法就不应该显示了。

    【讨论】:

    • 谢谢,我会在试用后回复您
    • 嗨,对不起,它不起作用。它应该粘贴“10303389607BFTaavdj020170206Z009QWAR1”,但粘贴了“1.01E+41”
    • 我看到我所拥有的代码仅适用于没有文本的数字。但是,您所拥有的条件没有意义。检查单元格的引用。你可以把它写成一列。如果您仍然遇到问题,请随时发布包含这行数据的工作簿以及存在问题的代码段。
    【解决方案3】:

    将数字字符串转换为数值:

    t = ActiveWorkbook.Sheets(1).Range(Cells(7, I).End(xlUp), _
    ActiveWorkbook.Sheets(1).Cells(7, I).End(xlDown) _
    ).Value
    Set dest = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Cells(1).Resize(UBound(t))
    dest.NumberFormat = ""
    dest.FormulaLocal = t
    

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      相关资源
      最近更新 更多