因為公司電腦仍是舊版2003所以只有SUMPRODUCT沒有新版的函數雖然能用函數處裡,但是每次系統代出xls檔,手動輸入一次函數求解很慢,而且筆數一多就死當快十分鐘才跑完結果,所以產生用vba處裡的想法
圖片是範例檔,其中三者都第一次出現的資料只要代出一筆就好,後續如果三者都相符第一次出現的資料就代入累加,三者其中之一不相符就代入為新的一筆資料繼續判定累加
看其他參考資料可能要設三個變數 客戶 分店 卡別 三個都相符才去加總消費金額
最後在產出在指定的欄位
1.代入資料 這步沒問題
2.設定變數並判定 這步有點卡住
3.加總 這步應該是類似作法
4.指定產出位置
想請問有沒有高手可以從頭寫一個範例檔讓我學習看看??非常感謝!!!
在 VBA 內下 SQL 處裡即可.
Excel 內的標題要變更為 : [卡別_A卡],[消費金額_A卡],[卡別_副卡],[消費金額_副卡]
CREATE TABLE [工作表1] (
[客戶姓名] Nvarchar(40) NULL ,
[分店名] Nvarchar(40) NULL ,
[卡別_A卡] Nvarchar(40) NULL,
[消費金額_A卡] float NULL ,
[卡別_副卡] Nvarchar(40) NULL ,
[消費金額_副卡] float NULL);
--
INSERT INTO [工作表1] ([客戶姓名], [分店名], [卡別_A卡],[消費金額_A卡],[卡別_副卡],[消費金額_副卡])
VALUES
(N'王小明',N'鳳山店',N'A卡',1000,N'副卡',0),
(N'王小明',N'鳳山店',N'A卡',0,N'副卡',2000),
(N'王小明',N'前鎮店',N'A卡',4000,N'副卡',0),
(N'王小明',N'前鎮店',N'A卡',0,N'副卡',3000),
(N'王小明',N'前鎮店',N'A卡',5000,N'副卡',0),
(N'王小明',N'前鎮店',N'A卡',0,N'副卡',7000),
(N'王小明',N'小港店',N'A卡',6000,N'副卡',0),
(N'王小明',N'小港店',N'A卡',0,N'副卡',8000);
-- A卡
SELECT 客戶姓名,分店名,卡別_A卡 AS 卡別,SUM(消費金額_A卡) as 消費金額
FROM [工作表1]
WHERE 客戶姓名 is not null
GROUP BY 客戶姓名,分店名,卡別_A卡
ORDER BY 客戶姓名,分店名,卡別_A卡
-- 副卡
SELECT 客戶姓名,分店名,卡別_副卡 AS 卡別,SUM(消費金額_副卡) as 消費金額
FROM [工作表1]
WHERE 客戶姓名 is not null
GROUP BY 客戶姓名,分店名,卡別_副卡
ORDER BY 客戶姓名,分店名,卡別_副卡
下載 ACE : Microsoft Access Database Engine 2010 可轉散發套件
請參閱 : Excel 97-2003 Xls files with ACE OLEDB 12.0 using Microsoft.ACE.OLEDB.12.0
請參閱 : Excel 中正确使用SQL的姿势
VBA不會比較快。
可以考慮用陣列公式
或樞紐分析表
。
在你的使用情境下
1.SUMPRODUCT 簡單易用彈性大,缺點是速度慢
2.VBA 速度快,缺點是撰寫/修改困難
有沒有「簡單易用,速度又像 VBA 一樣快」的方式?
有,答案就是「樞紐分析」
如果上圖的結果你可以接受
再來就是要付出的「代價」
就是把原始資料調整成如下格式
如果我的判斷沒錯
樞紐分析絕對會是你現在及未來最佳的選擇