EXCEL 表格中,第一列为文本,第二列为数据,怎么用VB编程

原始的数据表如上:第二列中的单元格为空,对应的第一列删除,在复制第一列到第二个sheet第一列,对应数据也复制过去,做成如下表:... 原始的数据表如上:
第二列中的单元格为空,对应的第一列删除,在复制第一列到第二个sheet第一列,对应数据也复制过去,做成如下表:
展开
 我来答
chenjiawei5000
推荐于2016-01-15 · TA获得超过2779个赞
知道大有可为答主
回答量:2585
采纳率:30%
帮助的人:2070万
展开全部
Sub transmit()

Dim i, ar1(), ar2(), ar3(), j, k

ReDim ar1(1 To 100), ar2(1 To 100), ar3(1 To 100)

For j = 2 To 5

    i = 2

    Do

        If Cells(i, j) <> "" Then

            k = k + 1

            If k >= UBound(ar1) Then

                ReDim Preserve ar1(1 To k + 100)

                ReDim Preserve ar2(1 To k + 100)

                ReDim Preserve ar3(1 To k + 100)

            End If

            ar1(k) = Cells(i, 1)

            ar2(k) = Cells(i, j)

            ar3(k) = Cells(1, j)

        End If

        i = i + 1

    Loop Until Cells(i, 1) = ""

Next j

Sheets(Sheets.Count).Range("A2").Resize(k, 1) = WorksheetFunction.Transpose(ar1)

Sheets(Sheets.Count).Range("B2").Resize(k, 1) = WorksheetFunction.Transpose(ar2)

Sheets(Sheets.Count).Range("C2").Resize(k, 1) = WorksheetFunction.Transpose(ar3)

End Sub

 

测试通过,结果会显示在最后一张sheet中,你可以新建一个sheet放在最后来存放结果。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mfkinfo
2015-04-11 · TA获得超过6349个赞
知道大有可为答主
回答量:4553
采纳率:83%
帮助的人:954万
展开全部
你给出的示意图与描述相矛盾啊。

描述中说,第二列单元格为空,复制。但是PN为D的第二列单元格有值4,你却到它复制过去了。EF也是这种情况。
另外,原sheet中的第二列单元格为空时,第一列删除,其它的列不需要删除吗?
追问

复制 到对应的新表中, PN列还是PN列,数值,放到QTY列,时间放到 date,能后去除筛选,在第三列,做一样的动作,以此类推

每次把黄色的复制下到新表

追答
Option Explicit
Sub ExportToOther()
Dim cols%, rws%, cx%, dx%, strCol$
Dim cols2%, rws2%

Application.ScreenUpdating = False

Sheets(1).Select

With Sheets(1).UsedRange
cols = .Columns.Count
rws = .Rows.Count
End With
With Sheets(2).UsedRange
cols2 = .Columns.Count
rws2 = .Rows.Count
End With

For dx = 2 To cols
strCol = VBA.Split(Columns(dx).Address, "$")(2)

For cx = 2 To rws
If Cells(cx, dx) "" Then
rws2 = rws2 + 1
Sheets(2).Cells(rws2, 1).Value = Sheets(1).Cells(cx, 1).Value
Sheets(2).Cells(rws2, 2).Value = Sheets(1).Cells(cx, dx).Value
Sheets(1).Range(strCol + "1").Copy Destination:=Worksheets(2).Range("C" + Format(rws2))
').Cells(1, dx).Value

End If

Next cx
Next dx

Application.ScreenUpdating = True
MsgBox "转移完毕!"

End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
真真真白丁
2015-04-11 · TA获得超过8524个赞
知道大有可为答主
回答量:4644
采纳率:85%
帮助的人:1764万
展开全部
请问你说的是VB编程,还是excel带的VBA编程?
更多追问追答
追问
不好意思,是excel肿的VBA编程
追答

代码如下。打开你的Excel文件,按“Alt+F11”打开VBA编辑窗口,然后在左侧对应的Sheet上双击,右侧空白处粘贴下面的代码。关闭VBA窗口。然后按“Alt+F8”打开宏窗口,选择刚插入的宏,点击“执行”。


结果会放在“生成结果”这张表中。



Sub ZY()
On Error Resume Next
Dim i, j, r, c, n As Long
n = 1
r = Cells(Rows.Count, "A").End(xlUp).Row
c = Cells(1, Columns.Count).End(xlToLeft).Column
If Sheets("生成结果") Is Nothing Then
    Sheets.Add(after:=Sheets(Sheets.Count)).Name = "生成结果"
Else
    Sheets("生成结果").Cells.ClearContents
End If
With Sheets("生成结果")
    .Range("A1").Resize(1, 3).Value = Array("PN", "QTY", "DATE")
    For i = 2 To c
        For j = 2 To r
            If Cells(j, i).Value <> "" Then
                n = n + 1
                Cells(j, 1).Copy .Cells(n, 1)
                Cells(j, i).Copy .Cells(n, 2)
                Cells(1, i).Copy .Cells(n, 3)
            End If
        Next
    Next
End With
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式