• ベストアンサー

エクセルVBAでワークシート関数のようにしたい

 例えば、セルA1に日付を入力して、セルB1に関数WEEKDAYが入力されていると、すぐセルA1の値を返してくれますが、これと同じことをVBAで再現したいのですが、可能でしょうか?  マクロやVBAでWEEKDAYを記述しても、「ツール」→「マクロ」→「マクロ」か「VBA」でやらないとA1の値をB1に返せないので、A1に日付を入力した瞬間、B1に値を返したいのですが、よろしくお願いします。

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

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

(1)通常の関数でよいものを、なぜVBAの質問にするのでしょう。 (2)Changeイベントに関連付けたいのなら Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.Volatile If Target.Address = "$A$1" Then Range("B1") = WorksheetFunction.Weekday(Range("A1")) End If End Sub (3)(1)をVBAでやるなら 標準モジュールに、前もって Sub test01() Range("B1").Formula = "=weekday(a1)" End Sub を実行する。

その他の回答 (5)

回答No.6

日付入力の対象となるセルはA1だけなのでしょうか? それをVBAで曜日をB1に返すというのなら、No.1回答者さんの方法が簡単だと思います。 単に曜日を返すだけなら、ワークシート関数で十分だと思いますが・・・ 未入力の時に曜日欄を空欄にしたいなら、曜日のセルに =IF(ISBLANK(A1),"",WEEKDAY(A1,1))でOKかと・・・ 何故VBAなのか理由は分かりませんが、無理する必要ないんじゃないかと思います。

  • dober-o
  • ベストアンサー率59% (260/439)
回答No.4

#1さんの回答に補足ですが、 該当するシートに以下のコードを記述してください。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Row = 1 And Target.Column = 1 Then Cells(1, 2) = Weekday(Cells(1, 1)) End If End Sub どのセルを対象とするかは、Target.Row や Target.Column を適宜変えてください。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

標準モジュールで、function プロシージャを作成します。 例 Public Function myFunc(引数) Application.Volatile '自動再計算設定、通常は必要ない myFunc = 呼び出し元に返す値 End Function

  • NCU
  • ベストアンサー率10% (32/318)
回答No.2

Function プロシージャ の事をお知りになりたいのか、 Volatile メソッド の事をお知りになりたいのか、 どっちなんでしょうね。

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.1

以下のマクロにすると何か値を変更するとB1の値が変わります。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) Cells(1, 2) = "xxx" End Sub