アプリ版:「スタンプのみでお礼する」機能のリリースについて

卒業研究でエクセルVBAを使ってJR線の料金表を作ることになりました。
調べたい料金の区間の駅名を選択して、ボタンを押すとその区間の料金が表示されるというものを作りたいのですが、ちょっとわからないことがあるので教えてください。
例えば、山手線でやったとします。
既にエクセルには下のようにデータを打ち込んであります。

駅名 原宿 渋谷 恵比寿→
原宿    130  130
渋谷 130     130
恵比寿130  130


これでコンボボックスを2つ用意して、両方に駅名を入れておきます。
そのコンボボックスから「渋谷」と「恵比寿」を選んでボタンを押すと上の表を使って「130」と表示されるようにしたいのですが、どうプログラムを書いていいのかがわかりません。
マッチ関数を使えばいいとどこかのサイトに書いてあったのですが、いまいちよく調べてもわかりませんでした。
よければ教えていただけると助かります。
説明が下手ですいません…。

A 回答 (5件)

まず、駅名に整数のコードを付けることです。

そうすれば、全部のデータは、ふつうの2次元の配列に納まるはずです。

なお、手段に関するルールや制約事項があるのか、よく分かりませんが、ご提示の方法は、駅数が増えるとデータが急速に増えるので、あまり良いとは思えません。

まず、どこかの駅を基準として、各駅までの距離を表に載せます。これは1次元の表です。次に、JRの料金は、簡単な距離の関数ですから、2つの駅を指定すれば、すぐに答が出ます。

ただし、山手線は、中央線経由というショートカットがあるので、距離を計算するアルゴリズムに工夫が必要です。しかし、このアルゴリズムもレポートの目玉になるので、取り組む価値があると思いますよ。
    • good
    • 1

エクセルのシートのセルの値は


Cells(i,J)で値が取れます。
i はA1セルからの行数(序数)で何番目、すなわち第何行目かです。
j はA1セルから何番目の列かの数(序数)です。
ーー
コンボ1を乗車駅として、コンボで選択された値を取得します。
表の乗車駅名の並んだ、見出し列のセルでで何番目かを探せば良いのです。
同じく
コンボ2を降車駅として、コンボで選択された値を取得します。
表の降車駅名の並んだ、見出し行のセルで何番目かを探せば良いのです。
ーーー
探す方法は、VB(A)ではFindメソッドです。
しかしMatch関数でも
Application.WorksheetFunction.Match(・・・)
が使えます。
ーーー
例データA1:E5
ー原宿渋谷恵比寿目黒
原宿ー120140160
渋谷120ー120140
恵比寿140120ー120
目黒160160120ー
あわてているので表内容はおかしいかも、ご免>
ーー
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
    • good
    • 0

その程度であればVBAを使わなくても関数だけで可能です。


WorkSheetFunctionプロパティを使えば、シートの関数がVBAで利用出来ます。

>「渋谷」と「恵比寿」

m * n で列と行位置を取得できれば、難しい事は無いでしょう。

http://plaza.rakuten.co.jp/pasodairy/diary/20050 …
http://www.moug.net/tech/exvba/0100035.htm
    • good
    • 0

> 卒業研究でエクセルVBAを使ってJR線の料金表を作ることになりました。


うーむ。何を「研究」するのだろう・・・
#「卒業制作」ではなく「卒業研究」なんですよね・・・

> マッチ関数を使えばいいとどこかのサイトに書いてあったのですが、
マッチ関数(MATCH関数)は、Excelの組み込み関数で、VBAの関数では有りませんよ。
#ExcelとExcelVBAを混同している(or区別できていない)様な・・・

VBAなら、「Find メソッド」を使えば・・・


"渋谷"をキーワードにして、何列目に渋谷のデータがあるか調べ、
"恵比寿"をキーワードにして、何行目に渋谷のデータがあるか調べ、
その列・行にある金額を見る
』とか・・・
    • good
    • 0

検索表を使って、セル範囲または配列に含まれている値を検索します。


http://gakushuu.boy.jp/52index.htm
こんな感じの事でしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!