#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
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. Спасибо, сэр, спасибо вам за вашу поддержку