こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2006-07-02 11:46:26

QNo.2250658

すぐに回答ほしいです

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

(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
を実行する。

投稿日時 - 2006-07-02 13:24:21

ANo.5

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

日付入力の対象となるセルはA1だけなのでしょうか?
それをVBAで曜日をB1に返すというのなら、No.1回答者さんの方法が簡単だと思います。

単に曜日を返すだけなら、ワークシート関数で十分だと思いますが・・・
未入力の時に曜日欄を空欄にしたいなら、曜日のセルに
=IF(ISBLANK(A1),"",WEEKDAY(A1,1))でOKかと・・・

何故VBAなのか理由は分かりませんが、無理する必要ないんじゃないかと思います。

投稿日時 - 2006-07-02 13:26:26

ANo.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 を適宜変えてください。

投稿日時 - 2006-07-02 12:41:36

ANo.3

標準モジュールで、function プロシージャを作成します。

Public Function myFunc(引数)
Application.Volatile '自動再計算設定、通常は必要ない

myFunc = 呼び出し元に返す値
End Function

投稿日時 - 2006-07-02 12:39:52

ANo.2

NCU

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

投稿日時 - 2006-07-02 12:17:43

ANo.1

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

投稿日時 - 2006-07-02 12:13:11

あなたにオススメの質問