Сравнение последнего столбца первой строки листа 2 с ячейкой F2 листа 1, если она совпадает, затем покажите msgbox или скопируйте диапазон F2, вставьте в лист2

#excel #vba #xlsx

Вопрос:

Я написал код, но он не работает, я хочу скопировать диапазон F2:F24 из листа 1 и вставить его в лист 2 с добавлением по столбцам (Column_count 1), только если значение ячейки F2 в листе 1 не должно быть равно последнему столбцу первой строки в листе 2, Если оно совпадает, то всплывающее окно msg как «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
 

Лист1
Лист2

Update_1: Перед копированием и вставкой диапазона 2:F24 из листа 1 следует сравнить значение F2 (см. Изображение 1) листа 1 и последний столбец первой ячейки из листа 2 (см. Изображение 2, это J1). Если его значение такое же, то msgpop как ошибка. если его значение отличается, скопируйте F2:F24 и вставьте в последний столбец первой строки листа 2

Комментарии:

1. должна ли это Sheets("sheet1").Cells(2, 6).Value быть динамическая строка? Иначе вы всегда проверяете одну и ту же ячейку.

2. Привет, мистер Кин, спасибо за комментарий. Он не динамичен, он всегда должен проверять одну и ту же ячейку перед копированием диапазона 2:F24. (Ячейка(2,6) (в ней указана дата, которая меняется каждый день)

Ответ №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") amp; " exists in Column " amp; 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") amp; " copied to column " amp; TargetColumn

End Sub
 

Комментарии:

1. Спасибо, сэр, спасибо вам за вашу поддержку