• 締切済み

Select Case の使い方について

はじめて質問します。 Windows XP  Access2000 の環境で作業しています。 お客様より頂いたCSVデータをもとに商品を出荷する出荷指示書を作成しています。 これまでは全てのお客様(約500店舗)に毎日出荷が基本でしたが、都合により50店舗ほど 週2回の出荷になりました。 実際の作業現場へ指示書を回す際に指示書の所定の位置に Select Case 使ってテキストを出力したいのですが最初のページがうまくいきません。 最初のページに[該当曜日]、[店番]があってもテキストが表示されないのです。その後のページには 正常に出力されます。 初心者ゆえの乱文を容赦願いまして、何が原因なのかご指導いただけば幸いです。 Private Sub Report_Page() Select Case [店番] & "#" & Weekday(Date) Case "10121#2" テキスト66 = "水曜出荷"   Case "10121#3" テキスト66 = "水曜出荷" Case "10121#4" テキスト66 = "出荷なし" Case "10121#5" テキスト66 = "土曜出荷" Case "10121#6" テキスト66 = "土曜出荷" Case "10121#7" テキスト66 = "出荷なし" Case "52114#2" テキスト66 = "火曜出荷" Case "52114#3" テキスト66 = "火曜出荷" Case "52114#4" テキスト66 = "出荷なし" Case "52114#5" テキスト66 = "金曜出荷" Case "52114#6" テキスト66 ="出荷なし" Case "52114#7" テキスト66 = "出荷なし"      ・      ・      ・  このような曜日と地域(翌着、中1日着等)による処理が50件ほど続きます。      ・      ・     End Select

みんなの回答

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.4

