【问题标题】:Adding a character at the end of text & increment letter A to B在文本末尾添加一个字符并将字母 A 递增到 B
【发布时间】:2018-09-11 17:03:03
【问题描述】:

我需要帮助的是将前面的单元格文本复制到其下方的单元格中在其末尾添加字母A,即在@987654328之前@ 在VP0007A 之后。这应该一直持续到所有空白单元格都增加并到达下一个VP0008

请看图片。如果我不太清楚,我很抱歉。

             之前:                         之后:
  

现在我有以下代码:

ActiveCell.Offset(1, 0).Select
Letter = "A" 
Letters = Chr(Asc(Letter) + 1) 
Number = ActiveCell.Offset(-1, 0).Value 
If ActiveCell.Value = Number & Letter _ Then 
    ActiveCell.Offset(1, 0).Select.Value Number & Number 
Else 
    ActiveCell.Value = Number & Letters 
End If 
Loop Until ActiveCell.Offset(1, 0).Value <> ""

【问题讨论】:

  • 到目前为止你做了什么,你到底在哪里有问题?
  • 我复制了错误的图像。如果您查看我重新上传的图像,它应该会显示给您。
  • ActiveCell.Offset(1, 0).Select Letter = "A" Letters = Chr(Asc(Letter) + 1) Number = ActiveCell.Offset(-1, 0).Value 如果 ActiveCell。 Value = Number & Letter _ Then ActiveCell.Offset(1, 0).Select.Value Number & Number Else ActiveCell.Value = Number & Letters End If 循环直到 ActiveCell.Offset(1, 0).Value ""跨度>
  • 请将有关您的问题的任何新信息(例如该代码)放入问题本身。鼓励您edit 它以添加更多信息。还要确保正确格式化代码。 (突出显示它并单击Edit Question 工具栏上的{ } 按钮。)此外,您可以在编写 cmets 后对其进行长达 5 分钟的编辑。
  • 抱歉,Ashlee,我是新手。

标签: vba excel loops increment


【解决方案1】:

试试这个简短的子程序。

Sub fillSubseries()
    Dim i As Long, a As Long, str As String

    With Worksheets("sheet4")
        For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
            If IsEmpty(.Cells(i, "A")) Then
                .Cells(i, "A") = str & Chr(a)
                a = a + 1
            Else
                a = 65
                str = .Cells(i, "A").Value2
            End If
        Next i
    End With
End Sub

【讨论】:

    【解决方案2】:

    试试下面的代码

    LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
    Letter = "A"
    For iLoop = 2 To LastRow
        If ActiveSheet.Range("A" & iLoop) = "" Then
            iValue = ActiveSheet.Range("A" & iLoop - 1)
            iiLoop = iLoop
            Do
                If ActiveSheet.Range("A" & iiLoop) = "" Then
                    ActiveSheet.Range("A" & iiLoop) = iValue & Letter
                    Letter = Chr(Asc(Letter) + 1)
                Else
                    Letter = "A"
                    Exit Do
                End If
                iiLoop = iiLoop + 1
            Loop
            iLoop = iiLoop - 1
        End If
    Next
    

    【讨论】:

    • Jeeped 你的代码给了我符号和 mmehta 在我签署变量后它不喜欢这一行 {iValue = ActiveSheet.Range("A" & iLoop - 1)} 但感谢你的帮助
    • mmehta 你的代码在我玩了一下之后才有效。当字母一直增加到 Z 时,我怎样才能用 AB 开始下一个单元格(下一个空白单元格)而不是符号?可以请教吗?
    • 很高兴知道。请将其标记为正确答案。谢谢
    【解决方案3】:

    此代码应处理有超过 26 个空白行并递增超过字母“Z”的情况。

    Sub FillBlanks()
    
    Dim lastRow As Long, cnt As Long, i As Long
    Dim prevItem As String
    Dim ws As Worksheet
    
    Set ws = ActiveSheet
    
    lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
    prevItem = ws.Cells(2, 1).Value
    cnt = 0
    
    For i = 2 To lastRow
    
      If ws.Cells(i, 1) = "" Then
        cnt = cnt + 1
        ws.Cells(i, 1).Value = prevItem & Split(Cells(1, cnt).Address(True, False), "$")(0)
      Else
        prevItem = ws.Cells(i, 1)
        cnt = 0
      End If
    
    Next i
    
    End Sub
    

    【讨论】:

      【解决方案4】:

      替代:

      Sub tgr()
      
          Dim ws As Worksheet
          Dim aData As Variant
          Dim sTemp As String
          Dim sLetter As String
          Dim i As Long, j As Long
      
          Set ws = ActiveWorkbook.ActiveSheet
          With ws.Range("A2", ws.Cells(ws.Rows.Count, "A").End(xlUp))
              If .Row < 2 Then Exit Sub   'No data
              aData = .Value
          End With
      
          For i = LBound(aData, 1) To UBound(aData, 1)
              If Len(Trim(aData(i, 1))) > 0 Then
                  sTemp = Trim(aData(i, 1))
                  j = 0
              Else
                  j = j + 1
                  sLetter = Replace(ws.Cells(1, j).Address(0, 0), 1, vbNullString)
                  aData(i, 1) = sTemp & sLetter
              End If
          Next i
      
          ws.Range("A2").Resize(UBound(aData, 1)).Value = aData
      
      End Sub
      

      【讨论】:

        【解决方案5】:

        如果您需要纯公式解决方案,您可以尝试以下步骤(数据的第一行应该是A2,而不是A1):

        1. 首先我们需要一个虚拟列来填充空白行。在 B2 上使用以下公式并将其复制到 A 列的最后一行:

          =IF(A2<>"",A2,B1)
          
        2. 然后我们将在 C 列上创建最终值。将以下公式添加到 C2 并复制下来:

          =IF(A2<>"",A2,IF(ISNUMBER(VALUE(RIGHT(C1,1)))=TRUE,C1&"A",B2&CHAR(CODE(RIGHT(C1,1))+1)))
          

        基本上,我们首先在 B 列上用重复值填充空白行。如果 Col:A 不为空,则将 Col:A 值复制到 Col:C。如果 Col:A 为空白且上排 (Col:C) 值的最后一个字符是数字,我们将“A”添加到该值。如果最后一个字符是一个字母,我们将下一个字母与 Col:B 值连接起来。

        当一切正常时,你应该有类似下面的东西:

        【讨论】:

        • 安德鲁你的 vba 代码就像一个魅力。非常感谢您和所有帮助过我的人。
        猜你喜欢
        • 2021-02-14
        • 2013-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-13
        • 2023-02-07
        • 1970-01-01
        • 2017-02-07
        相关资源
        最近更新 更多