从非连续行中提取数据并将其添加到连续行中的不同工作表中

时间:2017-03-17 19:41:03

标签: excel vba excel-vba optimization

我试图从范围(A1:A:2000)中提取数据,该范围对关键字有任何引用,无论范围在何处,并将结果转换为A1中连续行中的新工作表。<登记/> 一个很好的例子就是电影剧本。

如果电影的所有行都在一张纸的A列中:&#39;完整电影脚本&#39;我只想把一个人的线条移到一张新的纸上:“迈克的剧本”。最初的电影剧本&#39;表格可能如下所示:

A1 Mike: Blah Blah Blah
A2 Paul: Blah Blah Blah Blah Blah Blah
A3 Jerry: Blah Blah Blah Blah
A4 Mike: Blah
A5 Jerry: Blah Blah Blah  
A6 Mike: ...

我想用VBA做的就是通过使用关键字&#34; Mike&#34;来移动JUST Mike的行,到新表:

迈克的剧本

A1 Mike: Blah Blah Blah
A2 Mike: Blah
A3 Mike: ...

我知道我可以在第二页中使用IF语句并对数据进行排序但理想情况下我希望能够在不必过滤和排序以获得输出的情况下执行此操作。我正在探索Visual Basic中的选项,但想到有人可能知道如何做到这一点。

1 个答案:

答案 0 :(得分:1)

将其放入未使用的单元格中

import java.awt.GridLayout; //imports GridLayout library
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;

public class Testing extends JFrame implements ActionListener {

    JFrame frame = new JFrame(); //creates frame
    JButton[][] grid; //names the grid of buttons



    public Testing(int width, int length) { //constructor
        frame.setLayout(new GridLayout(width, length)); //set layout
        grid = new JButton[width][length]; //allocate the size of grid

        for (int y = 0; y < length; y++) {
            for (int x = 0; x < width; x++) {
                grid[x][y] = new JButton("(" + x + "," + y + ")"); //creates new button     
                frame.add(grid[x][y]); //adds button to grid
                grid[x][y].addActionListener(this);
            }
        }

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack(); //sets appropriate size for frame
        frame.setSize(1000, 1000);
        frame.setVisible(true); //makes frame visible

    }

    public static void main(String[] args) {
        new Testing(5, 5); /*length and width of the grid in terms of number        of buttons */
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == grid[2][2]) {
            System.out.println("2-2 Has been pressed");
        }

    }

    }

填写下来,直到收到=INDEX(A:A, AGGREGATE(15, 6, ROW(A$1:A$2000)/(LEFT(A$1:A$2000, FIND(":", A$1:A$2000)-1)="mike"), ROW(1:1))) 错误。当它工作时,移动到目标工作表并更正单元格范围以包括原始工作表。 (可选)使用#NUM!包装器显示零长度字符串,而不是工作表错误代码。

enter image description here