2009年5月4日星期一

给网友 Becky2612 的问题响应

| |
~ 上傳‧分享‧網賺 ~
~ 免費上傳空間‧請即申請 Freak Share ~
~ 進入後請點選左上角 注冊 ! ~

~ 声明事项 ~

如各位想把以下本文章转贴 , 请记得要注明出处.

本文章之内容为本人之经验所写, 绝无抄袭成份, 特此声明.

由于图片制作需时, 所以更新会比较慢.

存放图片的 SHARE A PIC SERVER 可能读取速度较慢, 请耐心等待.

Picture



GOOD MORNING CLASS ~~~~ :P

哈哈 ~ 原来真的是蛮过瘾的嘛 ~ 哈哈 ~

嗯 … 看到你的图片 , 可以想象得到 , 原本的报表中 , 数据的排序方式是全部都放在栏A 的 , 而你的目的就是 , 先把数据进行分类 , 然后再排序 , 把数据并排方便查阅 . 嗯 , 我相信 , 现在最困难的地方是 , 如何利用 EXCEL VBA 进行数据分类以及排序吧 … 嗯 … 好像问题都只有这两个吧 ~ 哈哈 ~ ( 嗯 … 此段纯粹为了欺骗排版而写的 ~ 嘿嘿嘿 ~ :P )

好 , 先简单地说明一下我的解决方法 , 首先 , 我会先用人手查看有多少个货品种类 ( 这是为了准备数据分类后的数据储存位置做的准备 , 加上如果按照你给出来的图片 , 类别应该不会太多吧~ ) , 然后是利用 EXCEL VBA 进行数据分类 , 再进行排序 .

好 , 先解决第一个问题吧 , 就是数据分类的问题 .

说实在的 , 这个问题比较困难 , 因为需要配合 EXCEL 的函数公式来协助 , 而函数式有多难以理解 , 我相信很多人都明白的 :P

先看一下图片


( PicR1_1 )

图片跟你给我的差不多吧 ~ 哈哈 ~ 要使计算机明白如何把数据进行分类 , 首先要告诉它 , 分类的条件是什么 . 嗯 … 根据上面的图片 , 你应该发现 , 我的数据跟你的数据的共通处是 , 货物型号的编排方法是有固定规则的 , 如果细心留意一下 , 这些料号是在固定规则再加上一个流水号 , 如果要利用流水号进行数据分辨 , 这实在是不合理的行为 , 所以嘛 ~ 要解决这个情况的话 , 最好的就是利用固定规则安排的英文字代号来告诉计算机分类的条件 .

首先 , 先学习一下 , 怎样把这个条件找出来吧 ~ 嗯 … 嗯 … 这个吧 … 这个应该 ok 的

=LEFT(A1,3)

=LEFT 这个函数其实很容易使用的 , 这家伙的使用结果是 , 找出目标储存格内的文字 , 由左到右的首 3 个字 , 嘿嘿嘿 ~ 很好很好 , 这个找条件的方法确实是好得很 :P ( 再说明一下 , 上面的函数式最后那个数字是可以更改的 , 现在是 3 , 但是你可以按照你的要求来更改 )

有了这个函数之后 , 第二个问题就是如何加进你的报表里 .

Columns("C:C").Select
Selection.Insert Shift:=xlToRight

记得上面的程序代码吗 ?

这就是加插一个新字段的程序代码 , 加入一个新的字段之后 , 嘿嘿嘿 ~ 问题来了 ~ 如何加入函数式到这栏的每一个位置 ~ ( 我所指的当然是栏 A 中有数据的位置啰 ~ )

嗯 , 对于这个问题 , 我先给你利用 EXCEL VBA 增加函数式到储存格的程序代码吧 ~

Worksheets("Sheet1").Range("C1").Select
Worksheets("Sheet1").Range("C1").Formula = "=LEFT(A1,3)"

上面的程序代码就是把函数式增加到储存格的方法 , 要注意的是 , 函数式是放在 “” 里面的 , 如果在函数式里出现了第二组的 “” , 那么程序就会出现错误了 ~ 那时候便要改用 R1C1 的编写方法 . 顺道说明一下吧 , 如果上面的 =LEFT(A1,3) 函数式要改成 R1C1 的编写方法的话 , 函数式就会变成=LEFT(R[-2]C[-2],3) , 嗯 ~ 看上去很复杂吧 ~ 其实也没什么大不了的 , R[-2]C[-2] 其实是坐标来的 , 目前选择了的储存格坐标就是 ( 0,0 ) , R 就是 Y 轴 , C 就是 X 轴 , 嗯 , 只是反转了吧 , 很容易理解吧 , 对不 ~ 当然啰 ~ 这此不需要搞到这么复杂的 ~ 就用上面那两句程序代码就好 .

好 ~ 到我来考验你了 ~ 嘿嘿嘿 :P