解決されてましたらスルーで レポートについては詳しくないのですが > Private Sub Report_Page() 処理を記述するイベントはここで良いですか? うまくいっていると思われる2ページ以降ズレていたりしませんか? 例えば、1ページ目のものが2ページ目になっていたりしませんか? ページフッタのフォーマット時とかで処理してみては? Report_Page は描画系のみの様な記述がヘルプにあります。 やるとすれば、 Private Sub Report_Page()   Dim sS As String   Select Case XXXX     Case xx: sS = "水曜出荷"     ・・・・   End Select   ' テキスト66 の情報を入手設定して、そこに Print   With Me.テキスト66     Me.FontName = .FontName     Me.FontSize = .FontSize     Me.CurrentY = .Top + 20 ' ★     Me.CurrentX = .Left + .Width - Me.TextWidth(sS) - 15 ' ★   End With   Me.Print sS ※ ★:20 とか 15 は、印字位置微調整用数値 以下余談で Select Case の Case 処理が1行しかない場合、以下の様な記述も出来ます。 見易い記述にされたらと思います。 Select Case [店番] & "#" & Weekday(Date)   Case "10121#2": テキスト66 = "水曜出荷"   Case "10121#3": テキスト66 = "水曜出荷"   Case "10121#4": テキスト66 = "出荷なし"   Case "10121#5": テキスト66 = "土曜出荷"   Case "10121#6": テキスト66 = "土曜出荷"   Case "10121#7": テキスト66 = "出荷なし"   Case "52114#2": テキスト66 = "火曜出荷" ・・・・ また、以下は Select Case を使わない方法になりますが、参考程度で テーブル「T出荷要領」なるものを新設します (このテーブルには、毎日出荷以外の情報を入れておきます) フィールドは、 「an」:オートナンバ 「店番」:長整数に仮定 「曜日」:長整数 「対応」:以下のパターンにより変わってきます 「an」を主キーとし、「店番」「曜日」に重複ありのインデックスを付けるか、 「an」は設けず「店番」「曜日」の2つで主キーとするか パターン1)「対応」:テキスト型 サンプルデータは、 an 店番 曜日 対応 1 10121 2  水曜出荷 2 10121 3  水曜出荷 3 10121 5  土曜出荷 4 10121 6  土曜出荷 5 52114 2  火曜出荷 処理としては、 ・DLookup("店番","T出荷要領","店番=" & [店番]) で、毎日出荷の店番なのか判別します。 ・店番があったら テキスト66 = Nz(DLookup("対応","T出荷要領","店番=" & [店番] & " AND 曜日=" & Weekday(Date)),"出荷なし") ※ 上記 DLookup 2発で、Select Case は不要になります。 ※ また、毎日出荷の情報も盛り込んでおくと、1発目の DLookup は不要になります。 ※ 現状の Select Case の Case Else でもそうだと思いますが、毎日出荷する時には テキスト66 = Format(Date + 1, "aaa") & "曜出荷" とでもすれば、翌日で曜日が作られます。 パターン2)「対応」:長整数 サンプルデータは、 an 店番 曜日 対応 1 10121 2  4 2 10121 3  4 3 10121 5  7 4 10121 6  7 5 52114 2  3 処理としては、 ・DLookup("店番","T出荷要領","店番=" & [店番]) で、毎日出荷の店番なのか判別します。 (ここまでは、上記と同じです) ・店番があったら、 1~7はそのままの曜日扱いで、データが無かったら8とし、Choose で切り分け テキスト66 = Choose(Nz(DLookup("対応","T出荷要領","店番=" & [店番] & " AND 曜日=" & Weekday(Date)),8), _    "日曜出荷","月曜出荷","火曜出荷","水曜出荷","木曜出荷","金曜出荷","土曜出荷","出荷なし") ※※ 上記への変更で、都合により・・・は、テーブルのデータ増減で対応できます   (都度、VBA を変更する必要はなくなります) 発展した例その1) ・パターン1の方法をとるものとします。 ・毎日出荷する店番情報は持ちませんが、毎日用にデータを盛り込んでおきます サンプルデータは、 an 店番 曜日 対応 1   0 1  月曜出荷 2   0 2  火曜出荷 3   0 3  水曜出荷 4   0 4  木曜出荷 5   0 5  金曜出荷 6   0 6  土曜出荷 7   0 7  日曜出荷 8 10121 2  水曜出荷 9 10121 3  水曜出荷 10 10121 5  土曜出荷 11 10121 6  土曜出荷 12 52114 2  火曜出荷 ・1発目の DLookup の戻り値が Null ならば、次の DLookup 時の店番を0で抽出します ★★ = Nz(DLookup("店番","T出荷要領","店番=" & [店番]),0) テキスト66 = Nz(DLookup("対応","T出荷要領","店番=" & ★★ & " AND 曜日=" & Weekday(Date)),"出荷なし") 発展した例その2) ・xx曜出荷・・・って何日よ ・パターン2の方法で、「対応」の設定値の意味を変更します。 (何日後・・・・の値を入れておきます) ・毎日出荷する店番情報は持ちませんが、毎日用にデータを盛り込んでおきます サンプルデータは、 an 店番 曜日 対応 1   0 1  1 2   0 2  1 3   0 3  1 4   0 4  1 5   0 5  1 6   0 6  1 7   0 7  1 8 10121 2  2 9 10121 3  1 10 10121 5  2 11 10121 6  1 12 52114 2  1 ・1発目の DLookup の戻り値が Null ならば、次の DLookup 時の店番を0で抽出します ★★ = Nz(DLookup("店番","T出荷要領","店番=" & [店番]),0) ☆☆ = Nz(DLookup("対応","T出荷要領","店番=" & ★★ & " AND 曜日=" & Weekday(Date)),-1) If (☆☆ < 0) Then   テキスト66 = "出荷なし" Else   テキスト66 = Format(Date + ☆☆, "m/d aaa") & "曜出荷" End If ※ ★★、☆☆には、適当な変数名を ※※ 後は、テーブル「T出荷要領」メンテナンス用にフォーム1つでも作っておけば・・・

itabasi350
質問者

お礼

chayamatiさま、30246kikuさま 貴重なご回答ありがとうございます。 未だ問題は解決しておりませんが皆様から頂いたご指導を参考にもう少し 勉強してまいります。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.3

