ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请高手帮忙: 多个网页数据导入excel

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-4-17 12:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好的。谢谢你!

TA的精华主题

TA的得分主题

发表于 2011-4-17 14:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

修改表头整理完毕,并添加代码注释,你看看如何,表见附件,代码如下。

原帖由 ck1668 于 2011-4-17 12:49 发表
好的。谢谢你!


自动排序的代码:
  1. Dim x As Boolean, m As Single '设置计数器和逻辑判断,定义区域变量,可保存在内存中直至工作薄关闭
  2. Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

  3. Dim n As Long, nn As Long
  4. n = [a65536].End(xlUp).Row '获取行数
  5. nn = [n65536].End(xlUp).Row

  6. x = m Mod 2 '点击两次,重新每次的设置逻辑切换,仅仅排序后才改变逻辑

  7. If x = False Then '降序逻辑操作
  8. Select Case Target.Address
  9.   Case "$A$1"
  10.     Range("a1:m" & n).Sort [a1], xlDescending, , , , , , 1: m = m + 1
  11.   Case "$E$1"
  12.     Range("a1:m" & n).Sort [e1], xlDescending, , , , , , 1: m = m + 1
  13.   Case "$F$1"
  14.     Range("a1:m" & n).Sort [f1], xlDescending, , , , , , 1: m = m + 1
  15.   Case "$G$1"
  16.     Range("a1:m" & n).Sort [g1], xlDescending, , , , , , 1: m = m + 1
  17.   Case "$H$1"
  18.     Range("a1:m" & n).Sort [h1], xlDescending, , , , , , 1: m = m + 1
  19.   Case "$I$1"
  20.     Range("a1:m" & n).Sort [i1], xlDescending, , , , , , 1: m = m + 1
  21.   Case "$J$1"
  22.     Range("a1:m" & n).Sort [j1], xlDescending, , , , , , 1: m = m + 1
  23.   Case "$K$1"
  24.     Range("a1:m" & n).Sort [k1], xlDescending, , , , , , 1: m = m + 1
  25.   Case "$L$1"
  26.     Range("a1:m" & n).Sort [l1], xlDescending, , , , , , 1: m = m + 1
  27.   Case "$M$1"
  28.     Range("a1:m" & n).Sort [m1], xlDescending, , , , , , 1: m = m + 1
  29.   Case "$N$1"
  30.     Range("n1:z" & nn).Sort [n1], xlDescending, , , , , , 1: m = m + 1
  31.   Case Else
  32.     DoEvents
  33. End Select

  34. ElseIf x = True Then '升序逻辑操作
  35. Select Case Target.Address
  36.   Case "$A$1"
  37.     Range("a1:m" & n).Sort [a1], xlAscending, , , , , , 1: m = m + 1
  38.   Case "$E$1"
  39.     Range("a1:m" & n).Sort [e1], xlAscending, , , , , , 1: m = m + 1
  40.   Case "$F$1"
  41.     Range("a1:m" & n).Sort [f1], xlAscending, , , , , , 1: m = m + 1
  42.   Case "$G$1"
  43.     Range("a1:m" & n).Sort [g1], xlAscending, , , , , , 1: m = m + 1
  44.   Case "$H$1"
  45.     Range("a1:m" & n).Sort [h1], xlAscending, , , , , , 1: m = m + 1
  46.   Case "$I$1"
  47.     Range("a1:m" & n).Sort [i1], xlAscending, , , , , , 1: m = m + 1
  48.   Case "$J$1"
  49.     Range("a1:m" & n).Sort [j1], xlAscending, , , , , , 1: m = m + 1
  50.   Case "$K$1"
  51.     Range("a1:m" & n).Sort [k1], xlAscending, , , , , , 1: m = m + 1
  52.   Case "$L$1"
  53.     Range("a1:m" & n).Sort [l1], xlAscending, , , , , , 1: m = m + 1
  54.   Case "$M$1"
  55.     Range("a1:m" & n).Sort [m1], xlAscending, , , , , , 1: m = m + 1
  56.   Case "$N$1"
  57.     Range("n1:z" & nn).Sort [n1], xlAscending, , , , , , 1: m = m + 1
  58.   Case Else
  59.     DoEvents
  60. End Select

  61. End If

  62. End Sub
