ExcelでEMS送料の計算ができる表を作りたいと思っています。


http://www.post.japanpost.jp/fee/simulator/kokusai/ems.html
上記のEMSの料金表を参照して
ドロップダウンリストで重量と地域を入力すると
自動で料金がが出てくるようにしたいです。

重量   地域      料金
0.3kg▼   アジア ▼   900円
1.5kg▼ ヨーロッパ▼  3700円

このような感じです。
HTMLしかわからない初心者ですが、
もっともスマートにこの表をつくる方法を教えてもらえないでしょうか?
ずばりの回答をくださった方に100P以上差し上げます

回答の条件
  • 1人2回まで
  • 登録:2007/06/30 08:13:53
  • 終了:2007/07/07 00:27:35

ベストアンサー

id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912007/06/30 14:52:34

ポイント100pt

設定手順です。

(1)価格表の WEB ページから価格リストをコピーします。

(2)EXCEL で新しいファイルを開き、先頭シートのA1の位置でペーストします。

   A1からE47 まで、データがあることを確認してください。

(3)EXCEL のシートタブを右クリックし、「コードの表示」を選びます。

(4)下記のコードをコピーし、開いたウィンドウに貼り付けます。

(5) Alt + F8 を押し、makeSearchEMS を実行します。

(6)もし、マクロを残したくなければ(3)で開いたウィンドウからコードを削除してください。

以上で、先頭シートで送料検索が出来るはずです。

2行目をコピーして下の行に貼り付ければ、複数で検索できます。


2枚目のシートは検索に使用しているので、変更しないようにしてください。

不明な点は、コメントでお尋ねください。

Const EMS_PRICE_LIST = "EMS価格表"
Const EMS_PRICE_CHECK = "EMS価格検索"