>最初のページに[該当曜日]、[店番]があってもテキストが表示されないのです。 最初の店番分がそっくり抜けると言うことでよろしいですね Do Loop命令を使っていませんか 1.loopに入る前に[STOP]命令を入れる 2.実行 3.[STOP]命令の位置で一時停止してコードを表示します  ここで店番または日付にマウスカーソルを合わせると、その値が表示されます 4.F8キー押下で1ステップづつプログラムが進みます。 これでLoopの状況が確認できます。 ご参考までに、 コーディングに実数字を使用するのは感心できません 例えば消費税率ですが4月より変更になりました。 また年内に変更になるようですね。 変更のつどプログラムの修正が必要になります。 プロフィールテーブルを用意し、ここへ会社名、住所に加えて 有効期限、税率のフィールドを定義します コーディングではこのフィールドを参照する事になります。 今回ですが、店番別出荷日テーブルを作成しこれを参照するようにします。 参照方法は テーブルのデザインビューのルックアップタグからコンボボックスで参照します この方法でSelect区は不用です。 店番出荷日テーブル ・ID ・店番とweekday ・出荷日(テキスト型)

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

>と記述した店番以外の全ての店番を >Case Else…に記述するのでしょうか? Case で設定した条件以外の全てのコードが Case Else の式で実行されますので店番の記述は必要ありません。

itabasi350
質問者

補足

拙い質問に早々のご回答ありがとうございます。 Case Else テキスト66 = ""   抜けていた上コードを記述して表示されるようになりました。 しかし、プレビューで確認すると最初のページだけは正常な判定が できていないようです。 >End Selectの前に >Case Else >テキスト66 = [店番] & "#" & Weekday(Date) 先に教えていただいた上記記述で確認すると 1ページ目以外は 10121#2 のように店番と作業日の曜日を正確に 表示されます。 1ページ目のみ違う店番が表示されてしまいます。 レコードソース(クエリ)も確認してみましたが正常なデータでした。 他に原因があるのでしょうか? 宜しくお願いします。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

原因は分かりませんが、検証は可能です。 End Selectの前に Case Else テキスト66 = [店番] & "#" & Weekday(Date) として、何が入力条件になってるか確認してください。 対応するCase文がないのか、誤入力があるかもしれません。

itabasi350
質問者

補足

 mshr1962 様 早々のご回答ありがとうございます。    ご指摘どおり Case Else… の記述が抜けておりました。  しかし、この場合   Case "10121#2" テキスト66 = "水曜出荷" Case "10121#3" テキスト66 = "水曜出荷" Case "10121#4" テキスト66 = "出荷なし" Case "10121#5" テキスト66 = "土曜出荷" Case "10121#6" テキスト66 = "土曜出荷" Case "10121#7" テキスト66 = "出荷なし" と記述した店番以外の全ての店番を Case Else…に記述するのでしょうか?