插入新一栏的方法有了 , 可以利用的函数式有了 , 现在就给你一个问题 , 如何把函数式贴在 C 栏的储存格内 , 而贴上去之前 , 要先确定 A 栏的对应位置是有数据的 . 嘿嘿嘿 ~ 一点也不困难吧 :P , 给你一点提示 :

找到最后一个记录的方法是 …..
FOR LOOP 循环的使用方法是 ……
选择 … … 然后 …. … COPY …… 然后 ….. PASTE ……

嗯 … 提示满多的嘛 ~ 哈哈 ~

好 ~ 数据的分辨方法有了 , 现在就来到了另一个部份 , 就是要告诉你的计算机 , 当条件成立就做什么 . 嗯 … 这句话听过很多次了吧 ~ 现在 , C 栏中的数据就是条件


( PicR1_2 )

当 条件 是 A , 就把储存格 C2 的数据放到储存格 F2 , B2 放到 G2 ,
当 条件 是 B , 就把储存格 C2 的数据放到储存格 H2 , B2 放到 I2 ,
当 条件 是 C , 就把储存格 C2 的数据放到储存格 J2 , B2 放到 K2 ,
当 条件 是 D , 就把储存格 C2 的数据放到储存格 L2 , B2 放到 M2 ,

此段程序代码就不提供了 , 提示就给多一点吧 XD

If Then Else … 嗯 … For Loop … 嗯 … 差不多了吧 ~ 哦 ~ 对了 , 还有 , 好好利用刚刚找出来的那个 “ 最后一个记录的位置 ”

好 ~ 来到这个部份 , 数据分类就应该可以顺利完成了 , 现在的问题是 , 如何把已分类好的数据弄得漂亮一点 , 要做这个动作 , 其实也是很简单的嘛 ~ 只要利用 VBA 来进行资料排序就可以了 ~ 看一下图片 :


( PicR1_3 )

排序后的结果应该就是你想要的东西吧 ~ 对吗 ? 那就分享一下排序的 EXCEL VBA 程序代码是什么东东吧 ~

Range("H2:I13").Select
Selection.Sort Key1:=Range("H2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlStroke, DataOption1:=xlSortNormal

上面的程序代码就是用作排序的程序代码 , 首先选择了储存格位置的 H2 到 I13 - Range("H2:I13").Select , 排序条件是储存格 H2 - Selection.Sort Key1:=Range("H2") , 然后是进行递增排序 - Order1:=xlAscending, … 嗯 , 其它的就先不管了 ~ 排序完成之后就可以做到你想要的效果了 ~

当然啰 ~ 我的这个样本是 H2 到 I13 的储存格 , 然而 , 你的报表中的最后一个记录不可能是 13 吧 ~ 对不 ? 所以选择的时候就要利用之前找出来的变量 ( 找出最后一个记录的那个哦 ~ ) 来确定应该要被选择的范围 .

还记得嘛 ~ 要利用变量选择储存格的方法是 Range("H2:I" & XXX ).Select ~ OK !?

要做多少次排序的动作嘛 ~ 就要看你有多少个项目的数据被找出来了 ~ 当然 , 记得要小心修正程序代码哦 ~ 错了的话就会浪费很多时间去除虫 ( DEBUG ) 了 ~

==================

好了 ~ 问题基本上是解决了 ~ 而用的方法是最简单最直接的方法 , 要配合人手先进行处理嘛 ~ 如果你细心想一想 , 有一些地方其实还有进化空间的 , 首先 , 我之前说过的 “ 先用人手查看有多少个货品种类 ( 这是为了准备数据分类后的数据储存位置做的准备 ) ” 这个问题 , 如果你想知道有多少个项目的话 , EXCEL 的进阶筛选是可以做到的 , 在合适的情况下 , 进阶筛选可以帮上不少忙呢~

还有其它部份可以再作加强的, 不过嘛 ~ 先留一些地方给你研究一下吧 XD

哦 ~ 还有 , 在程序设计的世界里 , 解决问题的方法是肯定超过一种的 , 所以嘛 ~ 如果你想出来的方法跟我的不一样都没关系 , 只要做到目的就好了~ :)

0 留言:

最新回應

Loading...

有事啟奏‧無事閒聊 ~ 哈 ~


米高積遜全復刻 哈利波特 Michael Jackson 妙麗 金曲獎 MJ 迈克尔杰克逊其实没有死!美国CBC电台已证实 哈利波特 hongkong168 蓮花河畔景苑 盧廣仲 鄧麗欣 不想放手New! 陳珊妮 方大同 巨乳排球 痞子英雄 23 東風 蕭閎仁 米高積遜全復刻 上海 倒塌 南王姐妹花 周杰倫 變形金剛2下載 michael jackson 去世 天文台 米高積遜 花拉科茜 天圖佈局 浪卡 耳廓狐 神探俏嬌娃 韶关旭日玩具厂 譚曉風 严妍 僧老少閒 地下天文台 金泰浩 百老匯 巨乳排球 陳振聰 柯柏文 aika 麥可傑克森