標題:
[發問]
多條件的VLOOPUP
[打印本頁]
作者:
missbb
時間:
2013-11-23 23:04
標題:
多條件的VLOOPUP
各大大:
請問如何將表1的資料, 以函數放置在表2, 因為要以兩個條件使用VLOOKUP (第一組條件時段及薪金, 第二組是條件時段及加班)
抱歉因權限不足未能上傳檔案:(
表1
A B C
時段 金額
薪金 2013年1月-2月 10000
2013年3月-5月 20000
2013年5月 25000
加班 2013年1月-5月 1000
表2
A B C
時段 薪金 加班
2013年1月 10000 1000
2013年2月 10000 1000
2013年3月 20000 1000
2013年4月 20000 1000
2013年5月 25000 1000
作者:
sunnyso
時間:
2013-11-23 23:53
回復
1#
missbb
不能直接上載excel檔, 要壓成ZIP再上載.
作者:
Hsieh
時間:
2013-11-24 09:36
回復
1#
missbb
表1的資料中,時段用區段方式記錄,不合乎資料庫準則
要做分月查詢是不能正確得到
作者:
ML089
時間:
2013-11-24 12:21
表1
A B C
時段 金額
薪金 2013年1月-2月 10000
2013年3月-
5月
20000
2013年5月 25000
加班 2013年1月-5月 1000
紅色字 5月是否應改為 4月
作者:
missbb
時間:
2013-11-24 20:08
回復
4#
ML089
:lol 是呢, 打錯了.
作者:
nissin
時間:
2013-11-25 01:45
這個用VLOOKUP太複雜了
用VBA處理可能會比較簡單
作者:
missbb
時間:
2013-11-25 21:25
回復
6#
nissin
明白, 已在學習中!:P
作者:
nissin
時間:
2013-11-26 18:41
試試這個
Sub copydata()
Dim s1 As Long, s2 As Long, s3 As Long, d1 As Long, d2 As Long
Dim wages As Long, OT As Long
i = 1
While Sheets(1).Cells(i, 1) <> "薪金"
i = i + 1
Wend
wages = i
While Sheets(1).Cells(i, 1) <> "加班"
i = i + 1
Wend
OT = i
For i = wages To Sheets(1).UsedRange.Rows.Count
s1 = Left(Sheets(1).Cells(i, 2), 4)
s2 = Mid(Sheets(1).Cells(i, 2), 6, InStr(1, Sheets(1).Cells(i, 2), "月") - 5 - 1)
If InStr(1, Sheets(1).Cells(i, 2), "-") <> 0 Then
s3 = Mid(Sheets(1).Cells(i, 2), InStr(1, Sheets(1).Cells(i, 2), "-") + 1, Len(Sheets(1).Cells(i, 2)) - (InStr(1, Sheets(1).Cells(i, 2), "-") + 1))
Else
s3 = 0
End If
For j = 2 To Sheets(2).UsedRange.Rows.Count
d1 = Left(Sheets(2).Cells(j, 1), 4)
d2 = Mid(Sheets(2).Cells(j, 1), 6, InStr(1, Sheets(2).Cells(j, 1), "月") - 1 - 5)
If d1 * 100 + d2 >= s1 * 100 + s2 Then
If s3 <> 0 Then
If d1 * 100 + d2 <= s1 * 100 + s3 Then
If i >= OT Then
Sheets(2).Cells(j, 3) = Sheets(1).Cells(i, 3)
Else
Sheets(2).Cells(j, 2) = Sheets(1).Cells(i, 3)
End If
End If
Else
If i >= OT Then
Sheets(2).Cells(j, 3) = Sheets(1).Cells(i, 3)
Else
Sheets(2).Cells(j, 2) = Sheets(1).Cells(i, 3)
End If
End If
End If
Next j
Next i
End Sub
複製代碼
作者:
missbb
時間:
2013-11-26 22:35
回復
8#
nissin
多謝您呀 !:D
作者:
Hsieh
時間:
2013-11-26 23:30
本帖最後由 Hsieh 於 2013-11-26 23:43 編輯
回復
1#
missbb
你是要整理資料成為資料庫型態吧
Sub ex()
Dim OT$, Ary(), r&, y$, a$, i%, s&
Set dic = CreateObject("Scripting.Dictionary")
Set dic1 = CreateObject("Scripting.Dictionary")
r = 2
With Sheets(1)
Do Until .Cells(r, 2) = ""
OT = IIf(.Cells(r, 1) <> "", .Cells(r, 1), OT)
y = Split(.Cells(r, 2), "年")(0)
a = Split(.Cells(r, 2), "年")(1)
If InStr(a, "-") > 0 Then
ar = Split(a, "-")
For i = Val(ar(0)) To Val(ar(1))
dic(y & "年" & i & "月" & OT) = .Cells(r, 3)
dic1(y & "年" & i & "月") = ""
Next
Else
dic(y & "年" & a & OT) = .Cells(r, 3)
n = .Cells(r, 2)
dic1(.Cells(r, 2) & "") = ""
End If
r = r + 1
Loop
ay = Array("時段", "薪金", "加班")
ReDim Preserve Ary(s)
Ary(s) = ay
s = s + 1
For Each ky In dic1.keys
ReDim Preserve Ary(s)
Ary(s) = Array(ky, dic(ky & ay(1)), dic(ky & ay(2)))
s = s + 1
Next
With Sheets(2)
.Columns("A:C") = ""
.[A1].Resize(s, 3) = Application.Transpose(Application.Transpose(Ary))
End With
End With
End Sub
複製代碼
作者:
sunnyso
時間:
2013-11-29 21:39
不用VBA也可以, H~O欄爲輔助欄, 答案在Q~S欄
[attach]16902[/attach]
附件需要用WinRAR V5.0才能開啓
[attach]16901[/attach]
回復
4#
ML089
回復
5#
missbb
回復
6#
nissin
回復
10#
Hsieh
作者:
sunnyso
時間:
2013-11-29 21:54
回復
11#
sunnyso
[attach]16903[/attach]
作者:
ML089
時間:
2013-12-2 09:08
回復
1#
missbb
回復
11#
sunnyso
非規則資料會讓公式複雜化,
有時非規則資料是讓資料美觀,可增加輔助欄整理成標準資料塊,也可用簡單公式完成。
[attach]16924[/attach]
F2
=SUMPRODUCT((F$1=LOOKUP(ROW($2:$7),ROW($2:$7)/($A$2:$A$7<>""),$A$2:$A$7))*
(--($E2&"1日")>=--(LEFT($B$2:$B$7,FIND("-",$B$2:$B$7&-1)-1)&"1日"))*
(--($E2&"1日")<=--(LEFT($B$2:$B$7,5)&SUBSTITUTE(SUBSTITUTE(RIGHT($B$2:$B$7,3),"-",),"年",)&"1日")),$C$2:$C$7)
右拉下拉複製公式(黃色區)
作者:
missbb
時間:
2013-12-2 21:08
回復
13#
ML089
EXCEL真係變化多端, 會試試看!多謝各位大大!:D
作者:
tccivy
時間:
2013-12-7 01:25
EXCEL千變萬化再加上VBA有得學囉
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)