使用逻辑在另一个工作表上从1列创建多个列

时间:2010-09-17 15:43:12

标签: excel vba excel-vba excel-2003

我是VBA的新手,我正在努力使这项工作成功。我需要一个宏来处理Sheet1上的每个单元格列,并将结果放在Sheet2上。我相信对于那些使用VB代码更高级的人来说,这很容易。它包含许多列..

只要我们遇到或空单元格,我们会在第一列填充-999(请参阅Sheet2上的示例),其中包含"0-2" 。然后,我们创建了2个新列,并在第一列填充0,在第二列填充2(请参阅Sheet2上的示例)。如果仅在一侧找到值,则我们用相同的数字填充两侧。

正在处理Sheet1和

中的每个列

Sheet 1中:


A               B
Column1         Column2
Title           Title2
0–2             0–4
3               —
—               5
—               
—               —
10–23           11—29

结果应该在Sheet2上看起来像这样。

Sheet 2中


A          B            C            D
Column1    Column1      Column2      Column2   
Title-A    Title-B      Title-A      Title-B
0          2            0            4
3          3            -999         -999
-999       -999         5            5
-999       -999         -999        -999
—999       -999         -999        -999
10         23           11           29

2 个答案:

答案 0 :(得分:1)

你真的不需要VBA这样做。它可以使用if函数完成。

第1列将使用类似:

=IF(ISNUMBER(Sheet1!A2),Sheet1!A2,IF(OR(Sheet1!A2="-",ISBLANK(Sheet1!A2)),-999,LEFT(Sheet1!A2,1)))

第2列将使用类似:

=IF(ISNUMBER(Sheet1!A2),Sheet1!A2,IF(OR(Sheet1!A2="-",ISBLANK(Sheet1!A2)),-999,RIGHT(Sheet1!A2,1)))

3和4将使用相同的1和2刚刚移过一列。

答案 1 :(得分:1)

好的,你的任务基本上是多部分的: 1 - 使用智能逻辑遍历工作表 2 - 分裂 3 - 将数据放入新单元格

这不是工作证明,但这应该会给你弹药来轻微地完成你的目标。

Sub mySub()
  dim i,j,dummy,dummy2, blankCounter
  i=1
  j=1
  blankCounter=0
  '@@@@@@Section1
  do while ThisWorkbook.Worksheets(1).Cells(1, j)<>""
  do while blankCounter<=5
        if ThisWorkbook.Worksheets(1).Cells(i, j)=""
          blankCounter=blankCounter+1
        else
        '@@@@@@Section2
       dummy=Split(ThisWorkbook.Worksheets(1).Cells(i, j),"—")
       for k=0 to Ubound(dummy)
        ThisWorkbook.Worksheets(2).Cells(i, j+k)=dummy(k)
       next k
        end if
    i=i+1
  loop
                    blankCounter=0
        j=j+1
  loop


end Sub
好的,用英语。第一部分正在研究这个工作簿(“这个”通常特别出现在java中,但这是一个更明显的例子)。在本工作簿中查看我的第一个工作表。在这个工作表中,让我们看一下col1,row1。现在我们将循环下行并继续前进,直到它们为空,对列进行相同操作。这基本上可以找到矩阵的维度(数据)。

好的,现在我们可以遍历工作簿,我们就在那里。

现在,您将了解VBA中的Split功能,该功能几乎存在于所有语言中。 Split会在String中查找某些内容,并按您提供的参数分解字符串。假人将保留任何返回值。假人的大小是未知的,所以我们不应该对此进行硬编码,否则当分离器不存在时会破坏。

话虽如此,我们现在介绍Ubound。 Ubound是一种查找数组大小的功能。注意:如果Ubound返回1,则表示您有一个值。数组自动索引为0,因此您必须注意这一点而不是从1循环到Ubound,这会产生错误并产生错误的代码。

好的,现在好了我们可以遍历我们的数组和我们的工作簿,现在我们只需要将这些值放在所需的单元格中。 var k应该能够为你做到这一点。

正如我所说,我没有证明这个代码,所以你需要确保这个逻辑正常运行,因为我现在意识到它并没有将数据放在正确的单元格中,但这将是你的解决方案。