【问题标题】:Excel 2016 copy everything after the first character which repeats itself in excel VBAExcel 2016在excel VBA中重复的第一个字符之后复制所有内容
【发布时间】:2017-04-16 02:11:07
【问题描述】:

我有每行的数字序列,我想copy and paste 该单元格旁边每个序列的最后一个数字。该序列包含两个点,我想复制并粘贴出现在第一个点之后的所有内容。

检查以下示例:

Sequence: "12345678.11.11"
Result should be: "11.11"

在不同的单元格中。

对此有任何想法吗? VBA 编码或普通的 Excel 工作表编码都可以。我稍后会插入VBA

感谢您的帮助。 问候, 提伯尔

【问题讨论】:

  • 嘿!感谢你们俩。这两个答案都非常有价值。如果范围总是在变化怎么办?我怎样才能用循环解决这个问题?只要在该特定列中找到数据,我就希望循环运行?

标签: excel vba extract


【解决方案1】:

试试这个(注释的)代码

Option Explicit

Sub main()
    Dim cell As Range
    With Worksheets("MySheet") '<--| change "MySheet" to your actual sheet name
        For Each cell In .Range("A1:A10").SpecialCells(xlCellTypeConstants) '<--| change "A1:A10" to your actual range with dotted numbers
            cell.Offset(, 1) = "'" & Split(cell, ".")(1) & "." & Split(cell, ".")(2)'<--| write last to dotted numbers in cell adjacent to current one
        Next cell
    End With
End Sub

【讨论】:

  • 嘿!感谢您的回答非常有价值。如果范围总是在变化怎么办?我怎样才能用循环解决这个问题?只要在该特定列中找到数据,我就希望循环运行?
  • 我试过这个。 :Sheets("KKK").Range("AF" & j) = "=RIGHT(KKK!R4C32,LEN(AE)-FIND(".",AE))" 当我把它交给 VBA 时,它给出了在 FIND 之后返回点的编译错误。它会从 AF 列中取出信息,并放入 AE 列。它被放入一个循环中,并在没有更多数据时结束。
  • 循环已经存在于 For Each cell In... 中。并且.SpecialCells(xlCellTypeConstants) 已经注意仅在调用它的范围内考虑不为空单元格。因此,您只需将 .Range("A1:A10") 更改为 .Columns("AF") 即可完成
【解决方案2】:

如果它始终是第一个句号,那么您可以在电子表格中使用以下函数而不是 VBA(单元格 A1 上的示例):

=RIGHT(A1, (LEN(A1) - FIND(".", A1)))

【讨论】:

  • 谢谢,效果很好!!!我也会尝试在 VBA 中弄清楚。让我们看看它是否有效。
【解决方案3】:

我不建议使用 VBA,因为工作表函数非常适合这种事情:

=MID(A1,FIND(".",A1)+1,100))
=REPLACE(A1,1,FIND(".",A1),"") 

...只是两个尚未给出的例子


如果您想尝试使用 VBA,请将此功能添加到您的 VBA 编辑器中的模块中:

Function GetRight(rng As Range)
    GetRight = Right(rng.value, Len(rng.value) - InStr(rng.value, "."))
End Function

...然后像这样简单地使用工作表上的函数

=GetRight(A1)

你可以像普通函数一样上下拖动它

编辑

如果您希望 VBA 查找 A 列中的所有值并将所需的输出返回到 B 列,这里是完整代码

Sub GetAllRight()
    Dim rng As Range, r As Range

    With ThisWorkbook.Worksheets("Sheet1")
        Set rng = .Range(.Range("A1"), .Range("A" & .Rows.Count).End(xlUp))
    End With
    For Each r In rng
        r.Offset(0, 1).Value = GetRight(r)
    Next r
End Sub

Function GetRight(rng As Range) As String
    GetRight = Right(rng.Value, Len(rng.Value) - InStr(rng.Value, "."))
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    相关资源
    最近更新 更多