[[20150723140724]] 『IF VLOOKUP関数について 』(海人) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『IF VLOOKUP関数について 』(海人)

金融機関に依頼する振込依頼書の手数料について、Excelを使って簡単に出したいのですが?
今までは電卓を使って手入力でしたので、すごく時間がかかったり間違いが多くて困っています。パソコン初心者なものですから良いアドバイスをいただきたいと思います。

表は以下のようになっています。
シート1
A列 B列 C列 D列 E列
a社 d銀行 手数料 金額
b社 e銀行
c社 g農協

シート2 30540< 30540≧ 30216< 30216≧
A列 B列 C列 D列 E列 F列
d銀行 540円 756円 g農協 216円 432円
e銀行 540円 750円 h農協 216円 432円
f銀行 540円 750円 i農協 216円 432円

シート1のD列にシート2にある手数料を入力したいのですが、シート1のB列にある金融機関名がシート2のA列に
ある場合、シート1のE列の金額が30540円未満の場合はB列の手数料を、30540円以上の場合はC列の手数料を選択、もしくはD列に金融機関名がある場合、シート1のE列の金額が30216円未満の場合はE列の手数料を、30216円以上の場合はF列の手数料を選択するようにしたいのですがいい方法はありませんか? 長くなった割にはうまく説明出来ませんでしたがよろしくお願いします。取引金融機関の都合上手数料が別々になっています。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 回答ではないのですが、シート2のレイアウト、金融機関は A列一本のほうがやりやすくないですか?
 少なくとも、金融機関の検索は1つですむわけですから。
 D列あたりに、上限下限のタイプをいれておけば それを見て判断できますよね。

 なんだか、わざわざ、複雑な式にしましょうといったレイアウトのような気がしますねぇ。 関数素人としては。
 もちろん、専門家の皆さんにとっては、少しは歯ごたえがあって好ましいのかもしれませんが。

(β) 2015/07/23(木) 19:36


 関数の回答が出るまでのつなぎでVBA。(レイアウトは提示されたもの)

 Sub Test()
    Dim c As Range
    Dim dic As Object
    Dim ck As Long
    Dim col As Variant
    Dim w As Variant

    Application.ScreenUpdating = False

    Set dic = CreateObject("Scripting.Dictionary")
    ck = 30540
    With Sheets("Sheet2")
        For Each col In Array(1, 4)
            For Each c In .Range(.Cells(1, col), .Cells(1, col).End(xlDown))
                dic(c.Value) = Array(ck, c.Offset(, 1).Value, c.Offset(, 2).Value)
            Next
            ck = 30216
        Next
    End With

    With Sheets("Sheet1")
        For Each c In .Range("B1", .Range("B" & Rows.Count).End(xlUp))
            If dic.exists(c.Value) Then
                w = dic(c.Value)
                If c.Offset(, 2).Value < w(0) Then
                    c.Offset(, 1).Value = w(1)
                Else
                    c.Offset(, 1).Value = w(2)
                End If
            Else
                c.Offset(, 1).ClearContents
            End If
        Next
    End With

 End Sub

(β) 2015/07/23(木) 20:42


いかにも素人っぽいですが、考えてみましたので。

 =IFERROR(IFERROR(VLOOKUP(B1,Sheet2!$A$1:$C$50,IF(E1<30540,2,3),0),VLOOKUP(B1,Sheet2!$D$1:$F$50,IF(E1<30216,2,3),0)),"")

(マナ) 2015/07/23(木) 21:22


 関数素人ですが、マナさんアップ済みの VLOOKUP を無理やり避けて練習。結果は長くなってしまいました。

 =IFERROR(INDEX(Sheet2!B:C,MATCH(B1,Sheet2!A:A,0),IF(E1<30540,1,2)),IFERROR(INDEX(Sheet2!E:F,MATCH(B1,Sheet2!D:D,0),IF(E1<30216,1,2)),""))

(β) 2015/07/24(金) 08:30


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.