gpt4 book ai didi

Excel宏重复IF和Else

转载 作者:行者123 更新时间:2023-12-02 10:49:29 30 4
gpt4 key购买 nike

我目前正在编写一个 Excel VBA 宏脚本,其中将对事件单元格进行简单的 TRUE 或 False 测试。我的问题是,直到列表末尾我才能使其正常工作。它只运行一次并结束程序。我需要这个 VB 脚本来执行 IF 和 ELSE 测试,直到列表底部。

问题描述:

假设我有一个从 A1 到 A9999 的日期列表,在它旁边 (F1:F9999) 还有一个带有文本的列表。 F1:F9999 列表仅包含两个值。 (a) 相同日期和 (b) 不同。

  1. 在列表 F1:F9999 中执行 True 或 False 测试。

  2. 如果事件单元格值等于文本“SAME DATE”(TRUE),它将忽略并移至列表中的下一项,然后再次执行编号 1。

  3. 如果事件单元格值等于文本“SAME DATE”(FALSE),它将在其上方插入一行,然后移至列表中的下一项,然后再次执行编号 1
  4. TRUE 或 FALSE 测试将运行到列表末尾。
  5. 如果 TRUE 或 FALSE 测试到达列表底部,则该测试将停止运行。
  6. 顺便说一句,列表中的项目数量不一致。我只是将 F1:F9999 放在那里作为示例。

这是我的代码!

Sub IFandElseTest()
If ActiveCell.Value = "Same Date" Then
Range(Selection, Cells(ActiveCell.Row, 1)).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveCell.Offset(1, 0).Select
Else:
ActiveCell.Offset(1, 0).Select
Range(Selection, Cells(ActiveCell.Row, 1)).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End If


End Sub

enter image description here

如果您能在这方面帮助我,我将不胜感激。

最佳答案

尝试一下。

说明:

  1. 您应该避免使用 .Select/ActiveCell 等。您可能希望看到此 LINK
  2. 处理最后一行时,最好不要对值进行硬编码,而是动态查找最后一行。您可能想看看这个LINK
  3. 使用对象,如果当前工作表不是您要使用的工作表怎么办?
  4. 下面的 FOR 循环将从下面遍历该行并向上移动。

代码:

Sub Sample()
Dim ws As Worksheet
Dim LRow As Long, i As Long
Dim insertRange As Range

'~~> Chnage this to the relevant sheet
Set ws = ThisWorkbook.Sheets("Sheet1")

'~~> Work with the relevant sheet
With ws
'~~> Get the last row of the desired column
LRow = .Range("E" & .Rows.Count).End(xlUp).Row

'~~> Loop from last row up
For i = LRow To 1 Step -1
'~~> Check for the condition
'~~> UCASE changes to Upper case
'~~> TRIM removes unwanted space from before and after
If UCase(Trim(.Range("E" & i).Value)) = "SAME DATE" Then
'~~> Insert the rows
.Rows(i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End If
Next i
End With
End Sub

屏幕截图:

enter image description here

评论跟进

It really worked! BUT, one final modification. in your code: Set ws = ThisWorkbook.Sheets("Sheet1") Is it possible is you can set the WS as the Active worksheet. The reason of this is because the name of the worksheet unique and not consistent also.

就像我提到的,在上面的第一个链接以及评论中,不要使用 Activesheet。使用不改变的工作表的CodeNames。请参阅下面的屏幕截图。

enter image description here

Blah Blah 是您在工作表选项卡中看到的工作表的名称,但 Sheet1 是不会更改的 CodeName。即,您可以将工作表的名称从 Blah Blah 更改为 Kareen,但在 VBA 编辑器中,您会注意到 Codename 没有”不改变:)

更改代码

Set ws = ThisWorkbook.Sheets("Sheet1")

'~~> Replace Sheet1 with the relevant Code Name
Set ws = [Sheet1]

关于Excel宏重复IF和Else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18820728/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com