【问题标题】:Excel list VBA concatenateExcel列表VBA连接
【发布时间】:2018-04-24 10:27:55
【问题描述】:

下图显示了我拥有的 Excel 列表。 A-C 列是我拥有的内容。 D 列和 E 列是我正在寻找的结果。我已经手动输入了它以显示结果。

目前我的代码如下所示:

Option Explicit

Sub New_SKU()

Dim wb As Workbook
Dim ws As Worksheet

'figure out how far down data goes
Dim endrow As Long
Dim currentrow As Long
Dim basename

Set wb = ThisWorkbook
Set ws = wb.Sheets("Blad1")

With ws
    endrow = .Cells(.Rows.Count, "A").End(xlUp).Row

   'always start in the correct column
    .Cells(.Cells(1, "B").End(xlDown).Row, "B").Activate

   'loop through all data
    Do While ActiveCell.Row < endrow

       'loop through empty cells and set formula if cell isn't empty
        Do While ActiveCell.Row <= endrow

          'if next cell isn't empty, isn't past the end of the list, go to outer loop
            If ActiveCell.Formula <> "" And ActiveCell.Offset(1, 0).Formula = "" And ActiveCell.Row <= endrow Then

                basename = Selection.Address

                ActiveCell.Offset(0, 2).Formula = "=CONCATENATE(" & basename & ",""-""," & "C" & Selection.Row & ")"
'                ActiveCell.Offset(0, 3).Formula = "=" & basename & ""
                ActiveCell.Offset(1, 0).Activate

'            If ActiveCell.Formula = "" And ActiveCell.Offset(0, 1).Formula <> "" And ActiveCell.Row <= endrow Then
'                ActiveCell.Offset(0, 2).Formula = "=CONCATENATE(" & basename & ",""-""," & "C" & Selection.Row & ")"
'                ActiveCell.Offset(0, 3).Formula = "=" & basename & ""
'                ActiveCell.Offset(1, 0).Activate

'            If ActiveCell.Formula = "" And ActiveCell.Offset(0, 1).Formula <> "" And ActiveCell.Row <= endrow Then
'                ActiveCell.Offset(0, 2).Formula = "=CONCATENATE(" & basename & ",""-""," & "C" & Selection.Row & ")"
'                ActiveCell.Offset(0, 3).Formula = "=" & basename & ""
'                ActiveCell.Offset(1, 0).Activate

'            If ActiveCell.Formula = "" And ActiveCell.Offset(0, 1).Formula <> "" And ActiveCell.Row <= endrow Then
'                ActiveCell.Offset(0, 2).Formula = "=CONCATENATE(" & basename & ",""-""," & "C" & Selection.Row & ")"
'                ActiveCell.Offset(0, 3).Formula = "=" & basename & ""
'                ActiveCell.Offset(1, 0).Activate

'            If ActiveCell.Formula = "" And ActiveCell.Offset(0, 1).Formula <> "" And ActiveCell.Row <= endrow Then
'                ActiveCell.Offset(0, 2).Formula = "=CONCATENATE(" & basename & ",""-""," & "C" & Selection.Row & ")"
'                ActiveCell.Offset(0, 3).Formula = "=" & basename & ""
'                ActiveCell.Offset(1, 0).Activate

'            If ActiveCell.Formula = "" And ActiveCell.Offset(0, 1).Formula <> "" And ActiveCell.Row <= endrow Then
'                ActiveCell.Offset(0, 2).Formula = "=CONCATENATE(" & basename & ",""-""," & "C" & Selection.Row & ")"
'                ActiveCell.Offset(0, 3).Formula = "=" & basename & ""
'                ActiveCell.Offset(1, 0).Activate

           Else
               Exit Do
           End If
'           End If
'           End If
'           End If
'           End If
'           End If
        Loop
     Loop

End With

End Sub

我正在重用之前收到帮助的类似问题的代码。

我的第一个问题:

如果取消注释 If 语句,当我启动脚本时,Excel 会变为空白(白色)并立即停止。

在当前状态下运行脚本(If-satements 被注释掉),我可以看到我在单元格 D2 中得到了正确的结果,然后选择了单元格 B3(请记住 D 或 E 列中没有结果),然后屏幕变为空白,Excel 停止。我在 E 列没有得到任何结果。

由于大小不同(C 列),它可以在 2-3 到 5-6 之间变化。

我无法弄清楚为什么我不会在 E 列中收到结果,以及为什么它停止并变白。

有什么想法吗?

【问题讨论】:

  • 有点难以理解,但我认为更容易填补空白,然后一直使用连接公式。你甚至不需要 VBA。
  • 详细说明一下,代码有点难以理解并且可能难以解开的原因之一是使用了 Select 和 Activate。尽可能避免,通常是这样。

标签: excel vba


【解决方案1】:

根据上面的评论,这是一种不同的方法

Sub x()

Dim r As Long

Columns(2).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=r[-1]c"

For r = 2 To Range("A" & Rows.Count).End(xlUp).Row
    Cells(r, 4).Value = Cells(r, 2).Value & "-" & Cells(r, 3).Value
    Cells(r, 5).Value = Cells(r, 2).Value
Next r

Columns(2).SpecialCells(xlCellTypeFormulas).ClearContents

End Sub

【讨论】:

    【解决方案2】:

    如果您对非 VBA 答案没问题,您可以将此公式粘贴到 D2 中并复制下来:

    =IF(B2="",LEFT(D1,FIND("-",D1)-1)&"-"&C2,B2&"-"&C2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 2018-08-18
      • 2016-08-30
      • 2020-12-22
      • 1970-01-01
      相关资源
      最近更新 更多