円ドル双方向換算マクロ作成の模範解答

このQ&Aのポイント
  • 円ドル双方向換算マクロの作成方法を解説します。
  • マクロを使って、円からドルへの換算とドルから円への換算を行うことができます。
  • 初心者でも分かりやすく、セルに入力した値をもとに換算額が表示されるようになっています。
回答を見る
  • ベストアンサー

「円ドル双方向換算」マクロを作成しているのですが・・・(長文です)

Function 円ドル換算(円元金 As Integer) ' 受け取ったドル元金から円換算額を算出して返す ' 引数:ドル元金(Integer型) ' 返数:円換算(Integer型) Dim 換算レート As Double Dim ドル換算額 As Double ' 換算レート(1ドル価格)を設定する 換算レート = 109.5 ' 円元金からドル換算額を算出する ドル換算額 = 円元金 / 換算レート ' ドル換算額を呼び出し元に戻す 円ドル換算 = ドル換算額 End Function Function ドル円換算(ドル元金 As Integer) ' 受け取った円元金からドル換算額を算出して返す ' 引数:円元金(Integer型) ' 返数:ドル換算 Dim 換算レート As Double Dim 円換算額 As Double ' 換算レート(1ドル価格)を設定する 換算レート = 1 / 109.5 ' ドル元金から円換算額を算出する 円換算額 = ドル元金 / 換算レート ' 円換算額を呼び出し元に戻す ドル円換算 = 円換算額 End Function Sub 円ドル双方向換算() Dim ユーザー選択 As Integer Dim 元金 As Integer Dim 換算額 As Integer ' 円元金を取得する 円元金 = Range("B3").Value ' ドル元金を取得する ドル元金 = Range("B3").Value ' 換算する通貨を判定し、それぞれについて換算を行う If Range("B2") = 1 Then '円ドル換算を行う場合 換算額 = 円ドル換算(ドル元金) 換算額 = Application.WorksheetFunction.Round(円ドル換算, 1) '四捨五入して小数点1桁に変換する Range("B4").Value = 円ドル換算 '円ドル換算値を出力する ElseIf Range("B2") = 2 Then 'ドル円換算を行う場合 換算額 = ドル円換算(円元金) 換算額 = Application.WorksheetFunction.Round(ドル円換算, 1) '四捨五入して小数点1桁に変換する Range("B4").Value = ドル円換算 'ドル円換算値を出力する End If End Sub B2のセルにくる数字が1のときは円→ドルに、2のときはドル→円に換算するマクロを作りたいのですが・・・ 元金はセルB3に、換算額はセルB4に表示します。 かなり初心者なので、模範解答を示してもらえると助かります^^; よろしくお願いします><

質問者が選んだベストアンサー

  • ベストアンサー
noname#79209
noname#79209
回答No.2

もう少し親切にするなら、 B2に「入力規則」-「リスト」で「元の値」に「円→ドル,ドル→円」として ユーザー定義関数側を Function 通貨換算(元金 As Integer,モード As String) と変更し、更にIf部分を If モード = "円→ドル" Then 通貨換算 = Round(元金/レート,1) Else 通貨換算 = Round(元金*レート,1) End If と変更すれば、「1はどっちへの換算だっけ?」と迷わず済みます。 なお、#1で回答した中の、 ' 返数:換算結果(Integer型) は不要ですね。

その他の回答 (1)

noname#79209
noname#79209
回答No.1

双方向換算なら、 一つに纏めてしまう方がベターでしょう。 例: Function 通貨換算(元金 As Integer,モード As Integer) ' 受け取った元金から換算額を算出して返す ' 引数:元金(Integer型) ' 引数:モード(Integer型)1=円toドル、2=ドルto円 ' 返数:換算結果(Integer型) Const レート As Double = 109.5 If モード = 1 Then 通貨換算 = Round(元金/レート,1) Else 通貨換算 = Round(元金*レート,1) End If End Function でいいのでは? 表の計算式では、B4に =通貨換算(B3,B2) とすれば、良いでしょう。 関数ですから、プロシージャ内にセル番地を埋め込むのはお勧めしません。 必要なデータは、パラメータにすべきです。

