Excel VBA質問箱 IV

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

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


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

【61242】イベントプロシージャについて 勉強中 09/4/18(土) 23:23 質問[未読]
【61243】Re:イベントプロシージャについて 勉強中 09/4/18(土) 23:31 質問[未読]
【61244】Re:イベントプロシージャについて yoshi 09/4/19(日) 2:05 回答[未読]
【61246】Re:イベントプロシージャについて 勉強中 09/4/19(日) 16:32 お礼[未読]
【61249】Re:イベントプロシージャについて ponpon 09/4/19(日) 18:54 発言[未読]
【61278】Re:イベントプロシージャについて 勉強中 09/4/21(火) 23:04 お礼[未読]
【61250】Re:イベントプロシージャについて yoshi 09/4/19(日) 19:14 お礼[未読]

【61242】イベントプロシージャについて
質問  勉強中  - 09/4/18(土) 23:23 -

引用なし
パスワード
   勉強したてのシロウトです。
イベントプロシージャのプログラムを作成中です。
内容は、

Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Application.Intersect(Target, Range("B5")) Is Nothing) Then
から始まり、

シート1のrange("B5")の内容に変更があったときに、
range("B5")のValue をシート2のrange("B18")にコピーしたり、
range("B5")のValue と同じValueを シート3の表 から検索して、
その一個となりのRangeのValueを シート4のRange("B5")へコピーする
などの プログラムです。
プログラムは問題なく 実行されます。

しかし、この内容と同じプログラムがrange("B5")〜range("B100")まで
あり 上記内容のプログラムを

range("B6")の内容に変更があったときに、
range("B6")のValue を他のシート1のrange("B19")にコピー。

の様に 全てrange("B100") まで 入力すると 容量オーバーとなってしまいます。

同じプログラムを 必要分 入力しないで、 単純に出来ないでしょうか?
どなたか教えて下さい。
お願いします。

【61243】Re:イベントプロシージャについて
質問  勉強中  - 09/4/18(土) 23:31 -

引用なし
パスワード
   ▼勉強中 さん:
>勉強したてのシロウトです。
>イベントプロシージャのプログラムを作成中です。
>内容は、
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>If Not (Application.Intersect(Target, Range("B5")) Is Nothing) Then
>から始まり、
>
>シート1のrange("B5")の内容に変更があったときに、
>range("B5")のValue をシート2のrange("B18")にコピーしたり、
>range("B5")のValue と同じValueを シート3の表 から検索して、
>その一個となりのRangeのValueを シート4のRange("B5")へコピーする
>などの プログラムです。
>プログラムは問題なく 実行されます。
>
>しかし、この内容と同じプログラムがrange("B5")〜range("B100")まで
>あり 上記内容のプログラムを
>
>シート1のrange("B6")の内容に変更があったときに、
>range("B6")のValue をシート2のrange("B19")にコピー。
>
>の様に 全てrange("B100") まで 入力すると 容量オーバーとなってしまいます。
>
>同じプログラムを 必要分 入力しないで、 単純に出来ないでしょうか?
>どなたか教えて下さい。
>お願いします。

【61244】Re:イベントプロシージャについて
回答  yoshi  - 09/4/19(日) 2:05 -

引用なし
パスワード
   >同じプログラムを 必要分 入力しないで、 単純に出来ないでしょうか?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not Intersect(Target, Range("B5:B100")) Is Nothing Then
 ↑
このように Range("B5") を Range("B5:B100") にすればいいでしょう。
Targetが内容に変更があったセルです。                

【61246】Re:イベントプロシージャについて
お礼  勉強中  - 09/4/19(日) 16:32 -

引用なし
パスワード
   yoshi さん 早速の返信ありがとうございます。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B5:B100")) Is Nothing Then
 ↑
Range("B5") を Range("B5:B100") に変更しましたが、
B5に変更があったとき 他のシートのB5にコピー
B19に変更があったとき 他のシートのB19にコピー
というようになりませんでした。

B5のプログラムをB6〜B100に書式のみコピーする
ような感じにする必要があるのかもしれません。

また アドバイスよろしくお願いします。

              勉強中より

【61249】Re:イベントプロシージャについて
発言  ponpon  - 09/4/19(日) 18:54 -

引用なし
パスワード
   ▼勉強中 さん:

>B5に変更があったとき 他のシートのB5にコピー
>B19に変更があったとき 他のシートのB19にコピー

ならば、
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ではなく、
こんな感じではどうでしょう?

Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("B5:B100")) Is Nothing Then
    Application.EnableEvents = False
    With Target
      Sheets("他のシート").Range(.Address(0, 0)).Value = .Value
    End With
    Application.EnableEvents = True
   End If

End Sub

【61250】Re:イベントプロシージャについて
お礼  yoshi  - 09/4/19(日) 19:14 -

引用なし
パスワード
   >Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>If Not Intersect(Target, Range("B5:B100")) Is Nothing Then

失礼、イベントは Worksheet_Changeでした。

>Range("B5") を Range("B5:B100") に変更しましたが、
>B5に変更があったとき 他のシートのB5にコピー
>B19に変更があったとき 他のシートのB19にコピー
>というようになりませんでした。

それでは、当たり前でしょう。
B5とかB19とかを直接使っても、まったく理解されていないということです。
Targetが内容に変更があったセルですから、Targetを使いましょう。 
ponponさんから、Targetの具体的使い方が示されているので、
この要領で必要な機能を組み込めばよろしいでしょう。

【61278】Re:イベントプロシージャについて
お礼  勉強中  - 09/4/21(火) 23:04 -

引用なし
パスワード
   ponpon さん
yoshi さん
ありがとうございます。
参考にしてプログラムを作成します。
助かりました。

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