首页 > 解决方案 > 如果在列中找到值,则将其复制到行中的某些元素

问题描述

我想准备一个工具来搜索特定列中的任何内容,如果看到任何内容,请复制此值并将其粘贴到其行上的几个元素中

例如,如果在 G2 中有值“ADD”,那么 A2+B2 + E2 + F2 将是“ADD”到(C 除外)

我很难克服障碍,到目前为止我想出了这个。我知道这段代码很难忍受,但我很少使用 VBA,所以我从来没有机会学习,所以它混合了我在这里找到的内容根据我的要求在stackoverflow上组合

Dim wb as Workbook
Dim ws As Worksheet

wb = ActiveWorkbook.Name
ws = Application.ActiveSheet

With ws

Set myRange = Range("G1", Range("G1").End(xlDown))

For i = 1 to myRange

if i <>"" Then

Range("A1", Range("A1").End(xlToRight)).Select
Range("A1", Range("A1").End(xlToRight)).Value = i.text

[I know this part will do from the first element of A to the last but I dont know how to choose elements I wish if they're not one next to each other]

Next i
End with

标签: excelvba

解决方案


对于您想要做的事情,您似乎不需要声明“wb”和“ws”。Vba 默认会使用 ActiveSheet。wb 也被声明为工作簿,但 ActiveWorkbook.Name 是一个文本。您的代码将遇到错误。

如果要从 G1 循环到最后输入的单元格,可以参考以下代码: For i = 1 To Cells(Rows.Count,7).End(xlUp).Row

rows.count 指的是 excel 中的最后一行 (1048576)。而“end(xlup)”将在 G 列找到最后一个输入值的单元格。而“.row”返回最后一个单元格的行号。

同样,您可以使用 "Cells(1, Columns.Count).End(xlToLeft)" 查找在第 1 行输入的最后一列的单元格

您可以尝试以下代码:

For i = 1 To Cells(Rows.Count, 7).End(xlUp).Row

If Cells(i, 7).Value <> "" Then

Range(Cells(i, 1), Cells(i, 2)).Value = Cells(i, 7).Value
Range(Cells(i, 4), Cells(i, Columns.Count).End(xlToLeft)).Value = Cells(i, 7).Value

End If

Next i

但是,您提到要复制 C 列以外的内容。因为我不知道您不会复制到该列的实际情况。我只是简单地将代码分成两部分,一个用于 A 和 B 列,另一个用于 D 到最后一列


推荐阅读