Sub makeSearchEMS()
    Columns("E").Copy Destination:=Columns("H")
    Columns("E").Copy Destination:=Columns("G")
    Columns("D").Copy Destination:=Columns("F")
    Columns("C").Copy Destination:=Columns("D")
    Columns("C").Copy Destination:=Columns("E")
    
    Rows("1:4").Delete
    Rows("1").Insert
    Range("A1").Resize(1, 8) = Array("地域", "第1地帯", "第2地帯", "", "", "", "第3地帯", "")
    Rows("2").Insert
    Range("A2").Resize(1, 8) = Array("重量", "アジア", "オセアニア", "北米・中米", "中近東", "ヨーロッパ", "南米", "アフリカ")

    Dim aRow As Long
    aRow = 3
    For Each area In Array("アジア", "オセアニア", "北米・中米", "中近東", "ヨーロッパ", "南米", "アフリカ")
        Cells(aRow, "J").Value = area
        aRow = aRow + 1
    Next

    Worksheets(1).Name = EMS_PRICE_LIST
    ActiveWorkbook.Names.Add Name:="WEIGHT", RefersToR1C1:="=" & EMS_PRICE_LIST & "!R3C1:R45C1"
    ActiveWorkbook.Names.Add Name:="AREA", RefersToR1C1:="=" & EMS_PRICE_LIST & "!R3C10:R9C10"
    ActiveWorkbook.Names.Add Name:="PRICE", RefersToR1C1:="=" & EMS_PRICE_LIST & "!R3C2:R45C8"
    
    With Range("A1:H2")
        .Interior.ColorIndex = 35
        .Borders.Weight = xlThin
    End With
    Range("C1:F1").MergeCells = True
    Range("G1:H1").MergeCells = True
    
   Worksheets.Add before:=Worksheets(1)
   With Worksheets(1)
        .Name = EMS_PRICE_CHECK
        .Range("A1:C1") = Array("重量", "地域", "価格")
        .Range("A1:C1").Interior.ColorIndex = 35
        .Range("A1:C2").Borders.Weight = xlThin
        .Range("C2").Formula = _
            "=INDEX(PRICE,MATCH(A2,WEIGHT,0),MATCH(B2,AREA,0))"
    End With
    
    With Worksheets(1).Range("A2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=WEIGHT"
        .IgnoreBlank = True
        .InCellDropdown = True
        .IMEMode = xlIMEModeNoControl
        .ShowInput = True
        .ShowError = True
    End With
    With Worksheets(1).Range("B2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=AREA"
        .IgnoreBlank = True
        .InCellDropdown = True
        .IMEMode = xlIMEModeNoControl
        .ShowInput = True
        .ShowError = True
    End With
End Sub
id:taro_tan

お礼が遅れて申し訳ありません。

バッチリ動きました。まさにこれが欲しかったです。

コードも書いていただき大変助かりました。

2007/07/05 10:52:49

その他の回答(2件)

id:taknt No.1

きゃづみぃ回答回数13537ベストアンサー獲得回数11982007/06/30 08:51:00

ポイント10pt

重量と地域は、それぞれのドロップダウンリストを作ります。

料金のほうは、別に表を作ってVlookupで ひっぱればいいです。

別の表は

ひとつのセルに

重量と地域を連結させたものを入れます。

その隣に 料金を入れます。

質問にあるパターンだと

重量地域 料金

0.3kgアジア 900円

1.5kgヨーロッパ 3700円

となります。


http://pc-cals.nishida-tf.com/?eid=211203

id:taro_tan

vlookupというのを初めてしりました。

便利ですね。ありがとうございます。

2007/07/05 10:54:08
id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692007/06/30 14:20:42

ポイント10pt

○まず、郵便料金データの取り込み方法

国際郵便局料金表のホームページの表の左上の0.3kgまでから右下の最後まで選択してコピーします。

メモ帳などに貼り付けて、メモ帳の置換機能を利用して、「まで」と「円」を空白に置換してしまいます。

Excelでファイル→開くから先ほどのテキストファイルを開きます。(ファイルの種類をテキストファイルにすると表示されます)

テキストファイルウィザードが立ち上がるので途中区切り文字だけをタブからスペースに変えて次へを押していくとデータが挿入されたシートができます。

一番上に1行追加してアジア、オセアニア・北米・中米中近東、ヨーロッパ、南米・アフリカの項目を追加します。

一度Excel形式で保存してください。


○Excelで作成

一番上に行を追加します。

A1セルを選択してデータ→入力規則から、入力値の種類をリストにして0.3kgから30.0kgを範囲を指定してドロップダウンリストを作ります。

同様にB2セルにアジアから南米アフリカを範囲してドロップダウンリストを作ってください。

C3の数式を

=VLOOKUP(A1,A3:E45,MATCH(B1,B2:E2)+1)

にすると、A1とB2の結果からC3に金額が入ります。

id:taro_tan

ありがとうございます。

さっそくためしてみます。

2007/07/05 10:54:18
id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912007/06/30 14:52:34ここでベストアンサー

ポイント100pt

設定手順です。

(1)価格表の WEB ページから価格リストをコピーします。

(2)EXCEL で新しいファイルを開き、先頭シートのA1の位置でペーストします。

   A1からE47 まで、データがあることを確認してください。

(3)EXCEL のシートタブを右クリックし、「コードの表示」を選びます。

(4)下記のコードをコピーし、開いたウィンドウに貼り付けます。

(5) Alt + F8 を押し、makeSearchEMS を実行します。

(6)もし、マクロを残したくなければ(3)で開いたウィンドウからコードを削除してください。

以上で、先頭シートで送料検索が出来るはずです。

2行目をコピーして下の行に貼り付ければ、複数で検索できます。


2枚目のシートは検索に使用しているので、変更しないようにしてください。

不明な点は、コメントでお尋ねください。

Const EMS_PRICE_LIST = "EMS価格表"
Const EMS_PRICE_CHECK = "EMS価格検索"

Sub makeSearchEMS()
    Columns("E").Copy Destination:=Columns("H")
    Columns("E").Copy Destination:=Columns("G")
    Columns("D").Copy Destination:=Columns("F")
    Columns("C").Copy Destination:=Columns("D")
    Columns("C").Copy Destination:=Columns("E")
    
    Rows("1:4").Delete
    Rows("1").Insert
    Range("A1").Resize(1, 8) = Array("地域", "第1地帯", "第2地帯", "", "", "", "第3地帯", "")
    Rows("2").Insert
    Range("A2").Resize(1, 8) = Array("重量", "アジア", "オセアニア", "北米・中米", "中近東", "ヨーロッパ", "南米", "アフリカ")

    Dim aRow As Long
    aRow = 3
    For Each area In Array("アジア", "オセアニア", "北米・中米", "中近東", "ヨーロッパ", "南米", "アフリカ")
        Cells(aRow, "J").Value = area
        aRow = aRow + 1
    Next

    Worksheets(1).Name = EMS_PRICE_LIST
    ActiveWorkbook.Names.Add Name:="WEIGHT", RefersToR1C1:="=" & EMS_PRICE_LIST & "!R3C1:R45C1"
    ActiveWorkbook.Names.Add Name:="AREA", RefersToR1C1:="=" & EMS_PRICE_LIST & "!R3C10:R9C10"
    ActiveWorkbook.Names.Add Name:="PRICE", RefersToR1C1:="=" & EMS_PRICE_LIST & "!R3C2:R45C8"
    
    With Range("A1:H2")
        .Interior.ColorIndex = 35
        .Borders.Weight = xlThin
    End With
    Range("C1:F1").MergeCells = True
    Range("G1:H1").MergeCells = True
    
   Worksheets.Add before:=Worksheets(1)
   With Worksheets(1)
        .Name = EMS_PRICE_CHECK
        .Range("A1:C1") = Array("重量", "地域", "価格")
        .Range("A1:C1").Interior.ColorIndex = 35
        .Range("A1:C2").Borders.Weight = xlThin
        .Range("C2").Formula = _
            "=INDEX(PRICE,MATCH(A2,WEIGHT,0),MATCH(B2,AREA,0))"
    End With
    
    With Worksheets(1).Range("A2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=WEIGHT"
        .IgnoreBlank = True
        .InCellDropdown = True
        .IMEMode = xlIMEModeNoControl
        .ShowInput = True
        .ShowError = True
    End With
    With Worksheets(1).Range("B2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=AREA"
        .IgnoreBlank = True
        .InCellDropdown = True
        .IMEMode = xlIMEModeNoControl
        .ShowInput = True
        .ShowError = True
    End With
End Sub
id:taro_tan

お礼が遅れて申し訳ありません。

バッチリ動きました。まさにこれが欲しかったです。

コードも書いていただき大変助かりました。

2007/07/05 10:52:49
  • id:Mook
    最初のシート作成だけ、マクロを使えますか?
  • id:taro_tan
    マクロは昔勉強したことがありますので
    本を読みながらならできると思います。
    回答していただけるとうれしいです。
  • id:SALINGER
    A1とB2の結果からC3に金額が入ります。
    →A1とB1の結果からC1に金額が入ります。
    でしたわ。
  • id:Mook
    多くのポイントとイルカ賞ありがとうございます。
    回答の励みになります。

    別にされている商品管理の質問にも興味があるのですが、少し処理の具体的なイメージがつかめません。

    どこ(Google? or オークションのHP?)で検索して、そこからどのような情報を取得したいのか補足いただけると助かります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません