Excel VBA質問箱 IV

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

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


7044 / 13644 ツリー ←次へ | 前へ→

【41501】おしえてください 初心者でーす 06/8/12(土) 10:37 質問[未読]
【41504】Re:C列の表示と同じようにE列にも表示したい かみちゃん 06/8/12(土) 14:04 発言[未読]
【41505】Re:C列の表示と同じようにE列にも表示したい kazuo 06/8/12(土) 15:04 質問[未読]
【41506】Re:C列の表示と同じようにE列にも表示したい kazuo 06/8/12(土) 15:19 発言[未読]
【41508】Re:C列の表示と同じようにE列にも表示したい かみちゃん 06/8/12(土) 15:53 発言[未読]
【41507】Re:C列の表示と同じようにE列にも表示したい かみちゃん 06/8/12(土) 15:46 発言[未読]
【41529】Re:C列の表示と同じようにE列にも表示したい kazuo 06/8/12(土) 21:35 お礼[未読]
【41531】Re:C列の表示と同じようにE列にも表示したい kazuo 06/8/12(土) 21:40 発言[未読]
【41532】Re:C列の表示と同じようにE列にも表示したい かみちゃん 06/8/12(土) 22:10 発言[未読]
【41534】Re:C列の表示と同じようにE列にも表示したい kazuo 06/8/12(土) 23:05 発言[未読]
【41535】Re:C列の表示と同じようにE列にも表示したい kazuo 06/8/12(土) 23:06 発言[未読]
【41537】Re:C列の表示と同じようにE列にも表示したい ponpon 06/8/12(土) 23:53 発言[未読]
【41538】Re:C列の表示と同じようにE列にも表示したい kazuo 06/8/13(日) 0:13 発言[未読]
【41539】Re:C列の表示と同じようにE列にも表示したい kazuo 06/8/13(日) 0:14 発言[未読]
【41540】Re:C列の表示と同じようにE列にも表示したい kazuo 06/8/13(日) 0:21 発言[未読]
【41541】Re:C列の表示と同じようにE列にも表示し... ponpon 06/8/13(日) 0:21 発言[未読]
【41542】Re:C列の表示と同じようにE列にも表示し... kazuo 06/8/13(日) 0:27 発言[未読]
【41543】Re:C列の表示と同じようにE列にも表示し... かみちゃん 06/8/13(日) 0:46 発言[未読]
【41546】Re:C列の表示と同じようにE列にも表示し... kazuo 06/8/13(日) 1:10 発言[未読]
【41544】Re:C列の表示と同じようにE列にも表示し... ponpon 06/8/13(日) 0:52 発言[未読]
【41549】Re:C列の表示と同じようにE列にも表示し... ponpon 06/8/13(日) 1:48 発言[未読]
【41550】Re:C列の表示と同じようにE列にも表示し... kazuo 06/8/13(日) 1:52 発言[未読]
【41552】Re:C列の表示と同じようにE列にも表示し... [名前なし] 06/8/13(日) 3:44 発言[未読]
【41557】Re:C列の表示と同じようにE列にも表示し... かみちゃん 06/8/13(日) 11:23 発言[未読]
【41561】Re:C列の表示と同じようにE列にも表示し... kazuo 06/8/13(日) 13:04 発言[未読]
【41566】Re:C列の表示と同じようにE列にも表示し... かみちゃん 06/8/13(日) 17:17 発言[未読]
【41567】Re:C列の表示と同じようにE列にも表示し... kazuo 06/8/13(日) 20:50 発言[未読]
【41568】Re:C列の表示と同じようにE列にも表示し... かみちゃん 06/8/13(日) 21:08 発言[未読]
【41570】Re:C列の表示と同じようにE列にも表示し... kazuo 06/8/13(日) 23:27 お礼[未読]
【41571】Re:C列の表示と同じようにE列にも表示し... かみちゃん 06/8/13(日) 23:37 発言[未読]
【41545】Re:おしえてください [名前なし] 06/8/13(日) 1:05 発言[未読]
【41548】Re:おしえてください kazuo 06/8/13(日) 1:33 発言[未読]

【41501】おしえてください
質問  初心者でーす  - 06/8/12(土) 10:37 -

引用なし
パスワード
   よろしくお願いします。
過去のコードを修正して利用したいのですが
C列の表示は下記コードでうまくいったのですが
E列も同じように表示させたいのですが
ご教授お願いします。
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim hinmei As String, keijyou As String
 Dim myRange As Range
 Dim endRow As Long
 Dim a As Variant
 Dim i As Variant
 
 With Target
  On Error GoTo errEnd
  If .Column <= 1 Or .Column >= 3 Or _
    .Row = 1 Or .Value = "" Then End
  
  Select Case .Column
   Case 1
    If .Offset(, 1).Value = "" Then Exit Sub
     hinmei = .Value
     keijyou = .Offset(, 1).Value
     GoTo kakuninEvent
   Case 2
    If .Offset(, -1).Value = "" Then Exit Sub
     hinmei = .Offset(, -1).Value
     keijyou = .Value
     GoTo kakuninEvent
  End Select

  Exit Sub

kakuninEvent:
  endRow = Range("C65536").End(xlUp).Row - 1
  Set myRange = Range("A2").Resize(endRow, 3)
  a = myRange.Value
  For i = 1 To endRow
   If hinmei = a(i, 1) And keijyou = a(i, 2) Then
    Range("C" & .Row).Value = a(i, 3)
   End If
  Next i
 End With
 
errEnd:

End Sub

【41504】Re:C列の表示と同じようにE列にも表示し...
発言  かみちゃん  - 06/8/12(土) 14:04 -

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

>C列の表示は下記コードでうまくいったのですが
>E列も同じように表示させたいのですが

どういう要件でそういうことがしたいのか説明がないので、
さっぱりわかりませんが、

>    Range("C" & .Row).Value = a(i, 3)

    Range("E" & .Row).Value = a(i, 3)
とすればいかがでしょうか?

なお、質問の題名は、内容を示す具体的なものを簡潔に書きましょう。
投稿者名も、個性の問題なのですが「初心者」というのは、いかがなものかと思います。
もうちょっと個性があると、これから先ご質問される(過去にも質問されているかもしれませんが)際に
過去の経緯がわかりやすくなって、質問の意図を汲みやすくなります。
ちょっと工夫してみませんか?

