• 締切済み

VBAを使って料金表を作りたい

卒業研究でエクセルVBAを使ってJR線の料金表を作ることになりました。 調べたい料金の区間の駅名を選択して、ボタンを押すとその区間の料金が表示されるというものを作りたいのですが、ちょっとわからないことがあるので教えてください。 例えば、山手線でやったとします。 既にエクセルには下のようにデータを打ち込んであります。 駅名 原宿 渋谷 恵比寿→ 原宿    130  130 渋谷 130     130 恵比寿130  130 ↓ これでコンボボックスを2つ用意して、両方に駅名を入れておきます。 そのコンボボックスから「渋谷」と「恵比寿」を選んでボタンを押すと上の表を使って「130」と表示されるようにしたいのですが、どうプログラムを書いていいのかがわかりません。 マッチ関数を使えばいいとどこかのサイトに書いてあったのですが、いまいちよく調べてもわかりませんでした。 よければ教えていただけると助かります。 説明が下手ですいません…。

みんなの回答

  • Ishiwara
  • ベストアンサー率24% (462/1914)
回答No.5

まず、駅名に整数のコードを付けることです。そうすれば、全部のデータは、ふつうの2次元の配列に納まるはずです。 なお、手段に関するルールや制約事項があるのか、よく分かりませんが、ご提示の方法は、駅数が増えるとデータが急速に増えるので、あまり良いとは思えません。 まず、どこかの駅を基準として、各駅までの距離を表に載せます。これは1次元の表です。次に、JRの料金は、簡単な距離の関数ですから、2つの駅を指定すれば、すぐに答が出ます。 ただし、山手線は、中央線経由というショートカットがあるので、距離を計算するアルゴリズムに工夫が必要です。しかし、このアルゴリズムもレポートの目玉になるので、取り組む価値があると思いますよ。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

エクセルのシートのセルの値は Cells(i,J)で値が取れます。 i はA1セルからの行数(序数)で何番目、すなわち第何行目かです。 j はA1セルから何番目の列かの数(序数)です。 ーー コンボ1を乗車駅として、コンボで選択された値を取得します。 表の乗車駅名の並んだ、見出し列のセルでで何番目かを探せば良いのです。 同じく コンボ2を降車駅として、コンボで選択された値を取得します。 表の降車駅名の並んだ、見出し行のセルで何番目かを探せば良いのです。 ーーー 探す方法は、VB(A)ではFindメソッドです。 しかしMatch関数でも Application.WorksheetFunction.Match(・・・) が使えます。 ーーー 例データA1:E5 ー 原宿 渋谷 恵比寿 目黒 原宿 ー 120 140 160 渋谷 120 ー 120 140 恵比寿 140 120 ー 120 目黒 160 160 120 ー あわてているので表内容はおかしいかも、ご免> ーー Sheet2のA1に目黒 Sheet2のA1に渋谷 同駅はチェックして警告すること(略) ーーー Sub test01() 'コマンドボタンのクリックイベントに挟む Dim sh1 As Worksheet Set sh1 = Worksheets("Sheet1") s = Worksheets("Sheet2").Range("A1") 'コンボ1の値を持ってくる t = Worksheets("Sheet2").Range("B1") 'コンボ2の値を持ってくる i = Application.WorksheetFunction.Match(s, sh1.Range("$a$1:$a$100"), 0) j = Application.WorksheetFunction.Match(t, sh1.Range("$a$1:$z$1"), 0) MsgBox Worksheets("Sheet1").Cells(i, j) Worksheets("Sheet2").Range("c1") = Worksheets("Sheet1").Cells(i, j) End Sub ーーーー 結果 Sheet2のC1に160

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.3

その程度であればVBAを使わなくても関数だけで可能です。 WorkSheetFunctionプロパティを使えば、シートの関数がVBAで利用出来ます。 >「渋谷」と「恵比寿」 m * n で列と行位置を取得できれば、難しい事は無いでしょう。 http://plaza.rakuten.co.jp/pasodairy/diary/200501110000/ http://www.moug.net/tech/exvba/0100035.htm

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

> 卒業研究でエクセルVBAを使ってJR線の料金表を作ることになりました。 うーむ。何を「研究」するのだろう・・・ #「卒業制作」ではなく「卒業研究」なんですよね・・・ > マッチ関数を使えばいいとどこかのサイトに書いてあったのですが、 マッチ関数(MATCH関数)は、Excelの組み込み関数で、VBAの関数では有りませんよ。 #ExcelとExcelVBAを混同している(or区別できていない)様な・・・ VBAなら、「Find メソッド」を使えば・・・ 『 "渋谷"をキーワードにして、何列目に渋谷のデータがあるか調べ、 "恵比寿"をキーワードにして、何行目に渋谷のデータがあるか調べ、 その列・行にある金額を見る 』とか・・・

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

検索表を使って、セル範囲または配列に含まれている値を検索します。 http://gakushuu.boy.jp/52index.htm こんな感じの事でしょうか?

