• 締切済み

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

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

みんなの回答

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

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

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答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