【41505】Re:C列の表示と同じようにE列にも表示し...
質問  kazuo  - 06/8/12(土) 15:04 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>C列の表示は下記コードでうまくいったのですが
>>E列も同じように表示させたいのですが
>
>どういう要件でそういうことがしたいのか説明がないので、
>さっぱりわかりませんが、
>
>>    Range("C" & .Row).Value = a(i, 3)
>
>    Range("E" & .Row).Value = a(i, 3)
>とすればいかがでしょうか?
>
>なお、質問の題名は、内容を示す具体的なものを簡潔に書きましょう。
>投稿者名も、個性の問題なのですが「初心者」というのは、いかがなものかと思います。
仰るとおりです今後注意します
>もうちょっと個性があると、これから先ご質問される(過去にも質問されているかもしれませんが)際に
>過去の経緯がわかりやすくなって、質問の意図を汲みやすくなります。
>ちょっと工夫してみませんか?
初心者あらためkazuoでお願いします。
下記表で呼称と単価入力を表示させたいのですが
達人のお力を貸してください
○○と▲▲の条件が一致したときmと550の部分を入力簡素化の
為に考えています参考のコードだとC列しか表示できません。
よろしくお願いします。
A    B    C    D     E
品名    形状    呼称    数量    単価入力
○○    ▲▲    m    25    550

【41506】Re:C列の表示と同じようにE列にも表示し...
発言  kazuo  - 06/8/12(土) 15:19 -

引用なし
パスワード
   追加説明ですが
○○▲▲(書き換えた場合等)に変更は生じた場合は一度単価入力は
消去し再入力したいと思ってます。
考え方は以上です コード別案あれば教授ください。
よろしくお願いします。

【41507】Re:C列の表示と同じようにE列にも表示し...
発言  かみちゃん  - 06/8/12(土) 15:46 -

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

>下記表で呼称と単価入力を表示させたいのですが
>達人のお力を貸してください
>○○と▲▲の条件が一致したときmと550の部分を入力簡素化の
>為に考えています参考のコードだとC列しか表示できません。

初めから、そういうことを書いていただければ助かります。

以下の部分を書き換えてみてください。

kakuninEvent:
  
  Set myRange = Range("A2", Cells(Cells.Rows.Count, 1).End(xlUp).Offset(-1)).Resize(, 5)
  a = myRange.Value
  For i = 1 To myRange.Rows.Count
   If hinmei = a(i, 1) And keijyou = a(i, 2) Then
    Application.EnableEvents = False
    Range("C" & .Row).Value = a(i, 3)
    Range("E" & .Row).Value = a(i, 5)
    Application.EnableEvents = True
    Exit For
   End If
  Next i

【41508】Re:C列の表示と同じようにE列にも表示し...
発言  かみちゃん  - 06/8/12(土) 15:53 -

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

>○○▲▲(書き換えた場合等)に変更は生じた場合は一度単価入力は
>消去し再入力したい

ちょっと意味がわかりません。
変更は生じた場合というより、過去に入力がなかったら、表示されないと思いますが・・・・

【41529】Re:C列の表示と同じようにE列にも表示し...
お礼  kazuo  - 06/8/12(土) 21:35 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>下記表で呼称と単価入力を表示させたいのですが
>>達人のお力を貸してください
>>○○と▲▲の条件が一致したときmと550の部分を入力簡素化の
>>為に考えています参考のコードだとC列しか表示できません。
>
>初めから、そういうことを書いていただければ助かります。
>
>以下の部分を書き換えてみてください。
>
>kakuninEvent:
>  
>  Set myRange = Range("A2", Cells(Cells.Rows.Count, 1).End(xlUp).Offset(-1)).Resize(, 5)
>  a = myRange.Value
>  For i = 1 To myRange.Rows.Count
>   If hinmei = a(i, 1) And keijyou = a(i, 2) Then
>    Application.EnableEvents = False
>    Range("C" & .Row).Value = a(i, 3)
>    Range("E" & .Row).Value = a(i, 5)
>    Application.EnableEvents = True
>    Exit For
>   End If
>  Next i
かみちゃん返事遅くなりました
ありがとうございます。バッチリです
ただひとつスレッドにも書きましたが一度入力を済ませ
たとえば▲▲を変更した場合550は残ってしまうのですが
○○か▲▲を修正した場合に550も一度消去したいと考えているのですが
無理でしょうか。無理ならあきらめますが出来るようでしたら
お願いできますか。よろしくお願いします。(^o^)(^^)

【41531】Re:C列の表示と同じようにE列にも表示し...
発言  kazuo  - 06/8/12(土) 21:40 -

引用なし
パスワード
   かみちゃん さんへ
>かみちゃん返事遅くなりました
>ありがとうございます。バッチリです
>ただひとつスレッドにも書きましたが一度入力を済ませ
>たとえば▲▲を変更した場合550は残ってしまうのですが
>○○か▲▲を修正した場合に550も一度消去したいと考えているのですが
>無理でしょうか。無理ならあきらめますが出来るようでしたら
>お願いできますか。よろしくお願いします。(^o^)(^^)
deleteすれば簡単なのですが
私以外にも使用するため間違いを防ぎたいためです。
無理なお願いとは思いますが是非よろしくお願いします。

【41532】Re:C列の表示と同じようにE列にも表示し...
発言  かみちゃん  - 06/8/12(土) 22:10 -

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

>一度入力を済ませ、たとえば▲▲を変更した場合550は残ってしまうのですが
>○○か▲▲を修正した場合に550も一度消去したい

以下のようにセルに記入する前に、記入してあったものを常に消去するように
すればいかがでしょうか?
  a = myRange.Value
  
  Application.EnableEvents = False
  Range("C" & .Row).ClearContents
  Range("E" & .Row).ClearContents
  Application.EnableEvents = True
  
  For i = 1 To myRange.Rows.Count

【41534】Re:C列の表示と同じようにE列にも表示し...
発言  kazuo  - 06/8/12(土) 23:05 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>一度入力を済ませ、たとえば▲▲を変更した場合550は残ってしまうのですが
>>○○か▲▲を修正した場合に550も一度消去したい
>
>以下のようにセルに記入する前に、記入してあったものを常に消去するように
>すればいかがでしょうか?
>  a = myRange.Value
>  
>  Application.EnableEvents = False
>  Range("C" & .Row).ClearContents
>  Range("E" & .Row).ClearContents
>  Application.EnableEvents = True
>  
>  For i = 1 To myRange.Rows.Count
かみちゃん返事いただきました
いろいろやってみたのですが組込かたが悪いのか
正常に動作しなくなってしまいました
どう組み込んだらいいのかアドバイスお願いします。

【41535】Re:C列の表示と同じようにE列にも表示し...
発言  kazuo  - 06/8/12(土) 23:06 -

引用なし
パスワード
   ▼kazuo さん:
>▼かみちゃん さん:
>>こんにちは。かみちゃん です。
>>
>>>一度入力を済ませ、たとえば▲▲を変更した場合550は残ってしまうのですが
>>>○○か▲▲を修正した場合に550も一度消去したい
>>
>>以下のようにセルに記入する前に、記入してあったものを常に消去するように
>>すればいかがでしょうか?
>>  a = myRange.Value
>>  
>>  Application.EnableEvents = False
>>  Range("C" & .Row).ClearContents
>>  Range("E" & .Row).ClearContents
>>  Application.EnableEvents = True
>>  
>>  For i = 1 To myRange.Rows.Count
>かみちゃん返事いただきました
>いろいろやってみたのですが組込かたが悪いのか
>正常に動作しなくなってしまいました
>どう組み込んだらいいのかアドバイスお願いします。
初歩的な質問で申し訳ないです(=_=)

【41537】Re:C列の表示と同じようにE列にも表示し...
発言  ponpon  - 06/8/12(土) 23:53 -

引用なし
パスワード
   かみちゃんでは、ありませんが・・・
以下でちゃんと動作するようです。


Private Sub Worksheet_Change(ByVal Target As Range)
 Dim hinmei As String, keijyou As String
 Dim myRange As Range
 Dim endRow As Long
 Dim a As Variant
 Dim i As Variant
 
 With Target
  On Error GoTo errEnd
  If .Column <= 1 Or .Column >= 3 Or _
    .Row = 1 Or .Value = "" Then End
 
  Select Case .Column
   Case 1
    If .Offset(, 1).Value = "" Then Exit Sub
     hinmei = .Value
     keijyou = .Offset(, 1).Value
     GoTo kakuninEvent
   Case 2
    If .Offset(, -1).Value = "" Then Exit Sub
     hinmei = .Offset(, -1).Value
     keijyou = .Value
     GoTo kakuninEvent
  End Select

  Exit Sub
 
kakuninEvent:
  Set myRange = Range("A2", Cells(Cells.Rows.Count, 1).End(xlUp).Offset(-1)).Resize(, 5)
  a = myRange.Value
    Application.EnableEvents = False
    Range("C" & .Row).ClearContents
    Range("E" & .Row).ClearContents
    Application.EnableEvents = True
  For i = 1 To myRange.Rows.Count
   If hinmei = a(i, 1) And keijyou = a(i, 2) Then
    Application.EnableEvents = False
    Range("C" & .Row).Value = a(i, 3)
    Range("E" & .Row).Value = a(i, 5)
    Application.EnableEvents = True
    Exit For
   End If
  Next i

End With
errEnd:

End Sub

ただし、このコードがどこかで止まった場合、
Application.EnableEvents = Falseがあるため、
イベントが発生しなくなるおそれがあります。
そのときには、VBE(コードを書く画面)の表示→イミディエイト窓を表示させ、
Application.EnableEvents = True と書き、エンターを押すと
イベントが発生するようになります。
がんばってください。

【41538】Re:C列の表示と同じようにE列にも表示し...
発言  kazuo  - 06/8/13(日) 0:13 -

引用なし
パスワード
   ▼ponpon さん:
>かみちゃんでは、ありませんが・・・
>以下でちゃんと動作するようです。
>
>
>Private Sub Worksheet_Change(ByVal Target As Range)
> Dim hinmei As String, keijyou As String
> Dim myRange As Range
> Dim endRow As Long
> Dim a As Variant
> Dim i As Variant
> 
> With Target
>  On Error GoTo errEnd
>  If .Column <= 1 Or .Column >= 3 Or _
>    .Row = 1 Or .Value = "" Then End
> 
>  Select Case .Column
>   Case 1
>    If .Offset(, 1).Value = "" Then Exit Sub
>     hinmei = .Value
>     keijyou = .Offset(, 1).Value
>     GoTo kakuninEvent
>   Case 2
>    If .Offset(, -1).Value = "" Then Exit Sub
>     hinmei = .Offset(, -1).Value
>     keijyou = .Value
>     GoTo kakuninEvent
>  End Select
>
>  Exit Sub
> 
>kakuninEvent:
>  Set myRange = Range("A2", Cells(Cells.Rows.Count, 1).End(xlUp).Offset(-1)).Resize(, 5)
>  a = myRange.Value
>    Application.EnableEvents = False
>    Range("C" & .Row).ClearContents
>    Range("E" & .Row).ClearContents
>    Application.EnableEvents = True
>  For i = 1 To myRange.Rows.Count
>   If hinmei = a(i, 1) And keijyou = a(i, 2) Then
>    Application.EnableEvents = False
>    Range("C" & .Row).Value = a(i, 3)
>    Range("E" & .Row).Value = a(i, 5)
>    Application.EnableEvents = True
>    Exit For
>   End If
>  Next i
>
> End With
>errEnd:
>
>End Sub
>
>ただし、このコードがどこかで止まった場合、
>Application.EnableEvents = Falseがあるため、
>イベントが発生しなくなるおそれがあります。
>そのときには、VBE(コードを書く画面)の表示→イミディエイト窓を表示させ、
>Application.EnableEvents = True と書き、エンターを押すと
>イベントが発生するようになります。
>がんばってください。

