Excel VBA質問箱 IV

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

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


1821 / 13645 ツリー ←次へ | 前へ→

【71717】考えたように動きません 12/4/2(月) 11:55 質問[未読]
【71718】Re:考えたように動きません UO3 12/4/2(月) 12:39 発言[未読]
【71719】Re:考えたように動きません 12/4/2(月) 13:03 お礼[未読]

【71717】考えたように動きません
質問    - 12/4/2(月) 11:55 -

引用なし
パスワード
   いつも大変お世話になっております。

セルへの入力順序を
セルA1→セルB1の順に入力し、
結果として、C列あるいはD列の未出力セルに出力させるつもりで、
下記のステートメントを作成しました。
が、入力順序をセルB1→セルA1としないと
考えたようには出力しません。
どのように対処したら宜しいのでしょうか。
宜しくお願いいたします。

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address(0, 0) <> "A1" Then Exit Sub
  Dim S As String
  S = Target.Value
 
  Select Case S
   Case "H": Range("C100000").End(xlUp).Offset(1) = Range("B1")
   Case "L": Range("D100000").End(xlUp).Offset(1) = Range("B1")
  End Select
 
End Sub

【71718】Re:考えたように動きません
発言  UO3  - 12/4/2(月) 12:39 -

引用なし
パスワード
   ▼隼 さん:

このコードがやっていることは

入力が「A1」の時のみ実行する。(「B1」への入力時は何もしない)
で、「A1」が"H"なら C列の「未出力セル」に、「B1」の値をセット
「A1」が"L"なら D列の「未出力セル」に、「B1」の値をセット

ですので、B1 にいれる前に A1 にいれても、入力のないB1を相手に処理されるだけ。
その後、B1に何をいれても、処理されません。

もし、「B1」に入力した時に、「A1」の値によって、「B1」の値を
C列またはD列にセットするなら以下ですね。
もし、「A1」に入力した時も、「B1」に入力した時も、その時点でのA1やB1の値を相手に
処理するなら、また別のコードになります。

それと、C10000 といった、固定セル名は使わないほうがいいですね。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim S As String

  If Target.Address(0, 0) <> "B1" Then Exit Sub
  S = Target.Offset(, -1).Value 'A1の値
  
  Select Case S
    Case "H": Range("C" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value
    Case "L": Range("D" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value
  End Select

End Sub

【71719】Re:考えたように動きません
お礼    - 12/4/2(月) 13:03 -

引用なし
パスワード
   ▼UO3 さん:
いつも丁寧な解説をありがとうございます。
感謝いたします。
>▼隼 さん:
>
>このコードがやっていることは
>
>入力が「A1」の時のみ実行する。(「B1」への入力時は何もしない)
>で、「A1」が"H"なら C列の「未出力セル」に、「B1」の値をセット
>「A1」が"L"なら D列の「未出力セル」に、「B1」の値をセット
>
>ですので、B1 にいれる前に A1 にいれても、入力のないB1を相手に処理されるだけ。
>その後、B1に何をいれても、処理されません。
>
>もし、「B1」に入力した時に、「A1」の値によって、「B1」の値を
>C列またはD列にセットするなら以下ですね。
>もし、「A1」に入力した時も、「B1」に入力した時も、その時点でのA1やB1の値を相手に
>処理するなら、また別のコードになります。
>
>それと、C10000 といった、固定セル名は使わないほうがいいですね。
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  Dim S As String
>
>  If Target.Address(0, 0) <> "B1" Then Exit Sub
>  S = Target.Offset(, -1).Value 'A1の値
>  
>  Select Case S
>    Case "H": Range("C" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value
>    Case "L": Range("D" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value
>  End Select
>
>End Sub

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