Как очистить столбец и снова заполнить данные, если значение меньше старого значения | excel | VBA | - PullRequest
0 голосов
/ 26 мая 2019

У меня есть Excel

Лист 1

Sheet1

Лист 2

Sheet2

Значение листа 1 => F5 => '50' => указано на листе 2 => E4 => '50'

Когда я ввожу значение в лист 1 вместо F5 => Значение получает Изменение в Листе 2 => E4 => Автоматически

с использованием приведенного ниже кода. ДАННЫЕ ПЕЧАТАНЫ много раз. Мой код

модуль: mac

Dim ws As Worksheet
Dim rDest As Range
Dim lCount As Long
Dim sValue As String

Set ws = ThisWorkbook.Sheets("Sheet2")
Set rDest = ws.Range("I2")

With ws.Range(rDest, ws.Cells(ws.Rows.Count, rDest.Column).End(xlUp))
    If .Row >= rDest.Row Then .ClearContents
End With

lCount = Val(ws.Range("E4").Value)
sValue = ws.Range("E8").Value

If lCount > 0 Then rDest.Resize(lCount) = sValue

End Sub

Лист 1 Код:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Sheets("Sheet1").Range("F5"), Target) Is Nothing Then
       Call mac
    End If
End Sub

Это выход

Как показано ниже:

https://paste.pics/494c856d2908a83ca031ee20bb706a09

Мой код выше работает отлично в соответствии с вышеупомянутым выводом, но как некоторые недостатки в нем

Предположим,

Условие 1:

если введенное значение равно «50» =>, то данные в столбцах «I» и «J» будут напечатаны 50 раз => вправо [Perfect]

Условие 2:

, если введено значение '60' =>, то данные в Coulmn "I" и "J" получатдобавляет к предыдущим данным, которые как "50" => 50 + 10 => 60 => это правильно [отлично]

Условие 3:

Предположим,Столбец «I: J» уже как DATA => до диапазона «60», если введенное значение меньше, чем «60», как «30», тогда обновление должно произойти только 30 раз в столбце «I: J». Данные должны быть напечатаныНо ничего не происходит, добавление не происходит, но очистка данных не происходит, если диапазон меньше, чем старое значение

Там может быть какой-то механизм, такой как

, если Count равен 50 =>print => I, J

, если Count больше 50 => добавить I, J

, если Count меньше 50 => очистить столбец I, J и затем => заполнить столбецЯ, J

Как мне добиться этого механизма?

1 Ответ

0 голосов
/ 27 мая 2019

Насколько я могу судить, ваш код работает ... это просто вопрос расширения диапазона, если я правильно понял, что вы спрашиваете.См. Комментарии только для двух изменений, внесенных в ваш код:

Sub mac()
Dim ws As Worksheet
Dim rDest As Range
Dim lCount As Long
Dim sValue As String

Set ws = ThisWorkbook.Sheets("Sheet2")
Set rDest = ws.Range("I2")

With ws.Range(rDest, ws.Cells(ws.Rows.Count, rDest.Column + 1).End(xlUp)) 'Add another column to your selection here
    If .Row >= rDest.Row Then .ClearContents
End With

lCount = Val(ws.Range("E4").Value)
sValue = ws.Range("E8").Value

If lCount > 0 Then rDest.Resize(lCount, 2) = sValue 'Resize to 2 columns instead of the default 1.

End Sub

PS: пожалуйста, дайте мне знать, если я неправильно понял ваш запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...