AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 76927866
Accepted
Seb358
Seb358
Asked: 2023-08-18 16:59:40 +0800 CST2023-08-18 16:59:40 +0800 CST 2023-08-18 16:59:40 +0800 CST

循环遍历具有更改单元格地址的列

  • 772

当我有一些单元格地址发生变化而另一些单元格地址没有变化时,如何使循环工作。(Excel,VBA)

所以我有一段代码想要运行一列(BG9:BG500),但我不确定如何让循环函数运行所有单元格以及如何编写它,以便它只更改单元格需要更改的地址,同时保留需要保持静态的地址。

我绝对是 excel 宏和 vba 的初学者,所以我目前所知道的一切都来自于谷歌搜索如何做以及通过反复试验自己解决问题,所以我可能不知道一些关于 vba 的我应该知道的事情。

这是我想要在本专栏中运行的代码。

If Range("B9") = Range("BT28") Then
Range("BR58:CA58").Select
Selection.Copy
Range("BG9").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If

需要更改的两个单元地址是(“B9”)和(“BG9”),例如:第一次运行是 9,第二次运行是 10,依此类推。我尝试过使用我在网上找到的循环函数

Dim iCell As Range
Dim iRange1 As String
Dim iRange2 As String
Dim rangeName As String

iRange1 = ActiveCell.Address
iRange2 = ActiveCell.Address
rangeName = iRange1 & ":" & iRange2

For Each iCell In Range(rangeName).Cells

但说实话,我不知道这里发生了什么,并且希望获得有关此问题的任何信息/帮助,这是我目前的完整子内容。

Sub IMPORTTOLIST()

Dim iCell As Range
Dim iRange1 As String
Dim iRange2 As String
Dim rangeName As String

iRange1 = ActiveCell.Address
iRange2 = ActiveCell.Address
rangeName = iRange1 & ":" & iRange2

For Each iCell In Range(rangeName).Cells

If Range(iRange1) = Range("BT28") Then
Range("BR58:CA58").Select
Selection.Copy
Range(iRange2).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If

Next iCell

End Sub
excel
  • 2 2 个回答
  • 31 Views

2 个回答

  • Voted
  1. Best Answer
    Kazdegotepu
    2023-08-18T17:44:59+08:002023-08-18T17:44:59+08:00

    不确定我理解是否正确,但如果你想更改该代码:

    If Range("B9") = Range("BT28") Then
    Range("BR58:CA58").Select
    Selection.Copy
    Range("BG9").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    End If
    

    这样它就会将 (B9, BG9) 更改为 (B10,BG10),然后将 (B11, BG11) 一直更改为 (B500, BG500) 那么也许该代码会让您满意:

    For Each cell In ActiveSheet.Range("BG9:BG500")
        If Range("B" & cell.Row) = Range("BT28") Then ActiveSheet.Range("BR58:CA58").Copy cell
    Next cell
    

    这会循环 Range("BG9:BG500") 并更改引用。我改变了你的复制粘贴方法,因为在VBA中你不需要选择东西。您可以在一行中告诉 VBA 复制什么内容以及粘贴到哪里。IMO 选择很容易出错,但没有必要,而且看起来更糟糕。
    希望能帮助到你。

    • 1
  2. Notus_Panda
    2023-08-18T18:05:35+08:002023-08-18T18:05:35+08:00

    如果您想使用同一行,请使用.Row单元格中的 ,或者您可以在 for 循环中迭代并使用Range("B" & i)i 作为该行的迭代。

    Sub IMPORTTOLIST()
    
        Dim iCell As Range, rng As Range, rngCopy As Range
        Application.ScreenUpdating = False
        Set rng = Range("B9:B500")
        Set rngCopy = Range("BR58:CA58")
        
        For Each iCell In rng.Cells
            If iCell.Value = Range("BT28").Value Then
                rngCopy.Copy Range("BG" & iCell.Row)
            End If
        Next iCell
        Application.CutCopyMode = False
        Application.ScreenUpdating = True
    End Sub
    

    如果您不想使用剪贴板,可以使用以下剪贴板。可能不会注意到性能上的差异,但它当然是可选的:):

    Sub IMPORTTOLIST_VALUES()
        Dim iCell As Range, rng As Range, rngCopy As Range
        Application.ScreenUpdating = False
        Set rng = Range("B9:B500")
        Set rngCopy = Range("BR58:CA58")
        
        For Each iCell In rng.Cells
            If iCell.Value = Range("BT28").Value Then
                Range("BG" & iCell.Row).Resize(, rngCopy.Columns.Count).Value = rngCopy.Value
            End If
        Next iCell
        Application.ScreenUpdating = True
    End Sub
    
    • 0

相关问题

  • 搜索字符串并输出与该字符串对应的值

  • Excel中有没有一种方法可以计算字符串中特定文本的出现次数,但也包括前一个字符?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve