【问题标题】:Comparing last column of first row in sheet2 with F2 cell of sheet1 if it matches then show msgbox or else copy F2 range paste to sheet2将 sheet2 中第一行的最后一列与 sheet1 的 F2 单元格进行比较,如果匹配则显示 msgbox,否则将 F2 范围粘贴到 sheet2
【发布时间】:2021-05-30 11:44:14
【问题描述】:

我写了一个代码,但它不工作 我想从 sheet1 复制一个范围 F2:F24 并将其粘贴到 Sheet2 中增量列(Column_count + 1),只有当 sheet1 中的单元格 F2 值不应等于 sheet2 中第一行的最后一列 如果匹配,则弹出 msgbox 为“check_the _cell” 这是我的代码

Sub copycolumns()

Dim TargetSheet As Object
Set TargetSheet = Sheets("sheet2")

Dim TargetColumn As Integer
Dim LastC As Long
TargetColumn = TargetSheet.Range("F1").CurrentRegion.Columns.Count + 1
LastC = TargetSheet.Cells(1, TargetSheet.Columns.Count).End(xlToLeft).Column

If LastC = Sheets("sheet1").Cells(2, 6).Value Then


MsgBox "check the cell"


ElseIf TargetSheet.Range("F1") = "" Then

    TargetColumn = 6
End If

Sheets("sheet1").Range("F2:F24").Copy

TargetSheet.Activate
TargetSheet.Cells(1, TargetColumn).Select

Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
       
        
Application.CutCopyMode = False


End Sub

Update_1:在从Sheet1复制和粘贴RangeF2:F24之前,它应该比较Sheet1的F2(参考Image1)的值和sheet2的第一个单元格的最后一列(参考Image2,它是J1)。如果它的值相同,则 msgpop 为错误。如果它的值不同,则复制 F2:F24 并粘贴到 sheet2 第一行的最后一列

【问题讨论】:

  • 这个Sheets("sheet1").Cells(2, 6).Value 应该是动态行吗?否则你总是检查同一个单元格。
  • 金先生,您好,感谢您的评论。它不是动态的,在复制粘贴 RangeF2:F24 之前,它应该始终检查同一个单元格。 (单元格(2,6)(它的日期每天都在变化)

标签: excel vba xlsx


【解决方案1】:

If LastC = Sheets("sheet1").Cells(2, 6).Value Then 行将列号与日期进行比较。试试

Option Explicit

Sub copycolumns()

    Const COPY_RANGE = "F2:F24"
    Const START_COL = 6 ' Target sheet F

    Dim wb As Workbook, ws As Worksheet, wsTarget As Worksheet
    Dim TargetColumn As Integer, LastColumn As Integer
    Dim dtNew As Date, dtLast As Date
    Dim rng As Range, rngTarget As Range

    ' source sheet 1
    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Sheet1")
    Set rng = ws.Range(COPY_RANGE)
    dtNew = rng.Cells(1, 1).Value ' F2

    ' target sheet 2 row 1
    Set wsTarget = wb.Sheets("Sheet2")
    LastColumn = wsTarget.Cells(1, Columns.Count).End(xlToLeft).Column
    
    ' check if exists
    If LastColumn >= START_COL Then
        dtLast = wsTarget.Cells(1, LastColumn)
        If dtNew = dtLast Then
            MsgBox Format(dtNew, "dd-mmm-yyyy") & " exists in Column " & LastColumn, vbCritical
            Exit Sub
        End If
    Else
        LastColumn = START_COL - 1
    End If
    TargetColumn = LastColumn + 1

    ' copy to target
    rng.Copy
    Set rngTarget = wsTarget.Cells(1, TargetColumn)
   
    rngTarget.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, _
              Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    'rngTarget.NumberFormat = "dd-mmm-yyyy"

    Application.CutCopyMode = False
    MsgBox Format(dtNew, "dd-mmm-yyyy") & " copied to column " & TargetColumn

End Sub

【讨论】:

  • 谢谢,先生,感谢您的支持
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
  • 2015-06-16
相关资源
最近更新 更多