Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6436 / 13646 ツリー ←次へ | 前へ→

【45244】セルへの書き込み方法 06/12/16(土) 16:43 質問[未読]
【45245】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 16:58 発言[未読]
【45247】Re:セルへの書き込み方法 06/12/16(土) 17:13 質問[未読]
【45248】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 17:23 発言[未読]
【45249】Re:セルへの書き込み方法 06/12/16(土) 18:35 質問[未読]
【45251】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 18:42 発言[未読]
【45253】Re:セルへの書き込み方法 06/12/16(土) 19:04 質問[未読]
【45254】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 19:14 発言[未読]
【45257】Re:セルへの書き込み方法 06/12/16(土) 19:27 質問[未読]
【45260】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 20:02 発言[未読]
【45259】Re:セルへの書き込み方法 06/12/16(土) 19:50 発言[未読]
【45261】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 20:07 発言[未読]
【45265】Re:セルへの書き込み方法 Kein 06/12/16(土) 22:00 回答[未読]
【45266】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 22:08 発言[未読]
【45246】Re:セルへの書き込み方法 ichinose 06/12/16(土) 17:12 発言[未読]
【45250】Re:セルへの書き込み方法 06/12/16(土) 18:40 お礼[未読]
【45252】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 18:44 発言[未読]
【45255】Re:セルへの書き込み方法 06/12/16(土) 19:19 質問[未読]
【45256】Re:セルへの書き込み方法 ichinose 06/12/16(土) 19:25 発言[未読]
【45258】Re:セルへの書き込み方法 06/12/16(土) 19:43 質問[未読]
【45263】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 20:11 発言[未読]
【45267】Re:セルへの書き込み方法 ichinose 06/12/17(日) 0:16 発言[未読]
【45262】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 20:09 発言[未読]

【45244】セルへの書き込み方法
質問    - 06/12/16(土) 16:43 -

引用なし
パスワード
   こんにちわ。
いつもここでお世話になっています。

VBAを使用しセルへの書き込みについて
質問をさせて下さい。

【質問内容】
セルA1に「=test()」という関数を書きます。

test関数の仕様は、
イベントが発生した場合、セルB2へ値を書き込む処理を行います。

-----------------------------------------
Function test()

  '戻り値 = A1へ書き込み
  test = "A1へ書き込み"

  '質問!?
  'B2へ書き込みを行うにはどのようにすれば良いのでしょうか?
  Range("B2").Value = "B2へ書き込み"

End Function
-----------------------------------------

セルA1には、関数の戻り値を使用して書き込めるのですが
セルB2にはエラーが発生して書き込みができません。
どのようなプログラムを書けば
セルA1から呼び出された関数で
セルB2へ値を書き込むことができるのでしょうか?

【45245】Re:セルへの書き込み方法
発言  かみちゃん  - 06/12/16(土) 16:58 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>セルA1から呼び出された関数で
>セルB2へ値を書き込むことができるのでしょうか?

何がなさりたいのですか?
B2に、=test() とすることではないのでしょうか?

そうではないのでしたら、もう少し具体的に説明していただけませんか?

【45246】Re:セルへの書き込み方法
発言  ichinose  - 06/12/16(土) 17:12 -

引用なし
パスワード
   こんばんは。

>どのようなプログラムを書けば
>セルA1から呼び出された関数で
>セルB2へ値を書き込むことができるのでしょうか?
ユーザー定義関数ではこれは、出来ませんよ!!
別の方法を摸索して下さい。

Calculateイベントを使う等。

【45247】Re:セルへの書き込み方法
質問    - 06/12/16(土) 17:13 -

引用なし
パスワード
   レスを有難う御座います。

>そうではないのでしたら、もう少し具体的に説明していただけませんか?

仕様を少し変更させて下さい。
セルA1には、「=test(C1)」と書き込みます。

test関数は、セルC1の内容が変更される度に処理を行います。
処理内容としては、
セルC1へ入力された値を基に計算などの処理を行い
その結果をセルA1やセルB2へ書き込みを行います。

セルA1には、関数を埋め込んでいる為
関数の戻り値を利用し書き込みが行えます。

今回の質問は、セルB2へ関数を埋め込まず
セルA1から呼び出されたtest関数でセルB2へ値を書き込みたいのですが、
先程、質問させて頂いたプログラムではエラーが発生して書き込めません。

セルA1からtest関数を呼び出し、セルB2などセルA1以外のセルへ
書き込みを行うためにはどのようなプログラムを書けばよいのでしょうか?

【45248】Re:セルへの書き込み方法
発言  かみちゃん  - 06/12/16(土) 17:23 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>test関数は、セルC1の内容が変更される度に処理を行います。

よくわかりません。
普通に
=C1
だけだといけないのですか?

>今回の質問は、セルB2へ関数を埋め込まず
>セルA1から呼び出されたtest関数でセルB2へ値を書き込みたい

なぜ、そのようなことがしたいのですか?
=test(C1)
も立派な関数ですよ?

>セルA1からtest関数を呼び出し、セルB2などセルA1以外のセルへ
>書き込みを行うためにはどのようなプログラムを書けばよいのでしょうか?

一応、以下のような感じですが、やはり、なぜこのような処理が必要なのかが
理解できません。
Function test(Rng As Range)
 test = Rng.Value
End Function

【45249】Re:セルへの書き込み方法
質問    - 06/12/16(土) 18:35 -

引用なし
パスワード
   >一応、以下のような感じですが、やはり、なぜこのような処理が必要なのかが
>理解できません。
>Function test(Rng As Range)
> test = Rng.Value
>End Function

このプログラムですと…
セルA1にはセルC1の値が表示されるだけと思うのですが…

例えば、勤務表をイメージして下さい。
test関数は、実働時間と残業時間を求める関数とします。

C1に出社時刻と退社時刻を入力します。
ex、9:00〜19:00

A1には、C1の値を基に実働時間を算出し表示します。
B2には、C1の値を基に残業時間を算出し表示します。

C1の値が変化する度に
A1に埋め込まれてた関数が呼び出されtest関数を実行します。
質問内容は、A1に埋め込まれたtest関数で
B2(残業時間欄)に値を書き込めるのかということです。

勿論、B2に残業時間を求める関数を埋め込めばB2へ値が表示されます。
しかし、test関数は、実働時間と残業時間を算出していますので
A1からtest関数を呼び出した際に
A1(実働時間)とB2(残業時間)へ書き込みを行いたいのです。

かみちゃん様、イメージは伝わりましたか?
ご教授をお願い致します。

【45250】Re:セルへの書き込み方法
お礼    - 06/12/16(土) 18:40 -

引用なし
パスワード
   ichinose 様
初めまして、恵です。