复制代码
获取数据并统计的代码。
  1. Option Explicit
  2. Sub test()
  3.     Dim tmp() As String, i As Integer, arr(), xmlhttp As Object, n As Long, JC As Worksheet, Td As String, ws As Worksheet, sName As String, D, DS, j As Long, Nm As Long, k, t, y, ARR2(), tmp1()
  4.    
  5.     Application.ScreenUpdating = False
  6.    
  7.     Nm = 0
  8.    
  9.     On Error Resume Next
  10.    
  11.     Td = Format(Date, "yyyymmdd") '记录当日日期
  12.     Set JC = Sheets(Td)
  13.     If Not (JC Is Nothing) Then '当日表存在则清空数据
  14.        JC.Activate
  15.        Cells.Clear
  16.     Else
  17.        Set JC = Sheets.Add(AFTER:=Worksheets("起始页")) '单日表不存在新建
  18.        JC.Name = Td
  19.        JC.Activate
  20.     End If
  21.    
  22.     [a1:m1] = Split("代码,2B,3c,名称,最新价,涨跌幅,流入(万),流出(万),净流入(万),净流入占比,大单净流入(万),中单净流入(万),小单净流入(万)", ",") '当日表表头
  23.    
  24.     Set xmlhttp = CreateObject("Microsoft.XMLHTTP") '调用XMLHTTP
  25.     With xmlhttp
  26.         .Open "get", "http://data.eastmoney.com/zjlx/data_detail.js", False
  27.         .send
  28.        tmp = Split(Split(Split(Replace(StrConv(.responsebody, vbUnicode, &H804), """,""", ","), "=[""")(1), """];")(0), ",")
  29.     End With
  30.    
  31.     ReDim arr(UBound(tmp) \ 13, 12) '整理XMLHTTP获取的数据
  32.     For i = 0 To UBound(tmp)
  33.         arr(i \ 13, i Mod 13) = tmp(i)
  34.     Next
  35.    
  36.     [a2].Resize(UBound(arr, 1) + 1, UBound(arr, 2) + 1) = arr '将数据导入当日表内并设置格式调整列宽
  37.     [a:m].Columns.AutoFit
  38.     Columns("b:c").ColumnWidth = 0
  39.     Columns("a").NumberFormat = "000000"
  40.     Columns("h").NumberFormat = "-0.00"
  41.     Columns("f").NumberFormat = "0\.00%"
  42.     Columns("j").NumberFormat = "0\.00%"
  43.         
  44.     Erase tmp   '释放各变量
  45.     Erase arr
  46.     Set xmlhttp = Nothing
  47.    
  48.     sName = "统计"
  49.     Set ws = Sheets(sName)
  50.     If Not (ws Is Nothing) Then  '查找统计表,如果存在则删除
  51.         Application.DisplayAlerts = False
  52.           ws.Delete
  53.         Application.DisplayAlerts = True
  54.     End If
  55.    
  56.     Set ws = Sheets.Add(AFTER:=Worksheets(Worksheets.Count)) '建立新统计表
  57.     ws.Name = sName
  58.     ws.Activate
  59.    
  60.     Set D = CreateObject("scripting.dictionary") '建立字典
  61.     Set DS = CreateObject("scripting.dictionary")
  62.       
  63.     For i = 1 To Worksheets.Count '历遍工作薄各表
  64.     If Worksheets(i).Name <> sName And Worksheets(i).Name <> "起始页" Then '提取非"起始页"和"统计"的表的数据
  65.       n = Worksheets(i).[a65536].End(3).Row
  66.       tmp1 = Worksheets(i).Range("a2:m" & n).Value '将数据导提取入数组
  67.       ReDim Preserve ARR2(1 To Application.Max(UBound(tmp1), D.Count) + 1, 1 To (Worksheets.Count - 2) * 2) '设置结果数组维数
  68.       
  69.       For j = 1 To UBound(tmp1) '利用字典提取需要的信息
  70.          If Not (D.exists(tmp1(j, 1))) Then '如果字典关键字不存在,则新建关键字并写入关键字编号
  71.            Nm = Nm + 1
  72.            D(tmp1(j, 1)) = Nm
  73.            DS(tmp1(j, 4)) = Nm
  74.            ARR2(Nm + 1, i - 1) = tmp1(j, 9) '利用关键字编号将提取数组转入结果数组
  75.            ARR2(Nm + 1, i - 1 + Worksheets.Count - 2) = tmp1(j, 11)
  76.          Else   '如关键字已存在,使用关键字的变化从提取数组提取数据到结果数组
  77.            ARR2(D(tmp1(j, 1)) + 1, i - 1) = tmp1(j, 9)
  78.            ARR2(D(tmp1(j, 1)) + 1, i - 1 + Worksheets.Count - 2) = tmp1(j, 11)
  79.          End If
  80.       Next
  81.    
  82.       ARR2(1, i - 1) = Worksheets(i).Name & "净流入" '创建结果数组数据日期和关键字表头
  83.       ARR2(1, i - 1 + Worksheets.Count - 2) = Worksheets(i).Name & "大单净流入"
  84.             
  85.     End If
  86.    
  87.     Erase tmp1 '释放提取数组变量
  88.     Next
  89.   
  90.   k = D.keys '导出股票代码
  91.   t = D.items '导出内置序号
  92.   y = DS.keys '导出股票名称

  93. [n1].Resize(1, 2) = Split("代码,名称", ",") '建表头
  94. [n2].Resize(D.Count, 1) = Application.Transpose(k) '将导入内容填入单元格
  95. [o2].Resize(DS.Count, 1) = Application.Transpose(y)
  96. [p1].Resize(UBound(ARR2, 1), UBound(ARR2, 2)) = ARR2

  97. n = [n65536].End(3).Row ' 调整格式
  98. Columns("n").NumberFormat = "000000"
  99. Range(Cells(1, 14), Cells(1, 14 + 2 + UBound(ARR2, 2))).WrapText = True
  100. Range(Cells(2, 14), Cells(n, 14 + 2 + UBound(ARR2, 2))).Columns.AutoFit
  101. [a:m].ColumnWidth = 0

  102. Erase ARR2 '释放结果数组
  103. Set D = Nothing
  104. Set DS = Nothing

  105. Application.ScreenUpdating = True

  106. MsgBox "Ok"

  107. End Sub
复制代码

[ 本帖最后由 xmyjk 于 2011-4-17 15:00 编辑 ]

终结版股票.rar

166.1 KB, 下载次数: 124

TA的精华主题

TA的得分主题

发表于 2011-4-17 15:43 | 显示全部楼层
表格做的非常好,代码讲的非常仔细,象你这样既肯帮忙,又细心指教的老师,真是难得。
我相信不单止我非常感谢你的这次帮忙,令我炒股更方便,其他想学代码的兄弟朋友应该也是一个非常不错的好机会,再次感谢!

TA的精华主题

TA的得分主题

发表于 2011-4-17 16:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
老师,麻烦你帮我再加一个中单的统计,因刚大致看了一下,发现有的大单与中单相差比较大。譬如:深长城,净流入有1228.55,而大单只有52.94,开始我以为剩下的1175.61会是中单小单各一半,但不是。

代码        名称        净流入(万)        大单净流入(万)      中单净流入(万)        小单净流入(万)
000042        深 长 城        1228.55        52.94                     938.64            236.97

还有一点:老师,请看附件,统计表里可不可以按时间先后排?即:20110415的在最左边,挨着20110415的右边20110416,挨着20110416的右边20110417,这样好像比较习惯一点。

股票终结版.zip (522.66 KB, 下载次数: 15)

[ 本帖最后由 ck1668 于 2011-4-17 16:39 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-4-17 16:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

看看这个,增加中单后,该排序方式我择期再看,这个要改动我整个逻辑顺序,工程大

原帖由 ck1668 于 2011-4-17 16:15 发表
老师,麻烦你帮我再加一个中单的统计,因刚大致看了一下,发现有的大单与中单相差比较大。譬如:深长城,净流入有1228.55,而大单只有52.94,开始我以为剩下的1175.61会是中单小单各一半,但不是。

代码        名称        净流 ...


看看这个,增加中单后,该排序方式我择期再看看,这个要改动我整个逻辑顺序,工程很大。。

终结版股票.rar

162.1 KB, 下载次数: 35

TA的精华主题

TA的得分主题

发表于 2011-4-17 17:11 | 显示全部楼层
老师,你看看能不能改,如果不好改,工程很大就算了,我凑合着看就行,时间长了会习惯的。谢谢!

TA的精华主题

TA的得分主题

发表于 2011-4-17 17:23 | 显示全部楼层
还想你帮忙改一下每天的数据,代码那一栏,能不能从小排到大,即:A2是000001,A3是000002 ?因现在都是9字头的排在前面,而9字头的是B股,谢谢!

TA的精华主题

TA的得分主题

发表于 2011-4-17 17:47 | 显示全部楼层
原帖由 ck1668 于 2011-4-17 17:23 发表
还想你帮忙改一下每天的数据,代码那一栏,能不能从小排到大,即:A2是000001,A3是000002 ?因现在都是9字头的排在前面,而9字头的是B股,谢谢!


有做自动排序,你点A1,再点A2,再回来点A1看看,就自动排序过来了。

TA的精华主题

TA的得分主题

发表于 2011-4-17 18:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-4-17 18:47 | 显示全部楼层

时间顺序也调整过来了,你看看

原帖由 ck1668 于 2011-4-17 17:11 发表
老师,你看看能不能改,如果不好改,工程很大就算了,我凑合着看就行,时间长了会习惯的。谢谢!


时间顺序也调整过来了,你看看

终结版股票.rar

202.58 KB, 下载次数: 69

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

本版积分规则

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

GMT+8, 2024-12-12 09:44 , Processed in 0.055885 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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