ponpon さん返事ありがとうございます。
応援のメッセージいただき大変気分が爽快です。
上記コード確認いたしました ただですね
>    Range("C" & .Row).ClearContents
>    Range("E" & .Row).ClearContents
でクリアしてると思うのですがたとえばB列をdeleteしても形状の違う値を
記入しても前のデータが残ってしまっています。ponponさんのPCでは正常でしょうか?
あとC列に式と記入した場合通常は1式なので数量(D列)に1を記入できませんか
重ね重ねよろしくお願いします。(-_-;)

【41539】Re:C列の表示と同じようにE列にも表示し...
発言  kazuo  - 06/8/13(日) 0:14 -

引用なし
パスワード
   でクリアしてると思うのですがたとえばB列をdeleteしても形状の違う値を
                          ~~~~~~~~~~~~~
B列の値です。

【41540】Re:C列の表示と同じようにE列にも表示し...
発言  kazuo  - 06/8/13(日) 0:21 -

引用なし
パスワード
   ponponさん 説明不十分箇所追加説明です
>でクリアしてると思うのですがたとえばB列をdeleteしても形状の違う値を
形状(B列です)の違う値のことです
説明が下手ですみません

【41541】Re:C列の表示と同じようにE列にも表示し...
発言  ponpon  - 06/8/13(日) 0:21 -

引用なし
パスワード
   ▼kazuo さん:
>>Private Sub Worksheet_Change(ByVal Target As Range)
>> Dim hinmei As String, keijyou As String
>> Dim myRange As Range
>> Dim endRow As Long
>> Dim a As Variant
>> Dim i As Variant
>> 
>> With Target
>>  On Error GoTo errEnd
>>  If .Column <= 1 Or .Column >= 3 Or _
>>    .Row = 1 Or .Value = "" Then End
         ~~~~~~~~~~~~~~~~
         'ここを削除

>> 
>>  Select Case .Column
>>   Case 1
>>    If .Offset(, 1).Value = "" Then Exit Sub
>>     hinmei = .Value
>>     keijyou = .Offset(, 1).Value
>>     GoTo kakuninEvent
>>   Case 2
>>    If .Offset(, -1).Value = "" Then Exit Sub
>>     hinmei = .Offset(, -1).Value
>>     keijyou = .Value
>>     GoTo kakuninEvent
>>  End Select
>>
>>  Exit Sub
>> 
>>kakuninEvent:
>>  Set myRange = Range("A2", Cells(Cells.Rows.Count, 1).End(xlUp).Offset(-1)).Resize(, 5)
>>  a = myRange.Value
>>    Application.EnableEvents = False
>>    Range("C" & .Row).ClearContents
>>    Range("E" & .Row).ClearContents
>>    Application.EnableEvents = True
>>  For i = 1 To myRange.Rows.Count
>>   If hinmei = a(i, 1) And keijyou = a(i, 2) Then
>>    Application.EnableEvents = False
>>    Range("C" & .Row).Value = a(i, 3)
>>    Range("E" & .Row).Value = a(i, 5)
>>    Application.EnableEvents = True
>>    Exit For
>>   End If
>>  Next i
>>
>> End With
>>errEnd:
>>
>>End Sub
>ponpon さん返事ありがとうございます。
>応援のメッセージいただき大変気分が爽快です。
>上記コード確認いたしました ただですね
>>    Range("C" & .Row).ClearContents
>>    Range("E" & .Row).ClearContents
>でクリアしてると思うのですがたとえばB列をdeleteしても形状の違う値を
>記入しても前のデータが残ってしまっています。ponponさんのPCでは正常でしょうか?
とりあえず、ここだけ!

>あとC列に式と記入した場合通常は1式なので数量(D列)に1を記入できませんか
>重ね重ねよろしくお願いします。(-_-;)

【41542】Re:C列の表示と同じようにE列にも表示し...
発言  kazuo  - 06/8/13(日) 0:27 -

引用なし
パスワード
   ▼ponpon さん:
>>>Private Sub Worksheet_Change(ByVal Target As Range)
>>> Dim hinmei As String, keijyou As String
>>> Dim myRange As Range
>>> Dim endRow As Long
>>> Dim a As Variant
>>> Dim i As Variant
>>> 
>>> With Target
>>>  On Error GoTo errEnd
>>>  If .Column <= 1 Or .Column >= 3 Or _
>>>    .Row = 1 Or .Value = "" Then End
>         ~~~~~~~~~~~~~~~~
>         'ここを削除
>
>>> 
>>>  Select Case .Column
>>>   Case 1
>>>    If .Offset(, 1).Value = "" Then Exit Sub
>>>     hinmei = .Value
>>>     keijyou = .Offset(, 1).Value
>>>     GoTo kakuninEvent
>>>   Case 2
>>>    If .Offset(, -1).Value = "" Then Exit Sub
>>>     hinmei = .Offset(, -1).Value
>>>     keijyou = .Value
>>>     GoTo kakuninEvent
>>>  End Select
>>>
>>>  Exit Sub
>>> 
>>>kakuninEvent:
>>>  Set myRange = Range("A2", Cells(Cells.Rows.Count, 1).End(xlUp).Offset(-1)).Resize(, 5)
>>>  a = myRange.Value
>>>    Application.EnableEvents = False
>>>    Range("C" & .Row).ClearContents
>>>    Range("E" & .Row).ClearContents
>>>    Application.EnableEvents = True
>>>  For i = 1 To myRange.Rows.Count
>>>   If hinmei = a(i, 1) And keijyou = a(i, 2) Then
>>>    Application.EnableEvents = False
>>>    Range("C" & .Row).Value = a(i, 3)
>>>    Range("E" & .Row).Value = a(i, 5)
>>>    Application.EnableEvents = True
>>>    Exit For
>>>   End If
>>>  Next i
>>>
>>> End With
>>>errEnd:
>>>
>>>End Sub
>>ponpon さん返事ありがとうございます。
>>応援のメッセージいただき大変気分が爽快です。
>>上記コード確認いたしました ただですね
>>>    Range("C" & .Row).ClearContents
>>>    Range("E" & .Row).ClearContents
>>でクリアしてると思うのですがたとえばB列をdeleteしても形状の違う値を
>>記入しても前のデータが残ってしまっています。ponponさんのPCでは正常でしょうか?
>とりあえず、ここだけ!
>
>>あとC列に式と記入した場合通常は1式なので数量(D列)に1を記入できませんか
>>重ね重ねよろしくお願いします。(-_-;)
削除するのは Or .Value = "" ←この分でよろしかったでしょうか
これだとするとC,E列いままでOKだった数値が表示されなくなってしまうのですが
どうでしょうか

【41543】Re:C列の表示と同じようにE列にも表示し...
発言  かみちゃん  - 06/8/13(日) 0:46 -

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

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

>>でクリアしてると思うのですがたとえばB列をdeleteしても形状の違う値を
>形状(B列です)の違う値のことです

何を書いているのかよくわからなくなってしまいました。
B列の値をクリアしたら、C列E列もクリアしたいというのであれば、[#41541]のとおりです。
B列の値を変更したら、私が[#41532]で提示し、ponponさんが[#41537]で再度整理していただいたとおりです。

> ponponさんのPCでは正常でしょうか?

とおっしゃるならば、今時点のコードを再度アップされてはいかがでしょうか?
なお、[#41537]の補足説明も参考にしてください。
それと、その後の結果報告がないように思うのですが、その上で新たなご質問をされるのは、どうかと思います。

> 削除するのは Or .Value = "" ←この分でよろしかったでしょうか

そうです。まずは、試してみませんか?

> これだとするとC,E列いままでOKだった数値が表示されなくなってしまう

意味がわかりません。
B列の値をクリアしているのですから、同じ行のC、E列もクリアされるのは、当然だと思いますが・・・
C列、E列の他の行の値まで消すものではありません。。。

> C列に式と記入した場合通常は1式なので数量(D列)に1を記入できませんか

新しい質問でしょうか?
  If .Column <= 1 Or .Column >= 4 Or _
    .Row = 1 Then End

  Select Case .Column
   Case 1
    If .Offset(, 1).Value = "" Then Exit Sub
     hinmei = .Value
     keijyou = .Offset(, 1).Value
     GoTo kakuninEvent
   Case 2
    If .Offset(, -1).Value = "" Then Exit Sub
     hinmei = .Offset(, -1).Value
     keijyou = .Value
     GoTo kakuninEvent
   Case 3
    If .Value = "式" Then
     Application.EnableEvents = False
     .Offset(, 1).Value = 1
     Application.EnableEvents = True
    End If
  End Select
としてみてください。

あと、発言後に訂正や追加発言があるようですが、投稿時にパスワードを入力して
おくことによって発言した内容を削除することができます。
訂正や追加発言があるならば、いったん削除して再投稿していただけないでしょうか?
スレッドが伸びて、どこの発言にレスをつけたらいいかわからなくなりますし、そ
もそも質問の全体像がつかめなくなります。

【41544】Re:C列の表示と同じようにE列にも表示し...
発言  ponpon  - 06/8/13(日) 0:52 -

引用なし
パスワード
   ▼kazuo さん:
私も初心者に毛の生えたようなもので、詳しくはないのですが、
特に人の組んだマクロの修正は難しいです。

>▼ponpon さん:
>>>>Private Sub Worksheet_Change(ByVal Target As Range)
>>>> Dim hinmei As String, keijyou As String
>>>> Dim myRange As Range
>>>> Dim endRow As Long
>>>> Dim a As Variant
>>>> Dim i As Variant
>>>> 
>>>> With Target
>>>>  On Error GoTo errEnd
>>>>  If .Column <= 1 Or .Column >= 3 Or _
>>>>    .Row = 1 Or .Value = "" Then End
>>         ~~~~~~~~~~~~~~~~
ここは、ターゲットの値が空欄だったら終了ということだから、そんなことは
起こらないと思いますが・・・、

>>
>>>> 
>>>>  Select Case .Column
>>>>   Case 1
>>>>    If .Offset(, 1).Value = "" Then Exit Sub
  ’ここで、B列が空欄だったマクロから抜けるようになっています。
   これをのけると、片方が空欄でもマクロが走ってしまいます。

>>>>     hinmei = .Value
>>>>     keijyou = .Offset(, 1).Value
>>>>     GoTo kakuninEvent
>>>>   Case 2
>>>>    If .Offset(, -1).Value = "" Then Exit Sub
  ’ここで、A列が空欄だったマクロから抜けるようになっています。
   これをのけると、片方が空欄でもマクロが走ってしまいます。

>>>>     hinmei = .Offset(, -1).Value
>>>>     keijyou = .Value
>>>>     GoTo kakuninEvent
>>>>  End Select
>>>>
>>>>  Exit Sub
>>>> 
>>>>kakuninEvent:
>>>>  Set myRange = Range("A2", Cells(Cells.Rows.Count, 1).End(xlUp).Offset(-1)).Resize(, 5)
>>>>  a = myRange.Value
>>>>    Application.EnableEvents = False
>>>>    Range("C" & .Row).ClearContents
>>>>    Range("E" & .Row).ClearContents
>>>>    Application.EnableEvents = True
>>>>  For i = 1 To myRange.Rows.Count
>>>>   If hinmei = a(i, 1) And keijyou = a(i, 2) Then
>>>>    Application.EnableEvents = False
>>>>    Range("C" & .Row).Value = a(i, 3)
>>>>    Range("E" & .Row).Value = a(i, 5)
      If Range("C" & .Row).Value = "式" Then
        Range("D" & .Row).Value = "1"
      End If

>>>>    Application.EnableEvents = True
>>>>    Exit For
>>>>   End If
>>>>  Next i
>>>>
>>>> End With
>>>>errEnd:
>>>>
>>>>End Sub

【41545】Re:おしえてください
発言  [名前なし]  - 06/8/13(日) 1:05 -

引用なし
パスワード
   >過去のコードを修正して利用したいのですが

「過去のコード」とはどの質問のコードなのですか?


>E列も同じように表示させたいのですが

現在のシートのレイアウトはどういうものですか?
○既にどんな値が入力されているのか
○入力時にどんな値が入力されるのか


結局、提示されたコードでどんな処理をしたいのですか?
A列・B列の値が、編集された行のA列・B列が同じ値で
最も下の行にあるC列の値を、編集された行のC列に出力?

前提条件が書かれていないので、無用なやりとりが続いているのでは
ないかと思いますがいかがでしょうか?


それと、コードに関して細かいことですが、

>  If .Column <= 1 Or .Column >= 3 Or _
>    .Row = 1 Or .Value = "" Then End

列に関して「列が1以下または列が3以上なら終了」という条件なら、
列が2(B列)の時しか以下には進まないので、
  
>  Select Case .Column
>   Case 1

「列が1(A列)の場合」という分岐は意味が無いかと。
あとはSelect Caseの分岐で、最後に

Case Else
  Exit Sub
End Select

以下kakuninEventのコード

とすれば、わざわざGoToで飛ばす必要もなくなると思います。

【41546】Re:C列の表示と同じようにE列にも表示し...
発言  kazuo  - 06/8/13(日) 1:10 -

引用なし
パスワード
   かみちゃん長々申し訳ありません端的に書きます
まず現在のコードです
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim hinmei As String, keijyou As String
 Dim myRange As Range
 Dim endRow As Long
 Dim a As Variant
 Dim i As Variant

 With Target
  On Error GoTo errEnd
  If .Column <= 1 Or .Column >= 3 Or _
    .Row = 1 Then End

  Select Case .Column
   Case 1
    If .Offset(, 1).Value = "" Then Exit Sub
     hinmei = .Value
     keijyou = .Offset(, 1).Value
     GoTo kakuninEvent
   Case 2
    If .Offset(, -1).Value = "" Then Exit Sub
     hinmei = .Offset(, -1).Value
     keijyou = .Value
     GoTo kakuninEvent
  End Select

  Exit Sub

kakuninEvent:
  Set myRange = Range("A2", Cells(Cells.Rows.Count, 1).End(xlUp).Offset(-1)).Resize(, 5)
  a = myRange.Value
    Application.EnableEvents = False
    Range("C" & .Row).ClearContents
    Range("E" & .Row).ClearContents
    Application.EnableEvents = True
  For i = 1 To myRange.Rows.Count
   If hinmei = a(i, 1) And keijyou = a(i, 2) Then
    Application.EnableEvents = False
    Range("C" & .Row).Value = a(i, 3)
    Range("E" & .Row).Value = a(i, 5)
    Application.EnableEvents = True
    Exit For
   End If
  Next i

End With
errEnd:

End Sub
↑でB列を削除してもC,E列の値そのまま残ってしまいます
^^^^^^^^^^^^^^^^^^^^^^^^^^
★C,E列がクリアにならないのです。★ここを何とかしたいのですが
>そうです。まずは、試してみませんか?
試した結果を報告したつもりだったのですが失礼しました
>> これだとするとC,E列いままでOKだった数値が表示されなくなってしまう
↑すみません正常に戻っています
>C列、E列の他の行の値まで消すものではありません。。。
はい他は結構です
>あと、発言後に訂正や追加発言があるようですが、投稿時にパスワードを入力して
>おくことによって発言した内容を削除することができます。
>訂正や追加発言があるならば、いったん削除して再投稿していただけないでしょう>か?
>スレッドが伸びて、どこの発言にレスをつけたらいいかわからなくなりますし、そ
>もそも質問の全体像がつかめなくなります。
注意します
よろしくお願いします。

【41548】Re:おしえてください
発言  kazuo  - 06/8/13(日) 1:33 -

引用なし
パスワード
   ▼[名前なし] さん:
>現在のシートのレイアウトはどういうものですか?
>○既にどんな値が入力されているのか
>○入力時にどんな値が入力されるのか
[#41505]を参照して下さい

>結局、提示されたコードでどんな処理をしたいのですか?
>A列・B列の値が、編集された行のA列・B列が同じ値で
>最も下の行にあるC列の値を、編集された行のC列に出力?
>
>前提条件が書かれていないので、無用なやりとりが続いているのでは
>ないかと思いますがいかがでしょうか?
>
>
>それと、コードに関して細かいことですが、
>
>>  If .Column <= 1 Or .Column >= 3 Or _
>>    .Row = 1 Or .Value = "" Then End
>
>列に関して「列が1以下または列が3以上なら終了」という条件なら、
>列が2(B列)の時しか以下には進まないので、
>  
>>  Select Case .Column
>>   Case 1
>
>「列が1(A列)の場合」という分岐は意味が無いかと。
>あとはSelect Caseの分岐で、最後に
>
>Case Else
>  Exit Sub
>End Select
>
>以下kakuninEventのコード
>
>とすれば、わざわざGoToで飛ばす必要もなくなると思います。
コードの説明ですが拙者にはどの方法がいいのかわかりません。
コメントありがとうございます。

【41549】Re:C列の表示と同じようにE列にも表示し...
発言  ponpon  - 06/8/13(日) 1:48 -

引用なし
パスワード
   とりあえず、これで動いているようですが、・・・
あとは、かみちゃんの回答をお待ちください。

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim hinmei As String, keijyou As String
 Dim myRange As Range
 Dim endRow As Long
 Dim a As Variant
 Dim i As Variant

 With Target
  On Error GoTo errEnd
  If .Column < 1 Or .Column >= 3 Or _
    .Row = 1 Then End

  Select Case .Column
   Case 1
    If .Offset(, 1).Value = "" Then Exit Sub
     hinmei = .Value
     keijyou = .Offset(, 1).Value
     GoTo kakuninEvent
   Case 2
    If .Value = "" Then
      Application.EnableEvents = False
      Range("C" & .Row).ClearContents
      Range("E" & .Row).ClearContents
      Application.EnableEvents = True
      Exit Sub
    End If
     hinmei = .Offset(, -1).Value
     keijyou = .Value
     GoTo kakuninEvent
  End Select

  Exit Sub

kakuninEvent:
  Set myRange = Range("A2", Cells(Cells.Rows.Count, 1).End(xlUp).Offset(-1)).Resize(, 5)
  a = myRange.Value
  For i = 1 To myRange.Rows.Count
   If hinmei = a(i, 1) And keijyou = a(i, 2) Then
      Application.EnableEvents = False
      Range("C" & .Row).Value = a(i, 3)
      Range("E" & .Row).Value = a(i, 5)
      If Range("C" & .Row).Value = "式" Then
       Range("D" & .Row).Value = "1"
      End If
      Application.EnableEvents = True
      Exit For
   End If
  Next i

End With
errEnd:

End Sub

【41550】Re:C列の表示と同じようにE列にも表示し...
発言  kazuo  - 06/8/13(日) 1:52 -

引用なし
パスワード
   かみちゃんよろしくお願いします。最最終コードです
ponponさん遅くまでありがとうございます。
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim hinmei As String, keijyou As String
 Dim myRange As Range
 Dim endRow As Long
 Dim a As Variant
 Dim i As Variant

 With Target
  On Error GoTo errEnd
  If .Column <= 1 Or .Column >= 4 Or _
    .Row = 1 Then End

  Select Case .Column
   Case 1
    If .Offset(, 1).Value = "" Then Exit Sub
     hinmei = .Value
     keijyou = .Offset(, 1).Value
     GoTo kakuninEvent
   Case 2
    If .Offset(, -1).Value = "" Then Exit Sub
     hinmei = .Offset(, -1).Value
     keijyou = .Value
     GoTo kakuninEvent
   Case 3
    If .Value = "式" Then
     Application.EnableEvents = False
     .Offset(, 1).Value = 1
     .Offset(0, 2).Select
     Application.EnableEvents = True
    End If
  End Select

  Exit Sub

kakuninEvent:
  Set myRange = Range("A2", Cells(Cells.Rows.Count, 1).End(xlUp).Offset(-1)).Resize(, 5)
  a = myRange.Value
    Application.EnableEvents = False
    Range("C" & .Row).ClearContents
    Range("E" & .Row).ClearContents
    Application.EnableEvents = True
  For i = 1 To myRange.Rows.Count
   If hinmei = a(i, 1) And keijyou = a(i, 2) Then
    Application.EnableEvents = False
    Range("C" & .Row).Value = a(i, 3)
    Range("E" & .Row).Value = a(i, 5)
    Application.EnableEvents = True
    Exit For
   End If
  Next i

End With
errEnd:

End Sub

【41552】Re:C列の表示と同じようにE列にも表示し...
発言  [名前なし]  - 06/8/13(日) 3:44 -

引用なし
パスワード
   とりあえず、

  On Error GoTo errEnd

の1行を削除して実行してみたらいかがですか?

【41557】Re:C列の表示と同じようにE列にも表示し...
発言  かみちゃん  - 06/8/13(日) 11:23 -

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

> 最終コードです

[#41549]でponponさんが提示されたコードでも、
[#41550]でkazuoさんご自身が提示されたコードでも、動作確認できています。

[#41552]および[#41545]の[名前なし]さん(どなたか存じませんが)からのアドバ
イスを加味した以下のコードでも動作確認できています。

[#41546]でkazuoさんがおっしゃっている

> ↑でB列を削除してもC,E列の値そのまま残ってしまいます
> ^^^^^^^^^^^^^^^^^^^^^^^^^^
> ★C,E列がクリアにならないのです。★ここを何とかしたいのですが

という事象は発生しません。
今一度確認していただけないでしょうか?

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim hinmei As String, keijyou As String
 Dim myRange As Range
 Dim endRow As Long
 Dim a As Variant
 Dim i As Variant

 With Target
'  On Error GoTo errEnd
  If .Column <= 1 Or .Column >= 4 Or _
    .Row = 1 Then End

  Select Case .Column
'   Case 1
'    If .Offset(, 1).Value = "" Then Exit Sub
'     hinmei = .Value
'     keijyou = .Offset(, 1).Value
'     GoTo kakuninEvent
   Case 2
    If .Offset(, -1).Value = "" Then Exit Sub
     hinmei = .Offset(, -1).Value
     keijyou = .Value
     GoTo kakuninEvent
   Case 3
    If .Value = "式" Then
     Application.EnableEvents = False
     .Offset(, 1).Value = 1
     .Offset(0, 2).Select
     Application.EnableEvents = True
    End If
  End Select

  Exit Sub

kakuninEvent:
  Set myRange = Range("A2", Cells(Cells.Rows.Count, 1).End(xlUp).Offset(-1)).Resize(, 5)
  a = myRange.Value
    Application.EnableEvents = False
    Range("C" & .Row).ClearContents
    Range("E" & .Row).ClearContents
    Application.EnableEvents = True
  For i = 1 To myRange.Rows.Count
   If hinmei = a(i, 1) And keijyou = a(i, 2) Then
    Application.EnableEvents = False
    Range("C" & .Row).Value = a(i, 3)
    Range("E" & .Row).Value = a(i, 5)
    Application.EnableEvents = True
    Exit For
   End If
  Next i

 End With
'errEnd:

End Sub

あと、[#41545]で[名前なし]さんがおっしゃっている、

> 結局、提示されたコードでどんな処理をしたいのですか?
> A列・B列の値が、編集された行のA列・B列が同じ値で
> 最も下の行にあるC列の値を、編集された行のC列に出力?
>
> 前提条件が書かれていないので、無用なやりとりが続いているのでは
> ないかと思いますがいかがでしょうか?

については、私も同感です。
A列・B列の値が同じであれば、C列、E列も同じ値という前提なら問題ないのですが、
A列・B列の値が同じ場合、C列、E列は、最下行の値を表示したいというのなら、
異なる結果が得られます。

【41561】Re:C列の表示と同じようにE列にも表示し...
発言  kazuo  - 06/8/13(日) 13:04 -

引用なし
パスワード
   ▼かみちゃん さん:
返事ありがとうございます。

>こんにちは。かみちゃん です。
>
>> 最終コードです

[#41557]コード確認の結果を報告します
希望通り消えました。なんで???
かみちゃん中段のコードは必要ないと言うことでしょうか?
でも確かに消えなかったんですけどね・・・

>あと、[#41545]で[名前なし]さんがおっしゃっている、
>
>> 結局、提示されたコードでどんな処理をしたいのですか?
>> A列・B列の値が、編集された行のA列・B列が同じ値で
>> 最も下の行にあるC列の値を、編集された行のC列に出力?
>>
>> 前提条件が書かれていないので、無用なやりとりが続いているのでは
>> ないかと思いますがいかがでしょうか?
>
>については、私も同感です。
>A列・B列の値が同じであれば、C列、E列も同じ値という前提なら問題ないのですが、
>A列・B列の値が同じ場合、C列、E列は、最下行の値を表示したいというのなら、
>異なる結果が得られます。

上記についてはkazuo反省しています今度お願いするときは注意し
最初に条件等詳細に書き込みたいと思っています。
回答いただく皆さんを困惑させたことに<(_ _)>・・・
またA,Bは絶対同じ値はありません報告まで!
先ほど気づいたのですが新しいbookでコードを実行すると消えるのですが
会社のデータにコードを書込実行すると消えないんです どういう事?
分からなくなりました。・・・

【41566】Re:C列の表示と同じようにE列にも表示し...
発言  かみちゃん  - 06/8/13(日) 17:17 -

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

>かみちゃん中段のコードは必要ないと言うことでしょうか?

中段のコードとはどこのことかわからないです。
今までいろいろな方からの提案を盛り込んでみた上で動作確認したコードです。

>またA,Bは絶対同じ値はありません報告まで!

これどういう意味ですか?
  A   B  C  D E
1 ○○ ▲▲ m   550
と入力してあって、次に
  A   B  C  D E
2 ○○ ▲▲
と入力したら、m 550は自動表示したいということなのでは?
A、Bは、同じ値だから、m 550 は自動表示されると思うのですが?

>先ほど気づいたのですが新しいbookでコードを実行すると消えるのですが
>会社のデータにコードを書込実行すると消えないんです どういう事?

よくわかりません。
提示したコードそのままでも動きませんか?
消える問題はともかく、自動表示はできるのですか?
会社のBook一旦保存して閉じて、再度開いても同事象でしょうか?

【41567】Re:C列の表示と同じようにE列にも表示し...
発言  kazuo  - 06/8/13(日) 20:50 -

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

>こんにちは。かみちゃん です。
>
>>かみちゃん中段のコードは必要ないと言うことでしょうか?
>
>中段のコードとはどこのことかわからないです。
>今までいろいろな方からの提案を盛り込んでみた上で動作確認したコードです。

’のついたコードの事です

>>またA,Bは絶対同じ値はありません報告まで!
>
>これどういう意味ですか?
>  A   B  C  D E
>1 ○○ ▲▲ m   550
>と入力してあって、次に
>  A   B  C  D E
>2 ○○ ▲▲
>と入力したら、m 550は自動表示したいということなのでは?
>A、Bは、同じ値だから、m 550 は自動表示されると思うのですが?

失礼しましたA,B共同じデータという意味かなと勘違いです。
とにかく動作はしております。
そこで会社データが消えないのは、1500行目あたりに注釈があり
A,B列のセルが結合箇所があるのですが これが原因かと思い
現在検証中です。また報告します。

>>先ほど気づいたのですが新しいbookでコードを実行すると消えるのですが
>>会社のデータにコードを書込実行すると消えないんです どういう事?
>
>よくわかりません。
>提示したコードそのままでも動きませんか?
>消える問題はともかく、自動表示はできるのですか?
>会社のBook一旦保存して閉じて、再度開いても同事象でしょうか?

【41568】Re:C列の表示と同じようにE列にも表示し...
発言  かみちゃん  - 06/8/13(日) 21:08 -

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

>>>中段のコードは必要ないと言うことでしょうか?
>>
>>中段のコードとはどこのことかわからないです。
>>今までいろいろな方からの提案を盛り込んでみた上で動作確認したコードです。
>
>’のついたコードの事です

[#41552]および[#41545]の[名前なし]さんからのアドバイスを参照してください。

>そこで会社データが消えないのは、1500行目あたりに注釈があり
>A,B列のセルが結合箇所があるのですが これが原因かと思い

結合セルがある場合は、動作保証できません。
結合セルをVBAで処理する場合は、何かと不具合が出ます。
そのため、私は、結合セルをむやみやたらと使わないようにしています。
まずは、結合セルをはずして試してみましょう。

【41570】Re:C列の表示と同じようにE列にも表示し...
お礼  kazuo  - 06/8/13(日) 23:27 -

引用なし
パスワード
   ▼かみちゃん さん:
長い時間お手間を取らせありがとうございました。
やはり結合セルが原因だったようです。
無事うまくいきました。
その他の問題も全てOKです
かみちゃん始めponponさん・名前なしさん本当にありがとうございました。
今回の経験を生かし次はもう少しポイントを得た質問ができるようガンバリます。
希望なんですが我々質問者(全員ではないと思いますが大抵は)は
レベルが低いと思いますのでその点考慮お願いします。
いくつかの失礼があったことをお詫び申し上げ、
解決といたします。またの機会がありましたらよろしくお願いします。

>結合セルがある場合は、動作保証できません。
>結合セルをVBAで処理する場合は、何かと不具合が出ます。
>そのため、私は、結合セルをむやみやたらと使わないようにしています。
>まずは、結合セルをはずして試してみましょう。
原因はやはり結合せるでした。

【41571】Re:C列の表示と同じようにE列にも表示し...
発言  かみちゃん  - 06/8/13(日) 23:37 -

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

> 無事うまくいきました。
> その他の問題も全てOKです

それは何よりです。よかったですね。

>希望なんですが我々質問者(全員ではないと思いますが大抵は)は
>レベルが低いと思いますのでその点考慮お願いします。

「レベルが低い」とは、一言も言っていませんし、そういう姿勢でコメントを書いているつもりもありません。
また、回答者ではありません(結果的に回答のようなコメントが多いですが)。
なぜなら、コメントを書くことによって数多くの失敗も経験していますが、それが
すべて自分の知識になっていると、私は、思います。
そのため、わかりそうなものはコメントするよう心がけているだけです。

今一度、以下の本サイトの基本方針をご覧いただければと思います。http://www.vbalab.net/bbspolicy.html
私は、この基本方針の姿勢をできるだけ守りたいと思っています。

今後ともよろしくお願いします。

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