ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 91866|回复: 414

[分享] 见证成长历程---我的答疑解难代码汇总

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2017-1-6 18:42 | 显示全部楼层 |阅读模式
本帖最后由 lsc900707 于 2018-6-16 10:48 编辑

有网友qq发帖求助,35个工作簿批量增加一列“发布日期”,回复如下:
Sub lsc()
Application.ScreenUpdating = False
Dim wb As Excel.Workbook
x = ThisWorkbook.Path
f = Dir(x & "\" & "*xls")
Do While f <> ""
If f <> ThisWorkbook.Name Then
Set wb = Workbooks.Open(x & "\" & f)
    r = wb.Worksheets("sheet1").[a65536].End(3).Row
    s = wb.Worksheets("sheet1").UsedRange.SpecialCells(xlCellTypeLastCell).Column
    wb.Worksheets("sheet1").Cells(3, s + 1) = "发布日期"
    wb.Worksheets("sheet1").Range(Cells(4, s + 1), Cells(r, s + 1)).Value = "2014/8/23"
    wb.Save
    wb.Close
    End If
    f = Dir
    Loop
Application.ScreenUpdating = True
End Sub

数据源012.rar

290.95 KB, 下载次数: 703

评分

26

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-6 19:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lsc900707 于 2017-1-7 08:55 编辑

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Sheets("股室").[b3].AutoFilter Field:=2, Criteria1:=Target.Text
End Sub
(附件上传失败,待后补传)

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-7 08:53 | 显示全部楼层
指定区域 A1:A100 随机填色代码:
Sub lsc()
ActiveSheet.Range("a:a").Interior.ColorIndex = 2
Dim myRange, myCell  As Range
Set myRange = Range("A1:A100")
For Each myCell In myRange
myCell.Interior.Color = Application.WorksheetFunction.RandBetween(0, 16777216)
Next
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-7 09:01 | 显示全部楼层
按指定编号筛选数据代码:
Sub lsc()
    [e2:g5000].ClearContents
    Dim d, arr, brr
    Set d = CreateObject("scripting.dictionary")
    arr = Range("d1:d" & [d65536].End(3).Row)
    For i = 2 To UBound(arr)
        d(arr(i, 1)) = ""
    Next
    arr = [a1].CurrentRegion
    ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))
    For i = 1 To UBound(arr)
        If d.exists(arr(i, 1)) Then
            k = k + 1
            brr(k, 1) = arr(i, 1): brr(k, 2) = arr(i, 2): brr(k, 3) = arr(i, 3)
        End If
    Next
    [e2].Resize(k, UBound(brr, 2)) = brr
End Sub

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-7 09:08 | 显示全部楼层
统计指定区域内字符出现的个(次)数:
Sub lsc()
Dim d As Object, arr
Set d = CreateObject("Scripting.Dictionary")
arr = Application.InputBox("请选择要统计的区域:", , , , , , , 8)
For i = 1 To UBound(arr, 2)
     For j = 1 To UBound(arr)
         If arr(j, i) <> "" Then d(arr(j, i)) = d(arr(j, i)) + 1
     Next j
Next i
k = d.keys
t = d.items
[S1] = "显示结果": [T1] = "出现次数"
Columns("S").NumberFormatLocal = "@"
[S2].Resize(d.Count, 1) = Application.WorksheetFunction.Transpose(k)
[T2].Resize(d.Count, 1) = Application.WorksheetFunction.Transpose(t)
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-7 09:18 | 显示全部楼层
删除A列中开始字母不为“B”的数据行:
Sub lsc()
    For i = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
        If Not Cells(i, 1) Like "B*" Then Rows(i).Delete
    Next
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-7 09:22 | 显示全部楼层
以下代码为条件合并多表数据:
Sub lsc()
ActiveSheet.UsedRange.ClearContents
Dim arr, brr(1 To 2000, 1 To 4)
For Each sh In Worksheets
    If sh.Name <> "汇总" Then
        arr = sh.UsedRange
        For i = 7 To UBound(arr)
            If arr(i, 3) <> "" Then
                j = j + 1
                brr(j, 1) = arr(3, 2)
                brr(j, 2) = arr(3, 4)
                brr(j, 3) = arr(i, 3)
                brr(j, 4) = arr(i, 8)
            End If
        Next
    End If
Next
With Sheets("汇总")
     .Columns(3).NumberFormatLocal = "@"
    .[a1:d1] = Array("订单号", "超市", "条码", "细数")
    .[a2].Resize(j, 4) = brr
End With
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-7 09:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
向指定表拷贝固定区域的数据:
Sub lsc()
    For Each sht In Worksheets(Array("电位1", "电位2", "电位3"))
         ActiveSheet.[o8:q9000].Copy sht.[o8]
    Next
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-7 10:05 | 显示全部楼层
本帖最后由 lsc900707 于 2017-1-7 10:07 编辑

同一工作簿指定表合并代码的几种写法:
1、Sub 工作表汇总()
    ActiveSheet.UsedRange.Offset(1, 0).ClearContents
    For Each st In Worksheets(Array("数据1", "数据2", "数据3"))
        st.UsedRange.Offset(1, 0).Copy [a65536].End(xlUp).Offset(1, 0)
    Next
End Sub
2、Sub 工作表汇总()
ActiveSheet.UsedRange.Offset(1, 0).ClearContents
For Each st In Worksheets
If st.Name Like "数据*" Then st.UsedRange.Offset(1, 0).Copy [a65536].End(xlUp).Offset(1, 0)
Next
End Sub
3、Sub 工作表汇总()
Application.ScreenUpdating = False
Sheets("数据源").Range("2:65536").ClearContents
For Each st In Worksheets
If st.Name <> ActiveSheet.Name And st.Name <> "预估收入计算表" Then st.UsedRange.Offset(1, 0).Copy [a65536].End(xlUp).Offset(1, 0)
Next
Application.ScreenUpdating = True
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-7 12:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
合并多表指定的D列内容到汇总表:
Sub lsc()
    Columns("C:Q").ClearContents
    Dim sht As Worksheet
    For Each sht In Sheets
        If sht.Name <> ActiveSheet.Name Then
            With sht
                r = .[a65536].End(3).Row
                .Range("D2").Resize(r).Copy ActiveSheet.Cells(2, 3 + n)
                ActiveSheet.Cells(1, 3 + n) = sht.Name
                n = n + 1
            End With
        End If
    Next
End Sub

评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 22:49 , Processed in 0.046277 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表