[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『【交通費精算書作成】「往復」選択で入力金額を倍にしたい』(コン)
下記内容にて交通精算書を作成したくマクロを組み込んで、使用しやすいものにしたいと思っておりましたが行き詰まってしまいました。
ご査収お願い致します。
※マクロ初心者となります。
【現状】
E,Fに下記関数を登録して対応しております。
=IF(A11="","",IF(H11="往/復",VLOOKUP($A11,コード表!$B$3:$I$101,3,FALSE)*2,VLOOKUP($A11,コード表!$B$3:$I$101,3,FALSE)))
別フォルダ(コード表)によく使用する交通機関のリスト登録済
(精算書フォルダ)
A:交通機関をプルダウン選択(コード表引用)
※以後B〜が印刷した際に表示される部分となります。
B:月日入力(手入力)
C:交通機関表示(Aの選択にて自動表示)
D:往路・復路・往復のいずれかをプルダウンにて選択
E:電車代表示(Aの選択にて自動表示)
F:バス代表示(Aの選択にて自動表示)
G:E,Fの合計額を自動表示(関数にて計算)
※Dにて『往復』を選択した場合は自動でコード表に入力してある片道金額を2倍表示にしてくれる。
【質問依頼内容】
上記のようにコード表に登録済のものは関数にて対応できたのですが、登録されてない交通機関を使用した場合E、Fを手入力となり関数が消える事となってしまい、Dの『往復』を選択した場合の金額を倍にする機能が使用できなくなってしまします。
希望としては、現状のコード表引用もいかしつつ、手入力した場合もDで『往復』と選択したらE,Fに代金を倍で表示させるように行いたいと思っております。
現状入力している関数+手入力時の作業をマクロで組み込めたらと思っていろいろ試してみたのですが、全く上手くいかずこちらに質問させて頂きました。
行おうとしている事が対応できる事なのか、もっと良い方法などございましたらご教示お願いいたします。
伝えている事がわかりにくかったら申し訳ありません。
初めてこのような投稿をさえて頂くため不備がありましたら教えて下さい。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
説明しやすいようにA〜Gで内容説明行ってしまった為、表示セルと不一致な点が出てしまいました。
申し訳ありません。
=IF(A11="","",IF(H11="往/復",VLOOKUP($A11,コード表!$B$3:$I$101,3,FALSE)*2,VLOOKUP($A11,コード表!$B$3:$I$101,3,FALSE)))
11セルから入力行う表となっております。
H11=D11(往路・復路・往復を選択行うセル)と見て下さい。
(コン) 2019/03/06(水) 15:03
こんばんは ^^ 回答ではありません みなさん、解りにくいのではないでしょうか。 下記のサンプル表の様な形式で、変更前、変更後(結果) を明確に表示して。今少し詳しくご説明されると、多数 の回答者の皆様から、アドバイスがあると思います。 ← 思うだけですけど( ̄▽ ̄;)。。。。。フォルダ。。。ってシートのことですか。?
シート、 清算書
A B C D E F G H 1 2 3 4 5 6 7 8 9 10 交通機関ID 日付 交通機関 往路、復路 電車代 バス代 合計 往復選択 11 10005 190 190
シート、コード表
A B C D E F G H I 1 2 3 番号 機関名 区間A 区間A 区間A 区間A 区間A 区間A 4 10001 交通機関C4 140 280 380 560 740 820 5 10002 交通機関C5 120 280 300 550 760 860 6 10003 交通機関C6 200 210 380 590 710 810 7 10005 交通機関C7 190 230 330 570 760 850 8 10006 交通機関C8 130 270 400 520 710 890 9 10007 交通機関C9 150 240 340 590 790 890 10 10008 交通機関C10 120 220 320 580 760 830 11 10009 交通機関C11 190 290 320 580 750 850 12 10010 交通機関C12 100 240 360 540 790 840 13 10011 交通機関C13 170 260 330 550 730 900 14 10012 交通機関C14 190 240 400 510 760 900 15 10013 交通機関C15 150 220 340 580 790 810 16 10014 交通機関C16 200 240 380 510 780 870 17 10015 交通機関C17 100 270 370 560 740 810 18 10016 交通機関C18 100 260 320 580 720 860 19 10017 交通機関C19 120 260 350 590 720 840 20 10018 交通機関C20 140 270 340 540 740 800 ↓ 101 まで (隠居じーさん) 2019/03/06(水) 23:10
説明例までご丁寧に記入頂きましてありがとうございました。
(コン) 2019/03/07(木) 13:45
A B C D
1 (往路/復路/往復) 100
2
3
C1にすでに金額が入力されている状況で、B1の条件( 往路 / 復路 / 往復 ※プルダウンリスト)を元にB1を『往復』とした時C1の金額を2倍の表示としたい。(C1=200)
C1に条件選択後の計算結果を自動で上書きさせる方法はありますでしょうか。
※マクロ初心者の為、難しい表現になりますとまだ解らない事が多々ある為、
解りやすく教えて頂けましたら助かります。
よろしくお願い致します。
(コン) 2019/03/11(月) 15:31
趣旨から外れた考え方で申し訳ないですが、マクロが必要なんですかねぇ。
C列を常に片道料金と決めて置けばいいんじゃないですか?
後で、往復の料金が必要な場面になったら、 そこで2倍換算する数式を書けば済む話だと思っちゃうのですが・・
(半平太) 2019/03/11(月) 15:58
早速のお返事頂きましてありがとうございます。
説明不足があり申し訳ありません。
他の方にも使用して頂く精算表の作成を行っており
入力後に片道ではなく往復だったと気が付いた場合
『往復』の選択を行うだけで2倍の数字が表示され、元の数字に上書き行う
方法がないかと思いご質問させて頂いておりました。
表は、「日付、交通機関、往復等、バス電車の賃料、合計額」が表記、印刷されるものとなっております。
説明がへたくそで申し訳ありません。
(コン) 2019/03/11(月) 16:38
お名前間違え申し訳ありません。
(コン) 2019/03/11(月) 16:39
名前の事は気にしておりません。よくある事なので。
>他の方にも使用して頂く精算表の作成を行っており >入力後に片道ではなく往復だったと気が付いた場合 >『往復』の選択を行うだけで2倍の数字が表示され、元の数字に上書き行う >方法がないかと思いご質問させて頂いておりました。
では、他の方が間違いなくC列に往復の料金を入れたのに、その後「あっ、往復だよね」ということで 『往復』を選択したりすることは無いんですか?(その時は2倍になっちゃマズい事になりますけど・・)
私には、うまく機能するとは、とても思えないのですが、そんな心配は要らないと言う事なら、 他の回答者のレスをお待ちください。失礼しました。
(半平太) 2019/03/11(月) 16:50
再度、早速のお返事頂きましてありがとうございます。
元々往復の金額で入力していたのに、「往復」を選択する事によって
さらに2倍になってしまうという事ですよね。
確かに!その場合はマズイ事になってしまします・・・
今回はそこは考えない事として、シンプルにすでに金額が入力されている状況で
「往復」と選択した場合2倍の計算結果を自動で上書きさせる方法でマクロ等で
対応行う事ができるのかでお伺いさせていただけましたらと思います。
初めてこのような所でご質問させて頂く為、多々不備がある中
ご丁寧にお返事頂きましてありがとうございました。
他の回答者さまからのレスをお待ちしたいと思います。
(コン) 2019/03/11(月) 17:14
私も運用方法には反対意見ですが、やってみてダメだったらフィードバックもらえるとありがたいです。 1)B列が変更された場合 C列が塗りつぶしの場合、お伺いを立てる。 強行する場合、往復なら2倍、それ以外なら何もしない。 2)C列が変更された場合 問答無用でB列の値とC列の塗りつぶしをクリア 注意点 マクロが無効になっていたらアウト 最初から 往復 と入力されていたらアウト(C列が先に入力されている前提) 手動で色を消されたらアウト 往復から片道になった場合アウト
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range Dim flg As Boolean Application.EnableEvents = False 'B列の行のC列が塗りつぶしされていない場合、B列が往復且つC列の値が数値且つ0より大きい場合、値を2倍にして、C列のセルを塗りつぶし If Not Intersect(Target, Range("B:B")) Is Nothing Then For Each r In Intersect(Target, Range("B:B")) flg = True With r.Offset(, 1) If .Interior.ColorIndex <> xlNone Then flg = MsgBox("既に変更済みの値です。" & .Address(0, 0) & " = " & .Value & "を基準に再計算しますか?", vbYesNo) If flg Then If IsNumeric(.Value) Then If .Value > 0 Then If r.Value = "往復" Then .Value = .Value * 2 .Interior.Color = vbYellow End If End If Else .Interior.Color = vbRed End If End If End With Next r End If 'C列が変更されたら問答無用でB列の値を消す If Not Intersect(Target, Range("C:C")) Is Nothing Then With Intersect(Target, Range("C:C")) .Interior.ColorIndex = xlNone .Offset(, -1).ClearContents End With End If Application.EnableEvents = True End Sub
(稲葉) 2019/03/12(火) 09:19
こんにちは。
今、新規でつくっているものなのであれば、ちゃんと使いやすいものを 作ったほうがいいのではないかと思います。
この件は、交通費について、単価、数量、金額の列を 作ったほうがいいとおもいますけど。
往復の場合、数量を変更すればいいだけなので。
往復割引を考慮不要の交通費精算ってなんかうらやましいでね。
(でれすけ) 2019/03/12(火) 10:25
お忙しい中ご回答頂きましてありがとうございました。
早速、頂いたマクロを組み込んで行ってみた所、やりたかった動作を行う事が出来ました!!
もっと簡単な事なのかと思っていただのですが…私には思っていた以上に複雑なマクロで
こちらでご質問させて頂き回答頂けて嬉しく思っております。
ただ、こちらを参考に実際使用する精算書に組み込めば!と思い行ってみたのですが、上手く使用できず…
("B:B")・("C:C")に入力する列を変更すればよいだけなのかなと思っていただのですが・・・
下記のような場合だとまた使用できないものになってしまうのでしょうか。
頂いたマクロもあまり理解出来ておらずで…
もしよろしければ、ここを変えれば等お返事頂けましたらと思います。
【使用精算書】
シート?@〈コード表〉
A B C D E F G H
1| ?a@| 交通機関 | 電車 | バス | 航空 |日当|宿泊| 合計 |
2| 1 新宿〜東京 194 194
3| 2 新宿〜横浜 550 550
4| 3 新宿〜池袋東口 154 206 360
〜
100|101
シート?A〈精算書〉
(A) | BCD | EFG | HI | JK | LMN | OP | QR | ST | UVW | ~9| 10|(コード表選択)|月日|交通機関|往・復|電車|バス|航空|日当|宿泊| 合計 11| (?aj1 3/1 新宿〜東京 往路 194 194 12| (?aj3 3/2 新宿〜池袋東口 往/復 308 412 720 13| (選択なし手入力) 3/3 品川〜横浜 往路 288 288 14| (選択なし手入力) 3/4 品川〜横浜 往/復 576 576 〜 18| 【計】 1366 412 \1,778 〜 24|
※ 他事項記載の関係もあり複数列で一つのセルとしております。
※ 経理提出の際、印字される範囲は、B1〜W24となります。
※ A11〜A17まではシート?@で作成したコード表(?ajをプルダウン選択できるようになっています。
※ Aで選択行った場合は「交通機関」「電車」「バス」「航空」賃料が自動入力されます。
※ 月日は手入力、「往復(選択)」「日当」「宿泊」はプルダウン選択出来る様にしています。
(「往・復」は『往路』『復路』『往復』のいずれかで選択可能)
※ Aでコード選択した場合『往復』を選択すると自動で賃料2倍になる関数をJK/KMN/OP
にそれぞれ設定しています。
↓
《 例/A11JKセルの場合 》
=IF(A11="","",IF(H11="往/復",VLOOKUP($A11,コード表!$B$3:$I$100,2,FALSE)*2,VLOOKUP($A11,コード表!$B$3:$I$100,2,FALSE)))
(コン) 2019/03/12(火) 14:50
お返事頂きましてありがとうございます。
上記の内容でやはり難しいようであれば
頂きました内容をご参考にさせていただけましたらと思います。
自分が思っている事だけだと考え方も狭くなってしまう為、
ご参考意見頂けとてもありがたく思います。
(コン) 2019/03/12(火) 14:54
もともと無理やり作ったものなので、自分で管理できない場合は使用を控えたほうがいいと思いますよ。 最初に書きましたが、現状の運用方法は反対の立場です。 ご自身で頑張ってください。 (稲葉) 2019/03/12(火) 15:07
早速のご返答ありがとうございます。
やはり何かあった場合、修正等行う事も私自身では難しい為
違う方法にて検討行っていきたいと思います。
ご回答作成頂きましたマクロは
別の機会で似たような事がある場合に参考に
させて頂きます。
行おうとしていた事が運用方法的にあまりよくないなと
気が付く事も出来ました為、お返事頂けて感謝しております。
迅速にご対応頂き、最後までご丁寧にお返事頂きまして
ありがとうございました。
(コン) 2019/03/12(火) 15:14
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.