>ユーザー定義関数ではこれは、出来ませんよ!!
やはり…ユーザー定義関数では無理でしたか(泣
入社2年目の私なりにインターネットやホームページを
調べたのですが分からず質問をさせて頂きました。

>Calculateイベントを使う等。
調べてみますね。頑張らなくっちゃ☆

ichinose 様の至高のスキルに感謝します。

【45251】Re:セルへの書き込み方法
発言  かみちゃん  - 06/12/16(土) 18:42 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>A1に埋め込まれてた関数が呼び出されtest関数を実行します。
>質問内容は、A1に埋め込まれたtest関数で
>B2(残業時間欄)に値を書き込めるのかということです。

この部分のなさりたいことがわかりません。
勤務表は、よく扱うのでイメージはわかるのですが・・・
A1、B1、C1にどのような値、数式が入っていて、どこに何を求めたいのかお手数
ですが、説明していただけませんか?

>勿論、B2に残業時間を求める関数を埋め込めばB2へ値が表示されます。
>しかし、test関数は、実働時間と残業時間を算出していますので
>A1からtest関数を呼び出した際に
>A1(実働時間)とB2(残業時間)へ書き込みを行いたいのです。

すごく難しいことを考えているような気がしてなりません。
どうしても、ユーザー定義関数を使わないといけないのでしょうか?

【45252】Re:セルへの書き込み方法
発言  かみちゃん  - 06/12/16(土) 18:44 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>ユーザー定義関数ではこれは、出来ませんよ!!
>やはり…ユーザー定義関数では無理でしたか(泣

無理ではないと私は思います。
ご提示のコードでは、単にユーザー定義関数の使い方を誤っていると思われるだけです。
その前に、ユーザー定義関数を使う必要もないのでは?とも思います。

【45253】Re:セルへの書き込み方法
質問    - 06/12/16(土) 19:04 -

引用なし
パスワード
   レスを有難う御座います。

>A1、B1、C1にどのような値、数式が入っていて、どこに何を求めたいのかお手数
>ですが、説明していただけませんか?

数式が埋め込んであるのはA1だけです。
A1には「=test(C1)」が埋め込んであります。
そして、A1へtest関数で求めた実働時間を表示します。

B1には、数式はなくtest関数で求めた値を表示します。
※ 質問は、test関数で求めた値をB2へ表示することです。

C1は、出社時間と退社時間を入力します。
数式は、ありません。
あくまで入力するエリアです。

>すごく難しいことを考えているような気がしてなりません。
>どうしても、ユーザー定義関数を使わないといけないのでしょうか?

今回は、勤務表を例に説明したので
ユーザー定義関数の必要性が伝わらないと思います。
しかし、test関数はログ出力やC1の入力が不正なときセルの色を変えるなどの機能もあるした場合
ユーザー定義関数を使用すべきかと思われます。

【45254】Re:セルへの書き込み方法
発言  かみちゃん  - 06/12/16(土) 19:14 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>B1には、数式はなくtest関数で求めた値を表示します。
>※ 質問は、test関数で求めた値をB2へ表示することです。

B1にも
=test(C1)
としてはいけないのですか?
A1で表示された値だけ反映させたいならば、
=INDIRECT("A1")
というワークシート関数でもできると思います。

>C1は、出社時間と退社時間を入力します。

関係ない話ですが、出社時間と退社時間を同じセルに入力するのもよくわかりません。

>今回は、勤務表を例に説明したので
>ユーザー定義関数の必要性が伝わらないと思います。
>しかし、test関数はログ出力やC1の入力が不正なときセルの色を変えるなどの機能もあるした場合
>ユーザー定義関数を使用すべきかと思われます。

はい。その必要性がまったく伝わってきません。
なぜ、ユーザー定義関数にこだわるのでしょうか?
「使用すべき」という判断は何に基づかれているのでしょうか?
できないことはないですが、本当にしたいことが説明できていないように思いますので、
具体的なアドバイスが差し上げられません。

【45255】Re:セルへの書き込み方法
質問    - 06/12/16(土) 19:19 -

引用なし
パスワード
   >無理ではないと私は思います。
>ご提示のコードでは、単にユーザー定義関数の使い方を誤っていると思われるだけです。
>その前に、ユーザー定義関数を使う必要もないのでは?とも思います。

セルにユーザー定義関数を埋め込まなければ
A1でもB2でも値を書き込むことは可能です。
ボタンなどを押下したときにユーザー定義関数を呼び出した場合は
どこのセルにも値を書き込めます。

しかし、何故かセルに埋め込んだユーザー定義関数ですと
呼び出したセル以外に値を書き込むことができず困っています。

【45256】Re:セルへの書き込み方法
発言  ichinose  - 06/12/16(土) 19:25 -

引用なし
パスワード
   ▼かみちゃん さん:
こんばんは。

>無理ではないと私は思います。
>ご提示のコードでは、単にユーザー定義関数の使い方を誤っていると思われるだけです。
>その前に、ユーザー定義関数を使う必要もないのでは?とも思います。

恵さんのユーザー定義関数での動作には・・・、

例えば、標準モジュールに

'==============================
Sub main()
  Range("a1").Value = test()
End Sub
'==============================
Function test() As Variant
  test = "aaa"
  Range("b1").Value = " bbb"
End Function

というコードでmainを実行した時には、
セルA1に値が設定される(つまり、testに値が返る本来の関数の出力値)と
関数内で別のセルB1に値を出力しています。
つまりtestという関数は、二つのデータを出力していますし、
それが可能になっていますよね??
(もっとも、関数としては、出来のよい関数でありませんが)
この現象が下地にあるのだと思うのです。

よって、同じ関数testをワークシート関数として、
セルA1に「=test()]
と指定した時にセルB1に値が設定されないことを
疑問に思っていたのだと推測します。
(私も最初の頃この現象が不思議でした)。

勿論、代替案はあると思います
(イベントを使用する方法が一般的だと思いますが

【45257】Re:セルへの書き込み方法
質問    - 06/12/16(土) 19:27 -

引用なし
パスワード
   >B1にも
>=test(C1)
>としてはいけないのですか?

既にA1で実働時間と残業時間を求めている為
再計算をせずB2へ値を書き込みたいと考えています。
A1は、実働時間です。
B2は、残業時間です。

>>C1は、出社時間と退社時間を入力します。
>
>関係ない話ですが、出社時間と退社時間を同じセルに入力するのもよくわかりません。

あくまでも例ですので
C1に出社時間
D1に退社時間としても問題ありません。

その場合、
A1は「=test(C1,D1)」へ変更します。

【45258】Re:セルへの書き込み方法
質問    - 06/12/16(土) 19:43 -

引用なし
パスワード
   ichinose 様

>勿論、代替案はあると思います
>(イベントを使用する方法が一般的だと思いますが

代替案があるかと思います。

質問をシンプルにすると
セル(例えばA1)から呼び出された関数(=test(C1,D1))で
呼び出したセル以外に値を書き込むことができるか
知りたかったのです。

【45259】Re:セルへの書き込み方法
発言    - 06/12/16(土) 19:50 -

引用なし
パスワード
   >はい。その必要性がまったく伝わってきません。
>なぜ、ユーザー定義関数にこだわるのでしょうか?
>「使用すべき」という判断は何に基づかれているのでしょうか?
>できないことはないですが、本当にしたいことが説明できていないように思いますので、
>具体的なアドバイスが差し上げられません。

かみちゃん さんへ
何故、そこまで必要性に拘るのでしょうか?
ただ単にセルから呼び出した関数で
呼び出し元以外のセルに書き込み方を伺っただけなのですが…
(呼び出し元とそれ以外のセルには表示される値が異なる為、
呼び出し元の値を表示することには意味がありません)
イメージを勤務表にしたことが、かみちゃんには伝わらなかったのですかね。

【45260】Re:セルへの書き込み方法
発言  かみちゃん  - 06/12/16(土) 20:02 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>既にA1で実働時間と残業時間を求めている為
>再計算をせずB2へ値を書き込みたいと考えています。
>A1は、実働時間です。
>B2は、残業時間です。

なかなか理解できずに、申し訳ありません。
やっと理解できたような気がします。
そういうことがしたいのであれば、
「ユーザー定義を使用すべき」と判断された理由がわかりませんが、
ユーザー定義は使えません。

シートモジュールに以下のいずれかのイベントで処理するしかないと思います。
Private Sub Worksheet_Calculate()

End Sub
または
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

【45261】Re:セルへの書き込み方法
発言  かみちゃん  - 06/12/16(土) 20:07 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>何故、そこまで必要性に拘るのでしょうか?
>ただ単にセルから呼び出した関数で
>呼び出し元以外のセルに書き込み方を伺っただけなのですが…

私のコメントでご気分を害され、ご迷惑おかけしました。
私は、少なくとも、必要性にこだわっていません。
ユーザー定義関数でしなくてもできるのに・・・という考えをもっていました。

>イメージを勤務表にしたことが、かみちゃんには伝わらなかったのですかね。

勤務表のイメージはよくわかりますが、
算出を関数でしたくないという要件が私には理解できませんでした。

結果的には、ユーザー定義関数ではできません。
その他の代替案は、提案するとご迷惑をおかけしそうなので、控えさせていただきます。

【45262】Re:セルへの書き込み方法
発言  かみちゃん  - 06/12/16(土) 20:09 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>つまりtestという関数は、二つのデータを出力していますし、
>それが可能になっていますよね??

ichinose さん、ありがとうございます。
それで私の疑問が解けました。

ユーザー定義関数で2箇所へデータ出力はできませんよね。

なぜ、そういうことがしたかったのは、謎のままですけど・・・

【45263】Re:セルへの書き込み方法
発言  かみちゃん  - 06/12/16(土) 20:11 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>セル(例えばA1)から呼び出された関数(=test(C1,D1))で
>呼び出したセル以外に値を書き込むことができるか

一応、こちらにもコメントをしておきます。
ユーザー定義関数では、複数のセルに値を返すことはできません。

私の理解不足により、誤ったコメントをしたことをお詫びします。

【45265】Re:セルへの書き込み方法
回答  Kein  - 06/12/16(土) 22:00 -

引用なし
パスワード
   えっとですね・・。まず、かみちゃんさんとしては
「ユーザー定義関数の作り方を知っているような人なら、イベントマクロ
ぐらい知っているはず」と憶測して、"なのになぜ関数にこだわるのか"を
連発したのだと思います。でもVBAの知識などは、私でも何でも知っている
わけではないので、たぶん質問者さんも「目的とする処理はイベントマクロ
で全てやってしまえる」ということを知らなかったのだと思います。
それをもう少し早く察知していれば、関数を捨ててイベントマクロの適当な
サンプルを提示し、解決へ導くことができたのではないかと思います。
そのようなわけで、遅ればせながら私がマクロを提示してみます。
以下のコードをシートモジュールに入れ、必ず"C1→D1"の順で"時刻"
(:で時間と分を区切る形)を入力してみて下さい。つまりC1には始業時刻、
D1には終業時刻を入れるのです。すると"あたかも関数で計算したかのごとく"
A1に就労時間、B1に残業時間が表示されます。もちろん、規定の就業時間は
8時間ということにしています。お試しください。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Atm As Variant, Btm As Variant
  Dim Stm As Variant, Etm As Variant
  Dim Flg As Boolean
 
  With Target
   If .Address <> "$D$1" Then Exit Sub
   If .Count > 1 Then Exit Sub
   If WorksheetFunction.Count(Range("C1:D1")) < 2 Then
     MsgBox "C1:D1には時刻を入力して下さい", 48
     Flg = True: GoTo ReLine
   End If
   On Error Resume Next
   Stm = TimeValue(.Offset(, -1).Text)
   Etm = TimeValue(.Text)
  End With
  If Err.Number = 13 Then
   MsgBox "C1:D1には時刻を入力して下さい", 48
   Flg = True: GoTo ReLine
  End If
  On Error GoTo 0
  If Stm > Etm Then
   MsgBox "始業時刻が終業時刻より後になっています", 48
   Flg = True: GoTo ReLine
  End If
  Atm = Etm - Stm
  If Hour(Atm) > 8 Then
   Btm = Atm - TimeValue("08:00:00")
   Atm = TimeValue("08:00:00")
  End If
ReLine:
  Application.EnableEvents = False
  If Flg Then
   Target.Offset(, -1).Resize(, 2).Clear
  Else
   Range("A1").Value = Format(Atm, "h:mm")
   Range("B1").Value = Format(Btm, "h:mm")
  End If
  Application.EnableEvents = True
End Sub

【45266】Re:セルへの書き込み方法
発言  かみちゃん  - 06/12/16(土) 22:08 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 「ユーザー定義関数の作り方を知っているような人なら、イベントマクロ
> ぐらい知っているはず」と憶測して、"なのになぜ関数にこだわるのか"を
> 連発したのだと思います。

「ユーザー定義関数を使用すべき」という質問者の方の判断基準と、具体的に何が
したいのかの説明が私には、理解できなかっただけです。
理解できないから、代替案も提示しませんでした。

> でもVBAの知識などは、私でも何でも知っているわけではないので、たぶん質問
> 者さんも「目的とする処理はイベントマクロで全てやってしまえる」ということ
> を知らなかったのだと思います。
> それをもう少し早く察知していれば、関数を捨ててイベントマクロの適当な
> サンプルを提示し、解決へ導くことができたのではないかと思います。

はい、そのとおりです。
フタを開ければ、なぁんだそういうこと?ということで、理解不足による発言の
連発をしたことをお詫びしたつもりです。

> そのようなわけで、遅ればせながら私がマクロを提示してみます。

Kein さん、フォローありがとうございます。

【45267】Re:セルへの書き込み方法
発言  ichinose  - 06/12/17(日) 0:16 -

引用なし
パスワード
   こんばんは。

>代替案があるかと思います。
>質問をシンプルにすると
>セル(例えばA1)から呼び出された関数(=test(C1,D1))で
>呼び出したセル以外に値を書き込むことができるか
>知りたかったのです。
これは、最初に投稿したとおり、出来ないと思います。

>今回は、勤務表を例に説明したので
>ユーザー定義関数の必要性が伝わらないと思います。

ということは実際は勤務表の関数ではないということですか?

ひとつの関数で複数の結果を得ることが出来る関数Testがあります
この関数だけで複数の結果が得られるのでこれを有効利用したい

ということでしょうかねえ??

一般的には何度か申し上げましたが、イベントプロシジャー
(KeinさんがWorksheet_Changeでのコード例を示されています)
を使うということがすぐに思い浮かびます。
このイベントプロシジャーの中で作成した関数Testを呼び出すと
いう方法です。

ただし、提示されたような関数Testでは汎用的に運用はしにくいと思いますよ。
例えば、指定された二つのセルの和と差を求める関数Testを考えます。

以下のコードは、アクティブシートの
セルA1、A2に入力された数値の和をB2、差をB3に出力します。
新規ブックのアクティブシートのモジュールに
'================================================
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim ans As Variant
  Application.EnableEvents = False
  If Not Application.Intersect(Target, Range("a1:a2")) Is Nothing Then
    ans = test(Range("a1"), Range("a2"))
    Range("b2").Value = ans(1)
    Range("b3").Value = ans(2)
    End If
  Application.EnableEvents = True
End Sub

標準モジュールに
'======================================================
Function test(rng1 As Range, rng2 As Range) As Variant
  Dim ans(1 To 2) As Variant
  ans(1) = Val(rng1.Value) + Val(rng2.Value)
  ans(2) = Val(rng1.Value) - Val(rng2.Value)
  test = ans()
  Erase ans()
End Function


これで当該シートのA1又はA2にデータが入力されると上記の
コードが実行されます。
このようにして、既存関数Testを利用する方法が考えられます。


他には、・・・と考えられることを記述すると・・・、


1.配列数式を使うと言う方法があります。

但し、これは、上記の和と差を表示するセル範囲が
連続したセル範囲である場合です。

標準モジュールに

'================================================
Function test1(rng1 As Range, rng2 As Range) As Variant
  With Application.Caller
    Dim ans(1 To 2) As Variant
    ans(1) = Val(rng1.Value) + Val(rng2.Value)
    ans(2) = Val(rng1.Value) - Val(rng2.Value)
    If .Columns.Count > 1 Then
     test1 = ans()
    ElseIf .Rows.Count > 1 Then
     test1 = Application.Transpose(ans())
     End If
    Erase ans()
    End With
End Function


上記のtest1という関数を配列数式で運用します。

例 セルA1、A2の和と差をB2、C2に設定する

セルB2:C2の二つセルを選択した状態で
数式バーに 「=test1(a1,a2)」と入力します。
ただし、セルの確定は、Enterキーではなく、
Ctrl+Shift+Enterキーで確定してください。

A1、A2に数値を入れて結果を確認してみてください。

この方法は、あくまでもセル範囲が連続している場合に限ります。


2.関数に処理パラメータを付ける

標準モジュールに
'=======================================================
Function test2(rng1 As Range, rng2 As Range, Optional enzan As Long = 0) As Variant
  'enzan 0 加算 1 減算
  Select Case enzan
   Case 0
     test2 = Val(rng1.Value) + Val(rng2.Value)
   Case 1
     test2 = Val(rng1.Value) - Val(rng2.Value)
   End Select
End Function


とします。

例 セルA1、A2の和と差をB2、C2に設定する

セルB2に 「=test2(a1,a2)」と入力し、これはEnterキーで確定します。
セルC2には、「=test2(a1,a2,1)」と入力し、これはEnterキーで確定します。

A1、A2に数値を入れて結果を確認してみてください。

この方法だと不連続なセルでも計算は可能です。

本来の処理内容と上記の方法とを検討してみて下さい。

6436 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free