[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『土日で請求単価を変える』(コウケイ)
ユーザーフォームを利用して伝票入力をしています。
今回、一部商品が平日と土日で単価改定がありました。
商品コードで単価を別Sheetから自動表示しておりますが、「土・日」のみユーザーフォームの日付入力を基に土日を判断して、単価を変えることができないでしょうか。
夏季価格とそれ以外の単価変更はできているのですが、よくわかっていませんので、よろしくお願いいたします。
Sheet1 請求書・Sheet2 請求入力シート・Sheet3("データ")単価表です。
TextBox1に日付、TextBox6に商品コード、TextBox7に商品名、TextBox9に小売価格、TextBox10に請求金額が表示されます。
Sheet3("データ")のA列に商品コード、B列に商品名、C列に小売価格、E列に請求金額、F列に夏季追加金額が入力されています。今回からの「土・日」価格をG列に入力しておき、土日にはF列の金額をTextBox10に反映できないでしょうかよろしくお願いいたします。
Private Sub TextBox6_Change()
Dim r As Range
'登録
Set r = Worksheets("データ").Range("A:A").Find(TextBox6)
If r Is Nothing Then
TextBox7.Text = "半角英数カタカナ"
TextBox9.Text = "金額登録"
CommandButton3.Visible = True
Else
TextBox7.Text = r.Offset(0, 1).Value
TextBox9.Text = r.Offset(0, 2).Value * Val(TextBox5.Value)
TextBox10.Text = r.Offset(0, 4).Value * Val(TextBox5.Value)
If Worksheets("請求表紙").Range("W4").Value >= 6 _ And Worksheets("請求表紙").Range("W4").Value <= 8 Then TextBox11.Text = r.Offset(0, 5).Value * Val(TextBox5.Value) End If CommandButton3.Visible = False
End If
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows10 >
>TextBox1に日付 ココの「日付」がどんな形式なのかに寄りますでしょう [YYYY/M/D]とか[YYYYMMDD]とか [M/D]とか[MMDD]とか [D]だけとか・・・ あ、でも >Worksheets("請求表紙").Range("W4").Value は月(6月〜8月だったら夏季価格)だとしたら TextBox1は[D]なのかな・・・?
その辺がちょっと情報不足です。 いずれにせよ 夏季価格と土日価格の関係(優先順位とか複合計算とか)まで考慮しない範囲で言えば、 Weekday関数等でTextBox1(と必要ならW4セル)の日付から曜日を判定 という流れでしょうかねぇ
(白茶) 2016/10/07(金) 14:28
(コウケイ) 2016/10/07(金) 14:59
であれば素直に
If Weekday(TextBox1.Text) = 1 Or Weekday(TextBox1.Text) = 7 Then TextBox10.Text = r.Offset(0, 6).Value * Val(TextBox5.Value) End If
とかで良いのでしょう。
但し、質問の範疇を超えた心配をするなら、 TextBox6のChangeイベント後に、 ユーザーがTextBox1の日付を変えた場合の措置が必要なのかも知れません。 あるいは、日付・商品名の入力後はTextBox1をロックしてしまうとか。
(白茶) 2016/10/07(金) 15:41
記述していただいたコードをTextBox6にコピペしたのですが、デバックが発生してしまいました。
まだルールがよくわかっていなくてすみません、どのようにコードを記述すればよいのか教えてください。
(コウケイ) 2016/10/07(金) 16:23
ええっと、
Private Sub TextBox6_Change() Dim r As Range '登録 Set r = Worksheets("データ").Range("A:A").Find(TextBox6) If r Is Nothing Then TextBox7.Text = "半角英数カタカナ" TextBox9.Text = "金額登録" CommandButton3.Visible = True Else TextBox7.Text = r.Offset(0, 1).Value TextBox9.Text = r.Offset(0, 2).Value * Val(TextBox5.Value) If Weekday(TextBox1.Text) = 1 Or Weekday(TextBox1.Text) = 7 Then '追記 TextBox10.Text = r.Offset(0, 6).Value * Val(TextBox5.Value) '追記 Else '追記 TextBox10.Text = r.Offset(0, 4).Value * Val(TextBox5.Value) 'ココは元々あった文 End If '追記 If Worksheets("請求表紙").Range("W4").Value >= 6 And Worksheets("請求表紙").Range("W4").Value <= 8 Then TextBox11.Text = r.Offset(0, 5).Value * Val(TextBox5.Value) End If CommandButton3.Visible = False End If End Sub
という感じです。
但し、 >Weekday(TextBox1.Text) これには現状、TextBox1の文字列が「ホントに日付を表す文字列かどうか」の判定がありません。 TextBox1の値によってはエラーが出ますので、IsDate(TextBox1.Text)とかで、その回避が必要なのですが、 それは本来TextBox1のBeforeUpdateイベントでコントロールすべきなのかなと思います。 その上でTextBox6_Changeの中でもTextBox1が空っぽかどうかの判断も必要ですかね。
(白茶) 2016/10/07(金) 16:39
(コウケイ) 2016/10/07(金) 16:58
(コウケイ) 2016/10/11(火) 11:52
1)土日での請求金額算出に
If Weekday(TextBox1.Text) = 1 Or Weekday(TextBox1.Text) = 7 Then
TextBox10.Text = r.Offset(0, 6).Value * Val(TextBox5.Value) Else TextBox10.Text = r.Offset(0, 4).Value * Val(TextBox5.Value)
を教えていただき完結したのですが、データ(Sheet)のE列とG列との合計して計算しようと思うので。
TextBox10.Text = (r.Offset(0, 4).Value + r.Offset(0, 6).Value) * Val(TextBox5.Value)
に変えたのですが、TextBox6 に入力した数字を間違えたので、入力した数字をデリーとするとエラーが発生します(実行時エラー ’13’ 型が一致しません) 何が間違っているのかわかっておりませんので、教えてください。
2)6月・7月・8月の夏季特別価格と土日価格(上記のように平日金額との差額を合計した金額)を判断して請求額を出すことができないでしょうか。
1: 6・7・8月での平日と土日での請求金額
2: それ以外の月での平日と土日での請求金額
よろしくお願いいたします。
(コウケイ) 2016/10/17(月) 15:36
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.