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

哦 ~ 還有 , 在程式設計的世界裡 , 解決問題的方法是肯定超過一種的 , 所以嘛 ~ 如果你想出來的方法跟我的不一樣都沒關係 , 只要做到目的就好了~ :)

2 留言:

向陽‧紙唯 說...

其實用判斷正確 同 if ... else
不是更好嗎?

威廉先生 說...

Hi 網~頁~迷

你所指的是那個部份 !?

最新回應

Loading...

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


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