関連するQ&A

  • Select Case文についてご教授お願いします。

    助けて下さい。Select Case文についてご教授お願いします。現在VB2008にてプログラムを作成しているのですが、どうにも煮詰まってしまいました。 作成内容は、Excelの任意のSheetから文字をVB上のTextBox1~50に呼び出し、その内いくつかをCheckBoxとButtonを使用してRichTextBox1に表示させると共に、TextBox51に入力した文字をExcelから呼び出した任意の文字に対応したセルへ保存というものです。Excelからの呼び出しにIf文を使用しているため、同一プロシージャ内で別のIf文を使用してしまうと、先のIf文で決めた変数が反映されないためSelect Case文を使用して保存をさせようとしているのですが上手くいきません。以下に現在のコードを記載しますのでよろしくお願いいたします。 Private Sub Button1_Click~ Excel取得コード If RadioButton1.Checked = True AndAlso RadioButton13.Checked = True Then 'Sheetと列を選択 tuki = CType(Book.Worksheets.Item(2), Microsoft.Office.Interop.Excel.Worksheet) 'Sheet情報 COLUMN1 = "B" '列1情報 COLUMN2 = "F" '列2情報 ・ ・ ・ End If 'ここから先は指定したTextBoxをRichTextBoxに表示(先のIf文内の変数は未使用) RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If If Me.CheckBox2.Checked = True ThenIf RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text End If ・ ・ ・ End If 'ここから保存指示=エラー箇所 Select Case tuki.Range(COLUMN1 & "3").Value Case RichTextBox1.text = tuki.Range(COLUMN1 & "3").Value tuki.Range(COLUMN2 & "3").Value = TextBox51.Text Book.Save() という感じで作成しているのですが「String "" から型 'Boolean' への変換は無効です」と表示されます。 他のケースではIf文の変数をSelect Caseに対応できたので、この方法を選択しました。 基本的にSelect Caseの使い方が誤っていると思うのですが解決策が見つかりませんでした。 他の方法も含めて、良い案がありましたらご教授お願いいたします。 長文申し訳ありません。

  • 同じような方いますか?

    例えば『14日』=『火曜日』というように、この数字の日は〇曜日と思い込んでしまう方いらっしゃいますか? 私の場合下一桁が、 3…水曜日 4…火曜日 5…月曜日 6…水曜日 7…日曜日 8…金曜日 9…土曜日 こんな感じでイメージが定まってるんですが… この感覚が強すぎて、『今日は〇日だから〇曜日』と勘違いしてしまいます。 皆様は曜日と数字が強く結びつきますか?

  • 好きな曜日は何ですか?

    好きな曜日は何ですか? 1.月曜日 2.火曜日 3.水曜日 4.木曜日 5.金曜日 6.土曜日 7.日曜日 僕は、5の金曜日と7の日曜日が好きです。 皆さんの好きな曜日は何ですか?

  • 火曜日から60日後は、なぜ土曜日になるのでしょう?

    数学(もしくは算数)の得意な方にお尋ねします。  なぜだか、火曜日から60日後は、必ず土曜日になります。なお、火曜日から60日後を数える際、1日目は水曜日という風に、火曜日自体を算入しません。  このように、ある期間(たとえば、15、30日)後に、必ず土曜日となるようにするには、どの曜日から始めればよいかを求める方法(計算のし方)を教えて頂けますでしょうか。  一週間は7日ある、ということがポイントなのだろうとは思っておりますが。。

  • 【再アンケート】好きな曜日は何ですか?

    2021年10月28日に投稿した「好きな曜日は何ですか?」の再アンケートです。 好きな曜日は何ですか? 1.月曜日 2.火曜日 3.水曜日 4.木曜日 5.金曜日 6.土曜日 7.日曜日 僕は、5の金曜日と7の日曜日が好きです。 皆さんの好きな曜日は何ですか?

  • 大至急教えてください

    お尋ねします。 エクセルで月曜から土曜日まで各日に担当の名前を入れて 一か月の表にランダムに1→土曜日・ 2→水曜日・ 3→ 火曜日のように 曜日を入力すると、担当者の名前が表示されるようにするにはどうしたら いいでしょうか? 宜しくお願い致します。

  • Javascriptで曜日毎に自動でタブ切り替え

    曜日ごとにタブ切り替えを自動でおこなう方法 HPで曜日ごとに自動でタブを切り替える方法などありますでしょうか? こちらは複数ページを用意し各ページへリンクを飛ばすのではなく、単一ページでその内容を随時変えたいです。 現在、Javascriptを使い曜日の取得をおこなっております。 またその曜日ごとに合わせたタブを作り、タブの内容を曜日ごとに分けております。 日付は1週間毎自動で取得しますが、タブが一定の曜日を選択した状態で固定されてしまっています。(水曜日にサイトを訪問しても月曜日のタブが選択されている状態。) こちらを曜日に合わせたタブを自動で選択するように出来ますでしょうか?(水曜日にサイトを訪問したら最初から水曜日のタブが選択されている状態。) (例) 【現在】 ・月曜日→(月曜日のタブが選択されている状態で表示) ・火曜日→(月曜日のタブが選択されている状態で表示) ・水曜日→(月曜日のタブが選択されている状態で表示) 【理想】 ・月曜日→(月曜日のタブが選択されている状態で表示) ・火曜日→(火曜日のタブが選択されている状態で表示) ・水曜日→(水曜日のタブが選択されている状態で表示) できればPHPなどは使わず、JavaScriptで実装したいと考えております。 参考のサイトなども教えて頂けますと幸いです。 皆様どうぞよろしくお願いいたします。

  • Javascriptで曜日毎に自動でタブ切り替え

    曜日ごとにタブ切り替えを自動でおこなう方法 HPで曜日ごとに自動でタブを切り替える方法などありますでしょうか? こちらは複数ページを用意し各ページへリンクを飛ばすのではなく、単一ページでその内容を随時変えたいです。 現在、Javascriptを使い曜日の取得をおこなっております。 またその曜日ごとに合わせたタブを作り、タブの内容を曜日ごとに分けております。 日付は1週間毎自動で取得しますが、タブが一定の曜日を選択した状態で固定されてしまっています。(水曜日にサイトを訪問しても月曜日のタブが選択されている状態。) こちらを曜日に合わせたタブを自動で選択するように出来ますでしょうか?(水曜日にサイトを訪問したら最初から水曜日のタブが選択されている状態。) (例) 【現在】 ・月曜日→(月曜日のタブが選択されている状態で表示) ・火曜日→(月曜日のタブが選択されている状態で表示) ・水曜日→(月曜日のタブが選択されている状態で表示) 【理想】 ・月曜日→(月曜日のタブが選択されている状態で表示) ・火曜日→(火曜日のタブが選択されている状態で表示) ・水曜日→(水曜日のタブが選択されている状態で表示) できればPHPなどは使わず、JavaScriptで実装したいと考えております。 参考のサイトなども教えて頂けますと幸いです。 皆様どうぞよろしくお願いいたします。

  • Javascriptで曜日ごとにタブ切り替えを自動

    HPで曜日ごとに自動でタブを切り替える方法などありますでしょうか? こちらは複数ページを用意し各ページへリンクを飛ばすのではなく、単一ページでその内容を随時変えたいです。 現在、Javascriptを使い曜日の取得をおこなっております。 またその曜日ごとに合わせたタブを作り、タブの内容を曜日ごとに分けております。 (サンプルサイト) http://sample.ul-inc.jp/ 日付は1週間毎自動で取得しますが、タブが一定の曜日を選択した状態で固定されてしまっています。(水曜日にサイトを訪問しても月曜日のタブが選択されている状態。) こちらを曜日に合わせたタブを自動で選択するように出来ますでしょうか?(水曜日にサイトを訪問したら最初から水曜日のタブが選択されている状態。) (例) 【現在】 ・月曜日→(月曜日のタブが選択されている状態で表示) ・火曜日→(月曜日のタブが選択されている状態で表示) ・水曜日→(月曜日のタブが選択されている状態で表示) 【理想】 ・月曜日→(月曜日のタブが選択されている状態で表示) ・火曜日→(火曜日のタブが選択されている状態で表示) ・水曜日→(水曜日のタブが選択されている状態で表示) できればPHPなどは使わず、JavaScriptで実装したいと考えております。 参考のサイトなども教えて頂けますと幸いです。 皆様どうぞよろしくお願いいたします。

  • 各曜日のイメージカラーは?

    趣味でflashサイトを作ろうと思いますが、月曜日、火曜日…とflashをその日の曜日に合わせて変更させていきたいと思っています。 そこで質問なのですが、各曜日の色は何色がいいと思いますか? (1)月曜日 (2)火曜日 (3)水曜日 (4)木曜日 (5)金曜日 (6)土曜日 (7)日曜日 ちなみに私は月曜日が赤っぽいイメージがありますが、それ以外が思い浮かびません…

専門家に質問してみよう