Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

宏录制

杨莉  发表于:2015-01-20 09:14:07  
复制

您好,

如附件,请教如何通过宏录制的方法将 原数据表 (sheet1)变成 需要效果表(sheet2),谢谢!�������ش˸���

 

 

Top
ynfsr 发表于:2015-01-20 15:11:19
点击“工具”菜单中的“宏”,点击“录制新宏”,选择保存在“个人宏工作簿”,给宏取一个好记的名称,然后根据你所要的格式进行调整,调整完后,点击停止,保存宏工作簿即可。使用时点击宏菜单中的宏,找到你录制的宏执行即可。(附件是高版本的工作簿,无法给你录制)

煮江品茶 发表于:2015-01-20 15:42:03

1、在vba视图中写以下子程序及函数

Sub 数据整理()


    Application.DisplayAlerts = False
    
    If ExistSheet("数据表") = True Then
        Sheets("数据表").Delete
    End If
    
    Dim sh As Object
    Set sh = Sheets.Add
    
    sh.Name = "数据表"
    
    Dim rowcnt As Integer
    Dim colcnt As Integer
    
    rowcnt = GetRowCnt
    colcnt = GetColCnt
    
    Sheets("原始表").Select
    Sheets("原始表").Range(Cells(2, 1), Cells(rowcnt, 6)).Select
    Selection.Copy
    
    sh.Select
    Dim i As Integer
    Dim row As Integer
    For i = 1 To GetColCnt - 6
        row = (i - 1) * GetRowCnt + 1
        sh.Cells(row, 1).Select
        ActiveSheet.Paste
    Next
    
    Dim col As Integer
    For i = 1 To GetColCnt - 6
        col = colcnt - 6 + i
        Sheets("原始表").Select
        Sheets("原始表").Range(Cells(2, col), Cells(rowcnt, col)).Select
        Selection.Copy
        sh.Select
        row = (i - 1) * rowcnt + 1
        sh.Cells(row, 7).Select
        ActiveSheet.Paste
        
        Sheets("原始表").Select
        Sheets("原始表").Cells(2, col).Select
        Application.CutCopyMode = False
        Selection.Copy
        sh.Select


        sh.Range(Cells(row + 1, 8), Cells(row + rowcnt - 2, 8)).Select
        ActiveSheet.Paste
        
        sh.Cells(row, 7).Value = "测量值"
        sh.Cells(row, 8).Value = "测量编号"
    Next
    If MsgBox("是否合并为连续数据?", vbYesNo) = vbYes Then
        Call DeleteRow(sh, rowcnt, colcnt)
    End If
    
    If MsgBox("是否退出?", vbYesNo) = vbYes Then
        Dim w As Workbook
        For Each w In Application.Workbooks
            w.Save
        Next w
        Application.Quit
    End If
End Sub


Function ExistSheet(sheetname As String) As Boolean
    Dim b As Boolean
    b = False
    For Each s In Sheets
        If s.Name = sheetname Then
            b = True
            Exit For
        End If
    Next
    ExistSheet = b
End Function


Function GetRowCnt() As Integer
    Dim i As Integer
    Dim sh As Object
    Set sh = Sheets("原始表")
    
    i = 2
    Do While True
        If sh.Cells(i, 1).Value = "" Then Exit Do
        i = i + 1
    Loop
    GetRowCnt = i - 1
End Function


Function GetColCnt() As Integer
    Dim i As Integer
    Dim sh As Object
    Set sh = Sheets("原始表")
    i = 6
    Do While True
        If sh.Cells(2, i).Value = "" Then Exit Do
        i = i + 1
    Loop
    GetColCnt = i - 1
End Function


Sub DeleteRow(sh As Object, rowcnt As Integer, colcnt As Integer)
    Dim i As Integer
    Dim row As Integer
    Dim str As String
    sh.Select
    For i = 1 To colcnt - 6
        row = rowcnt * i
        str = str & row & ":" & row + 1 & ","
    Next
    str = Left(str, Len(str) - 1)
    sh.Range(str).Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    
    sh.Cells(1, 1).Select
    i = 1
    Do While True
        i = i + 1
        If sh.Cells(i, 1).Value = "" Then Exit Do
        sh.Cells(i, 1).Value = i - 1
    Loop
End Sub





2、运行“数据整理”


3、示例文件:

点击下载此附件






总记录:2篇  页次:1/1 9 1 :