関連するQ&A

  • Excel VBA コンボボックスの初期値の設定について

    いつもお世話になっています。 Excel VBA コンボボックスの初期値の設定について教えてください。 ユーザーフォームを表示させた時、そこにあるコンボボックスには何も表示されていません。 コンボボックスのボタンを押すとちゃんと 「アジア」「ヨーロッパ」「アメリカ」等の語群が表示されます。 ユーザーフォームを表示させた時点でコンボボックスに「アジア」を表示させるにはどうすればいいか教えてください。 よろしくお願いします。

  • エクセルのVBAで質問です。

    ExcelのVBAで質問です。コントロールで「1年1組」、「1年2組」、「1年3組」と定義されたコンボボックスと、「次へ」、「前へ」のボタンを作ります。コンボボックスで例えば「1年2組」を選択した時は、その下に別のbookにある1年2組の生徒の情報一覧を表示します。「次へ」ボタンを押すとコンボボックス内も「1年3組」と表示が変わり、下に表示される生徒の情報も別のbookの「1年3組」のものと切り替わります。同様に、「前へ」ボタンではコンボボックス内、生徒情報一覧それぞれが「1年1組」に変わります。ただ、コンボボックスが「1年1組」を選択した状態で「前へ」ボタンを押した時と、「1年3組」を選択した状態で「次へ」を押した時は、何もアクションがおこらないようにしたいと考えています。VBAではどのような方法があるのでしょうか?

  • 定期区間とICカード区間の料金

    例えば品川から恵比寿まで定期区間で 渋谷までいきたい場合 PASMO定期でPASMOチャージの場合 恵比寿ー渋谷間の料金はいくらかかるのでしょうか?130円??

  • Excel VBA コンボボックスについて

    Excel VBA コンボボックスを作成しましたが、リンクを張ってあるデータ文字数が多いと、指定したサイズのコンボボックスよりはみ出て、すべて見ることができません。 Excelの「折り返して表示」のように表示するためには、どのようにしたらいいのでしょうか。 また、 この質問の参考になる、サイトなどありましたら、教えてください。

  • エクセルVBAでコンボボックス

    エクセルVBAのコンボボックスの使い方について質問します。 実現したいプログラムは 「チェックボックスから選んだ数字で計算するプログラム」 です。 具体的には… まず、コンボボックスをシート上に配置します。そのコンボボックスには 数字の1から10を選べるようにしておきます。 次に、コマンドボタンを配置します。これは単にプログラムをスタート させる目的です。 ユーザーは、まずコンボボックスから好きな数字を選択します。 そしてスタートボタン(コマンドボタン)を押します。 すると、選んだ数字の2倍がセルに表示されます。 さらに発展系としては… チェックボックスを4つ配置します。各チェックボックス には、+、-、×、÷を割り振っておきます。 また、コンボボックスを2つ用意し、それぞれ1~10の数字をリストにします。 ユーザーは、チェックボックスから好きな記号を選び、さらにコンボボックスから 好きな数字を選びます。そしてスタートボタンを押すと、選んだ数字を選んだ記号 で計算した値がセルに表示されます。 というようなプログラムを考えているのですが、うまくできません。 ポイントは、 ・チェックボックスにリストを入力する方法 ・チェックボックスの選択状態や、リストボックスから選ばれた数字を、  変数として取得する方法 インターネットで調べているのですが、リストボックスに値を入れるのにもマクロを走らせ なければならない方法とか、ユーザーフォームでの説明ばかりでなかなか実現に至りません。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_userform05.html プログラムのイメージ図としては添付の図の通りです。 どのようにプログラムを書けばいいのでしょうか。

  • vbaについて教えてください

    エクセルでワークシートに貼ったコマンドボタンをクリックするとユーザーフォームを呼び出してかつ、ユーザーフォーム上のコンボボックスに指定フォルダ下のフォルダを表示するものを作りました。 ユーザーフォーム上のコンボボックスに表示されたフォルダを切替選択するとリストボックスにそのフォルダ下のファイルを表示させたいのですがやり方がわかりませんので教えてください。

  • エクセルVBAでコンボボックスの非表示について

    最近VBAを勉強し始めたのですが、コントロールについてわかりませんので、ご教授お願いします。 コンボボックスを初期では非表示、トグルボタンをクリックすると、コンボボックスを表示させる方法を教えてください。 ユーザーフォームについてまだ未熟なので、すみませんがよろしくお願いします。

  • VBAのコンボボックスでコメントみたいな表示はできないでしょうか?

    VBAでユーザーフォームにコンボボックスを設置してます。このコンボボックスを開くと現在10項目位表示できるようにしているのですが、この表示内容の詳細をコメントみたいな感じで表示させることは可能なのでしょうか?たとえばコンボボックスで「スイッチ」と「ボタン」が選択できるとします。この状態では入力者はよく分からないため、たとえば「スイッチ」を選択する前に「スイッチ」の上にマウスのポインターを置くと「切り替えスイッチ」「ロータリースイッチ」等の詳細表示をエクセルのコメントとように表示させ、それを確認して入力者は選択をする。見たいな感じのことはできないのでしょうか?分かる人がいたら教えてください。よろしくお願いします。

  • エクセルシートでVBAについての質問です。

    VBA初心者です。 エクセルのシート上にコンボボックスを配置してリストを選択すると同じシート上のセルに選択されたリストが表示されるようにしたいのですが、よくわかりません。 コンボボックスのオブジェクト名は名前ボックスに表示される名前でいいのでしょうか? 詳しい方ご教授お願いします。

  • 埼京線と山手線

    今年度、東横線が地下化されれば、埼京線のホームを山手線のホームに横付けしますが、 その時に、渋谷駅の山手線と埼京線を方向別にできないのでしょうか? 目黒~恵比寿間で方向別にして、恵比寿、渋谷は方向別ホーム、渋谷~原宿間で元に戻る。

専門家に質問してみよう