Excel VBA質問箱 IV

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

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


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

【58547】標準モジュールで実行するには nana 08/10/29(水) 16:35 質問[未読]
【58548】Re:標準モジュールで実行するには neptune 08/10/29(水) 16:50 回答[未読]
【58550】Re:標準モジュールで実行するには nana 08/10/29(水) 17:07 発言[未読]
【58555】Re:標準モジュールで実行するには neptune 08/10/29(水) 18:49 回答[未読]
【58556】Re:標準モジュールで実行するには neptune 08/10/29(水) 18:52 発言[未読]
【58549】Re:標準モジュールで実行するには neptune 08/10/29(水) 16:51 発言[未読]
【58552】Re:標準モジュールで実行するには nana 08/10/29(水) 17:45 発言[未読]
【58553】Re:標準モジュールで実行するには sasa 08/10/29(水) 18:05 回答[未読]
【58554】Re:標準モジュールで実行するには nana 08/10/29(水) 18:15 発言[未読]
【58559】Re:標準モジュールで実行するには sasa 08/10/29(水) 23:27 発言[未読]
【58560】Re:標準モジュールで実行するには nana 08/10/30(木) 9:07 お礼[未読]

【58547】標準モジュールで実行するには
質問  nana  - 08/10/29(水) 16:35 -

引用なし
パスワード
   nanaと申します。
みなさま教えてください。
何とか色々調べて下記のようなものを作成しましたが、
これを標準モジュールで「マクロの実行」で実行したいのですが
どのように書き換えればいいのでしょうか。

PrivateをPublicに換えればいいのでは、というところまで
いったのですが。
よろしくお願いします。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim celTarget As Range
  Dim cel As Range
  Dim ixCol As Long
  
  Set celTarget = Intersect(Target, Range("A1"))
  If celTarget Is Nothing Then Exit Sub
  
  If celTarget = "" Then Exit Sub
  
  On Error Resume Next
  ixCol = WorksheetFunction.Match(celTarget, Range("E1:J1"), 0)
  On Error GoTo 0
  If ixCol = 0 Then
    MsgBox "転記先が見つかりませんでした。シートを確認・修正の上、もう一度 A1 の値を選択してください。", vbCritical
    Exit Sub
  End If
  ixCol = ixCol + Range("E1").Column - 1


  For Each cel In Range("B2:B4")
    Cells(cel.Row, ixCol).Value = cel.Value
  Next
End Sub

【58548】Re:標準モジュールで実行するには
回答  neptune  - 08/10/29(水) 16:50 -

引用なし
パスワード
   ▼nana さん:
こんにちは

こんな感じです。
>何とか色々調べて下記のようなものを作成しましたが、
>これを標準モジュールで「マクロの実行」で実行したいのですが
>どのように書き換えればいいのでしょうか。
>
>PrivateをPublicに換えればいいのでは、というところまで
>いったのですが。
>よろしくお願いします。
'////////////シートモジュール////////
>Private Sub Worksheet_Change(ByVal Target As Range)
  call なんかの処理(Target)
>End Sub

'////////////標準モジュール///////////////
'rangeオブジェクトが上位オブジェクトを指定されていないので指定するように
'変更の必要あり
sub なんかの処理(Target as range)
>  Dim celTarget As Range
>  Dim cel As Range
>  Dim ixCol As Long
>  
'例えば↓のrangeオブジェクトの親オブジェクトを明記する必要あり
>  Set celTarget = Intersect(Target, Range("A1"))
>  If celTarget Is Nothing Then Exit Sub
>  
>  If celTarget = "" Then Exit Sub
>  
>  On Error Resume Next
>  ixCol = WorksheetFunction.Match(celTarget, Range("E1:J1"), 0)
>  On Error GoTo 0
>  If ixCol = 0 Then
>    MsgBox "転記先が見つかりませんでした。シートを確認・修正の上、もう一度 A1 の値を選択してください。", vbCritical
>    Exit Sub
>  End If
>  ixCol = ixCol + Range("E1").Column - 1
>
>
>  For Each cel In Range("B2:B4")
>    Cells(cel.Row, ixCol).Value = cel.Value
>  Next

end sub

【58549】Re:標準モジュールで実行するには
発言  neptune  - 08/10/29(水) 16:51 -

引用なし
パスワード
   追記:中身は見てません。

【58550】Re:標準モジュールで実行するには
発言  nana  - 08/10/29(水) 17:07 -

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

すいません、初心者なもので
これは例えばどのようなものを入れていいのか
分からないのですが・・・

すいませんがよろしくお願い致します。

>'rangeオブジェクトが上位オブジェクトを指定されていないので指定するように
>'変更の必要あり
>sub なんかの処理(Target as range)

▼neptune さん:
>▼nana さん:
>こんにちは
>
>こんな感じです。
>>何とか色々調べて下記のようなものを作成しましたが、
>>これを標準モジュールで「マクロの実行」で実行したいのですが
>>どのように書き換えればいいのでしょうか。
>>
>>PrivateをPublicに換えればいいのでは、というところまで
>>いったのですが。
>>よろしくお願いします。
>'////////////シートモジュール////////
>>Private Sub Worksheet_Change(ByVal Target As Range)
>  call なんかの処理(Target)
>>End Sub
>
>'////////////標準モジュール///////////////
>'rangeオブジェクトが上位オブジェクトを指定されていないので指定するように
>'変更の必要あり
>sub なんかの処理(Target as range)
>>  Dim celTarget As Range
>>  Dim cel As Range
>>  Dim ixCol As Long
>>  
>'例えば↓のrangeオブジェクトの親オブジェクトを明記する必要あり
>>  Set celTarget = Intersect(Target, Range("A1"))
>>  If celTarget Is Nothing Then Exit Sub
>>  
>>  If celTarget = "" Then Exit Sub
>>  
>>  On Error Resume Next
>>  ixCol = WorksheetFunction.Match(celTarget, Range("E1:J1"), 0)
>>  On Error GoTo 0
>>  If ixCol = 0 Then
>>    MsgBox "転記先が見つかりませんでした。シートを確認・修正の上、もう一度 A1 の値を選択してください。", vbCritical
>>    Exit Sub
>>  End If
>>  ixCol = ixCol + Range("E1").Column - 1
>>
>>
>>  For Each cel In Range("B2:B4")
>>    Cells(cel.Row, ixCol).Value = cel.Value
>>  Next
>
>end sub

