#数据库操作(如表的合并,跨表查询,统计最大最小数值等)适合用access完成
#excel适合处理二维表,对单元格的简单计算,如下是典型的二维表
600600 | 600601 | 600602 | 600603 | 600604 | |
青岛啤酒 | 方正科技 | 广电电子 | ST兴业 | 二纺机 | |
2002-1-4 | 7.46 | 13.02 | 10.04 | 11.08 | 9.27 |
2002-1-7 | 7.31 | 12.9 | 9.92 | 11.1 | 8.85 |
2002-1-8 | 7.3 | 12.99 | 9.95 | 11.11 | 8.73 |
2002-1-9 | 7.19 | 12.92 | 10.04 | 11.44 | 8.25 |
2002-1-10 | 7.35 | 12.94 | 10.09 | 11.95 | 8.4 |
2002-1-11 | 7.28 | 12.66 | 9.77 | 11.68 | 8.04 |
2002-1-14 | 7.08 | 12.01 | 9.5 | 11.54 | 7.73 |
2002-1-15 | 6.99 | 12.02 | 8.95 | 11.34 | 7.67 |
2002-1-16 | 7.15 | 11.99 | 8.93 | 11.15 | 7.88 |
2002-1-17 | 6.91 | 11.58 | 8.4 | 10.04 | 7.19 |
2002-1-18 | 6.9 | 11.37 | 8.2 | 9.34 | 6.9 |
#一般思路: 对于原始的excel表,先利用access的SQL语句进行分组,排序,跨表合并
根据具体要求再利用excel的`公式或VBA完成其他复杂的功能
几点经验:
ss中要进行跨表查询,必须先建立"关系",可使用工具->关系菜单进行设置
2. 常见SQL语句
a)最大最小,排序处理
SELECT AFE_cast_Stkcd, AFE_, Min(AFE__DAYS_ELAPSED) AS RAW_DAYS_ELAPSED之最小值, Max(AFE__DAYS_ELAPSED) AS RAW_DAYS_ELAPSED之最大值
FROM AFE_statv2ACCURACY
GROUP BY AFE_cast_Stkcd, AFE_
ORDER BY AFE_cast_Stkcd, AFE_;
b)删除数据
DELETE *
FROM AFE_statv2无空项
WHERE AFE_statv2无空项cast_AFE最大值=AFE_statv2无空项cast_AFE最小值
c) 表的连接:
INNER JOIN保留公共数据,LEFT JOIN和RIGHT JOIN分别完整保留左,右表数据,必要时通过DISTINCT参数去除重复的记录
d)日期函数 Year等
3. excel VBA代码分析
Public Sub firstVBA()
Dim thisdate As Date
Dim wday As Integer
Dim rno As Integer
Dim stkcd As String
Dim ananm As String
Dim findStk1 As Range
Dim findStk2 As Range
Dim findStk3 As Range
Dim findStk6 As Range
Dim findStk7 As Range
Dim findStk8 As Range
Dim findStk9 As Range
Dim findStk10 As Range
Dim findIndex As Range
Dim findDate As Range
Dim TwoDayB As Integer
Dim TwoDayA As Integer
Dim OneDayB As Integer
Dim OneDayA As Integer
Dim FindCol As Integer
Dim CR_FIVE As Double
Dim CR_THREE As Double
Dim Revp As Double
Dim indexTwoDayB As Integer
Dim indexTwoDayA As Integer
Dim indexOneDayB As Integer
Dim indexOneDayA As Integer
Dim CR_Index_FIVE As Double
Dim CR_Index_THREE As Double
Sheet11是最终存放结果的表,Sheet1-3,6-10存放了各日各股票的价格,sheet5存放上证,深证指数
For rno = 2 To 6864
stkcd = e("A" & rno)e 查找股票代码
thisdate = e("E" & rno)e 查找日期
Set findStk1 = e("1:1")(stkcd)
Set findStk2 = e("1:1")(stkcd)
Set findStk3 = e("1:1")(stkcd)
Set findStk6 = e("1:1")(stkcd)
Set findStk7 = e("1:1")(stkcd)
Set findStk8 = e("1:1")(stkcd)
Set findStk9 = e("1:1")(stkcd)
Set findStk10 = e("1:1")(stkcd)
查找股票在哪张表中
If Not findStk1 Is Nothing Then
Set findStk = findStk1
Sheets("sz_stk1")ct
ElseIf Not findStk2 Is Nothing Then
Set findStk = findStk2
Sheets("sz_stk2")ct
ElseIf Not findStk3 Is Nothing Then
Set findStk = findStk3
Sheets("sz_stk34")ct
ElseIf Not findStk6 Is Nothing Then
Set findStk = findStk6
Sheets("sh_stk1")ct
ElseIf Not findStk7 Is Nothing Then
Set findStk = findStk7
Sheets("sh_stk2")ct
ElseIf Not findStk8 Is Nothing Then
Set findStk8 = findStk8
Sheets("sh_stk3")ct
ElseIf Not findStk9 Is Nothing Then
Set findStk = findStk9
Sheets("sh_stk4")ct
ElseIf Not findStk10 Is Nothing Then
Set findStk = findStk10
Sheets("sh_stk5")