関連するQ&A

  • 円をドルに換算するマクロ関数を作成したいのですが・・・

    Function 円ドル換算(円元金 As Integer) ' 受け取ったドル元金から円換算額を算出して返す ' 引数:ドル元金(Integer型) ' 返数:円換算(Integer型) Dim 換算レート As Double Dim ドル換算額 As Double ・ ・ ・ ・ ・ ・ End Function 途中の式をどのように組み立てたらよいか分かりません>< どなたかお知恵をお貸し下さい。 (換算レートは自由に設定して下さい) それではよろしくお願いします! 記述方法は、、、 (1)換算レートを設定する (2)円元金からドル換算額を算出する という順序で組み立てたいのですが。。。 お知恵をお貸し下さい><

  • マクロが実行できません。。。どこがいけないのでしょうか???

    Sub 米ドル換算() Dim 元金 As Long Dim ドル価格 As Integer Dim 米ドル換算額 As Double ' 「元金」の値を取得する 元金 = Range("A4").Value ' 「ドル価格」を取得する ドル価格 = Range("A2").Value ' 取得した「元金」と「ドル価格」をもとに「米ドル換算額」を取得する 米ドル換算額 = 元金 / ドル価格 ' 算出した「米ドル換算額」を出力する Range("B4").Value = 米ドル換算額 End Sub ちなみに 元金 = Range("A4").Value ↑ この部分が「Range」メソッドは失敗しました。_Globalオブジェクト と表示されるのですが、どういうことでしょうか?

  • Function 構文のなかに変数をいれたい(VBA)

    お願いします。 エクセルVBAにて 下記のようなFunction構文内に変数を設定する方法を 教えてください。 この中で k以外にも a = Sheets("sheet1").Range("E27") b = Sheets("sheet1").Range("E27") この変数を扱いたいのですが。 もしかして他にもfunction構文が必要でしょうか。 Function data(k As Double) Dim sum As Double Dim ct As Integer Dim keisu As Integer Dim a As Double Dim b As Double a = Sheets("sheet1").Range("E27") b = Sheets("sheet1").Range("E27")  以下 略

  • 換算レート 1 日本円 = 0.00989644 米ドル

    為替というより算数なのですが・・・・ 1 日本円 = 0.00989644 米ドルの換算レートとは、つまり1ドル何円のレートでしょうか? 33.45ドルの買い物が円換算で3380円でした。 3380÷33.45=101.046で1ドル約101円ですが、0.00989644をどうやって 1ドル何円と変換するのかよくわかりませんので、お教え願えないでしょうか。

  • ドルを円換算してくれるソフトありますか?

    今ある経済の勉強をしているんですが現在のレートでドルを円換算してくれるようなフリーソフトはあるんでしょうか?もしあればぜひ教えて頂けないでしょうか。 宜しくお願い致します。

  • IRR関数の変動について

    IRR関数の変動について IRR関数を使って10年間投資した場合のIRRの変動を見ようと思っております 下記コードを使って作成しても、10年年後のIRRの結果が10個作成されるだけです Dim Values(i) as Doubleとしても、定数式を要求されてしまいます rate = IRR(Values(i))としても型が一致しませんと出てしまいます また、Values(3)くらいで止めたところ「インデックスが有効範囲にありません」 と出てしまいます。恐らくIRRの値がマイナスになっているからだと思います これらを回避しつつ、10年分のIRRの変動をさせるやり方を教えて下さい お願いします Dim i As Integer Dim rate As Double Dim Values(10) As Double Dim L As Integer Dim equity As Currency equity = Range("A8").Value - Range("H10").Value) * -1 Values(0) = equity Values(1) = Range("C13").Value Values(2) = Range("D13").Value Values(3) = Range("E13").Value Values(4) = Range("F13").Value Values(5) = Range("G13").Value Values(6) = Range("H13").Value Values(7) = Range("I13").Value Values(8) = Range("J13").Value Values(9) = Range("K13").Value Values(10) = Range("L13").Value For i = 1 To 10 rate = IRR(Values()) L = i + 9 Cells(L, 12).Value = rate Next i End Sub

  • EXCELマクロでシート作成&シート名をつける方法

    EXCELでセルK列に入力した名称でシートをどんどん作成したいのですが、 下記のようにやってみましたが、うまく実行されません。 2回目の←の部分で、終わってしまいます。 詳しい方、教えてください。 Sub Macro3() Dim neSheet As String Dim fMax As Integer Dim num As Integer Dim i As Integer fMax = Range("B2").Value num = 2 For i = 1 To fMax neSheet = Range("k" & num).Value Worksheets.Add(After:=Worksheets(1)).Name = neSheet ← num = num + 1 Next i End Sub

  • Excel2007 マクロ 複数シートの作成

    Excel2007 マクロ 複数シートの作成 1つのファイルにtempシートとDataシートがあります。 DataシートのNo順にシートをコピーしていきます。 シートのコピーはうまくいきました。 Dataシートの情報(会社名、担当者名)を反映したいのですが うまく反映しません。 自分が作成したマクロを下記に記載いたします。 Sub CreateSheet() Dim lnFm As Long Dim lnFmMx As Long Dim st As String Dim shFm As Worksheet Dim shTo As Worksheet Set shFm = Worksheets("Data") lnFmMx = shFm.Range("B65536").End(xlUp).Row Dim Into As Long For lnFm = 2 To lnFmMx If st <> shFm.Range("B" & lnFm).Value Then st = shFm.Range("B" & lnFm).Value Sheets("temp").Copy After:=Sheets(2) Set shTo = ActiveSheet shTo.Name = st Into = 1 End If shTo.Range("B1" & Into).Value = shFm.Range("B2" & lnFm).Value shTo.Range("B2" & Into).Value = shFm.Range("C2" & lnFm).Value Next shFm.Activate End Sub 下記2行が違うと思うのですが、修正箇所が分かりません。 shTo.Range("B1" & Into).Value = shFm.Range("B2" & lnFm).Value shTo.Range("B2" & Into).Value = shFm.Range("C2" & lnFm).Value また実際のNo数は50ぐらいあります。 アドバイス頂けますでしょうか。

  • マクロ FIND 検索方向の変更

    いつも回答ありがとうございます。 FINDを使用した検索方向の変更についての質問です。以下のFINDの記述方法で、上から一発目に捉えられたキーワードではなく、下から一発目に捉えられたキーワードに変更するにはどうしたらよろしいでしょうか?それとも、FINDの記述方法を大幅に変えなければいけないのでしょうか?御指導の程宜しくお願い致します。 Sub TEST() Dim d As Integer Dim e As Integer Worksheets("一覧").Activate d = 3 e = 3 Do While Worksheets("一覧").Cells(d, 2).Value <> "" Dim c As Variant Dim R As Range Dim s As Range With Worksheets(Worksheets("一覧").Cells(d, 2).Value) Set c = .Columns("H").Find("増", , xlValues, 1) If Not c Is Nothing Then Set R = .Range(c.Offset(1, -4), .Cells(Rows.Count, "D").End(xlUp)) Set s = c.Offset(, -5) With Worksheets("編集用一覧") .Range(.Cells(e, 4), .Cells(e, 5)).ClearContents .Cells(e, 4).Value = s .Cells(e, 5).Value = Application.Sum(R) End With End If End With d = d + 1 e = e + 4 Loop End Sub

  • 行方向の同じ値のセルを結合するマクロ

    ネットで色々調べながら、A列方向の同じ値のセルを結合させるマクロ を作ってみたのですが、もっと簡単にできるようでしたら教えていただきたいです。 どうぞよろしくお願いいたします。 Sub セル結合() Dim r As Integer '行数 Dim i As Integer 'カウンタ r = Sheets(1).Range("a1").CurrentRegion.Rows.Count - 1 Application.DisplayAlerts = False For i = 1 To r Cells(i, 1).Activate '項目の一つ下のセルをアクティブに If ActiveCell.Value = ActiveCell.Offset(1).Value Then Range(ActiveCell, ActiveCell.Offset(1)).Merge End If Next Application.DisplayAlerts = True End Sub

専門家に質問してみよう