【58552】Re:標準モジュールで実行するには
発言  nana  - 08/10/29(水) 17:45 -

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

すいません、初心者なもので
これは例えばどのようなものを入れていいのか
分からないのですが・・・

すいませんがよろしくお願い致します。

ツリーの下にくるようにもう一度投稿してしまいました。
すいません。

>'rangeオブジェクトが上位オブジェクトを指定されていないので指定するように
>'変更の必要あり
>sub なんかの処理(Target as range)

【58553】Re:標準モジュールで実行するには
回答  sasa  - 08/10/29(水) 18:05 -

引用なし
パスワード
   >これを標準モジュールで「マクロの実行」で実行したいのですが
>どのように書き換えればいいのでしょうか。

次の2箇所を直せば取りあえずは実行できるでしょう。
マクロ名は適宜に。
'Private Sub Worksheet_Change(ByVal Target As Range)

Sub xxx()
 
'  Set celTarget = Intersect(Target, Range("A1"))
                 ↓  
  Set celTarget = Intersect(Selection, Range("A1"))

【58554】Re:標準モジュールで実行するには
発言  nana  - 08/10/29(水) 18:15 -

引用なし
パスワード
   sasaさん
早速ありがとうございます。
マクロの実行をクリックしたのですが、
何も起こりませんでした。

お手数をお掛けしますがよろしくお願いします。

▼sasa さん:
>>これを標準モジュールで「マクロの実行」で実行したいのですが
>>どのように書き換えればいいのでしょうか。
>
>次の2箇所を直せば取りあえずは実行できるでしょう。
>マクロ名は適宜に。
>'Private Sub Worksheet_Change(ByVal Target As Range)
>↓
>Sub xxx()
> 
>'  Set celTarget = Intersect(Target, Range("A1"))
>                 ↓  
>  Set celTarget = Intersect(Selection, Range("A1"))

【58555】Re:標準モジュールで実行するには
回答  neptune  - 08/10/29(水) 18:49 -

引用なし
パスワード
   ▼nana さん:
こんにちは

確認はしてないのですが、こんな感じ、多分大丈夫とは思います?
>すいません、初心者なもので
>これは例えばどのようなものを入れていいのか
>分からないのですが・・・

>>'rangeオブジェクトが上位オブジェクトを指定されていないので指定するように
>>'変更の必要あり
↑これが分からないんですね?


>
>▼neptune さん:
'////////////シートモジュール////////
Private Sub Worksheet_Change(ByVal Target As Range)
  call なんかの処理(Target)
End Sub
>>
>>'////////////標準モジュール///////////////
sub なんかの処理(Target as range)
>>>  Dim celTarget As Range
>>>  Dim cel As Range
>>>  Dim ixCol As Long
   dim sh as worksheet  '追加
   
   set sh=sheets(target.parent.name)  ’追加
>>>  
'例えば↓のrangeオブジェクトの親オブジェクトを明記する必要あり
'面倒なのでこれだけ修正しておきます。後は何をやっているか理解して、
'自分で修正してください。
  Set celTarget = Intersect(Target, sh.Range("A1"))
>>>  If celTarget Is Nothing Then Exit Sub
以下省略
>>end sub

#無駄な引用は止めて下さい。無駄に長くなって見難いだけです。
#申し訳ないですが、私はご自分でやった上で不明なところは相談に乗りますが、
#そのまんま全部は書かない性質ですので悪しからず。

【58556】Re:標準モジュールで実行するには
発言  neptune  - 08/10/29(水) 18:52 -

引用なし
パスワード
   度々失礼。書いた後で気がつきました。

end sub の前の行に
set sh=nothing
を忘れてました。テストするときは書いておいて下さい。

【58559】Re:標準モジュールで実行するには
発言  sasa  - 08/10/29(水) 23:27 -

引用なし
パスワード
   ▼nana さん:
>sasaさん
>早速ありがとうございます。
>マクロの実行をクリックしたのですが、
>何も起こりませんでした。

何をどうしたのか意味不明です。
まあ、マクロの実行をクリックしただけでは何も起こらないのは当たり前です。

マクロの実行でxxxを実行しましたか?
その時セルはA1を選択している状態でしたか?

【58560】Re:標準モジュールで実行するには
お礼  nana  - 08/10/30(木) 9:07 -

引用なし
パスワード
   sasaさん、そしてneptuneさん

ありがとうございました。
お陰さまで思った通り動いてくれました。
これからコードを勉強させていただきます。

また何かありましたらよろしくお願いいたします。

▼sasa さん:
>▼nana さん:
>>sasaさん
>>早速ありがとうございます。
>>マクロの実行をクリックしたのですが、
>>何も起こりませんでした。
>
>何をどうしたのか意味不明です。
>まあ、マクロの実行をクリックしただけでは何も起こらないのは当たり前です。
>
>マクロの実行でxxxを実行しましたか?
>その時セルはA1を選択している状態でしたか?

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