Excel VBA質問箱 IV

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

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


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

【35322】文字の入力について エクセラ 06/2/26(日) 17:32 質問[未読]
【35328】Re:文字の入力について ponpon 06/2/26(日) 20:17 発言[未読]
【35329】Re:文字の入力について エクセラ 06/2/26(日) 21:05 お礼[未読]
【35330】Re:文字の入力について エクセラ 06/2/26(日) 21:19 質問[未読]
【35361】Re:文字の入力について ponpon 06/3/1(水) 20:02 発言[未読]
【35369】Re:文字の入力について エクセラ 06/3/1(水) 22:28 質問[未読]
【35370】Re:文字の入力について ponpon 06/3/1(水) 22:55 発言[未読]
【35460】Re:文字の入力について エクセラ 06/3/5(日) 14:16 発言[未読]
【35462】Re:文字の入力について エクセラ 06/3/5(日) 14:24 質問[未読]
【35464】Re:文字の入力について ponpon 06/3/5(日) 19:57 発言[未読]

【35322】文字の入力について
質問  エクセラ  - 06/2/26(日) 17:32 -

引用なし
パスワード
   いつも勉強させていただいております。

このたび
Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("F4:F28,I4:I28,L4:L28,O4:O28,R4:R28")) Is Nothing Then Exit Sub
  With Target
   If .Count > 1 Then Exit Sub
   If IsEmpty(.Value) Then Exit Sub
   If IsEmpty(.Offset(, -1).Value) Then Exit Sub
   Application.EnableEvents = False
   If CBool(Len(.PrefixCharacter)) Then
     .Offset(, 1).Value = Val(.Value)
   Else
     .Offset(, 1).Value = .Value
   End If
  End With
  Application.EnableEvents = True
End Sub

というコードで、Eに入力され次にFに入力されるとGに結果が出るというようにしてみました。
ここで、Fに入力される数字が「-1」なら「A」、「-2」なら「B」、「-3」なら「C」という項目を付け加えたいと思うのですが、どうにもうまくいきません。
よい方法がありましたらぜひ教えて下さい。
よろしくお願い致します。

【35328】Re:文字の入力について
発言  ponpon  - 06/2/26(日) 20:17 -

引用なし
パスワード
   ▼エクセラ さん
こんばんは。

今一何をされているかわかりませんが、
Select Case で分岐されては?  意味が違うかな?

>Private Sub Worksheet_Change(ByVal Target As Range)
>  If Intersect(Target, Range("F4:F28,I4:I28,L4:L28,O4:O28,R4:R28")) Is Nothing Then Exit Sub
>  With Target
>   If .Count > 1 Then Exit Sub
>   If IsEmpty(.Value) Then Exit Sub
>   If IsEmpty(.Offset(, -1).Value) Then Exit Sub
   Select Case .Value
    Case -1: .Value = "A"
    Case -2: .Value = "B"
    Case -3: .Value = "C"
   End Select

>   Application.EnableEvents = False
>   If CBool(Len(.PrefixCharacter)) Then
>     .Offset(, 1).Value = Val(.Value)
>   Else
>     .Offset(, 1).Value = .Value
>   End If
>  End With
>  Application.EnableEvents = True
>End Sub
>

【35329】Re:文字の入力について
お礼  エクセラ  - 06/2/26(日) 21:05 -

引用なし
パスワード
   ▼ponpon さん:
解決しました!
ありがとうございました!

【35330】Re:文字の入力について
質問  エクセラ  - 06/2/26(日) 21:19 -

引用なし
パスワード
   すみません、もう一つ質問なのですが、もしこの-1のところが文字になる場合はどのようにしたらよいのでしょうか?
ためしに"A"でやってみたところうまくいかなかったものですから・・・。
よろしくお願い致します。

【35361】Re:文字の入力について
発言  ponpon  - 06/3/1(水) 20:02 -

引用なし
パスワード
   ▼エクセラ さん:
>すみません、もう一つ質問なのですが、もしこの-1のところが文字になる場合はどのようにしたらよいのでしょうか?
私がわかることでしたら。


Fに入力される数字が「-1」なら「A」、「-2」なら「B」、「-3」なら「C」
              ↑        ↑        ↑
           ここに文字     ここに文字    ここに文字
ということですか?
 
>ためしに"A"でやってみたところうまくいかなかったものですから・・・。

どんなコードを書いたら、どううまくいかなかったのでしょうか

【35369】Re:文字の入力について
質問  エクセラ  - 06/3/1(水) 22:28 -

引用なし
パスワード
   ▼ponpon さん:
わかりにくくてすみません。
例えば、「あ」なら「A」、「い」なら「B」ということです。

文字だから

   Select Case .Value
    Case "あ": .Value = "A"
    Case "い": .Value = "B"
    Case "う": .Value = "C"
   End Select

としてみました。
やっぱり"あ"のところがまずかったのでしょうか?

【35370】Re:文字の入力について
発言  ponpon  - 06/3/1(水) 22:55 -

引用なし
パスワード
   ▼エクセラ さん:
>例えば、「あ」なら「A」、「い」なら「B」ということです。
>
>文字だから
>
>   Select Case .Value
>    Case "あ": .Value = "A"
>    Case "い": .Value = "B"
>    Case "う": .Value = "C"
>   End Select
>
>としてみました。

こちらでは、何の問題もなく変換されていますが・・・

 もしよかったら、
 PrefixCharacterを使ったことがないものですから、
 以下コードで何をしているかを教えていただけませんか?
 接頭辞の長さをBool型に変換して
 Trueなら(接頭辞(')があった場合(文字列?))は数値に直して
 それ以外は、そのままOffset(,1)に転記?

   If CBool(Len(.PrefixCharacter)) Then
     .Offset(, 1).Value = Val(.Value)
   Else
     .Offset(, 1).Value = .Value
   End If

【35460】Re:文字の入力について
発言  エクセラ  - 06/3/5(日) 14:16 -

引用なし
パスワード
   ▼ponpon さん:
返事が遅くなりすみませんでした。
なぜか今日やってみるとちゃんと動きました。
今までは動かなかったのに・・・。
日によって動いたり動かなかったりっていうことはありえませんよね???
とりあえずは解決ということにしてもいいのでしょうか?^^;

【35462】Re:文字の入力について
質問  エクセラ  - 06/3/5(日) 14:24 -

引用なし
パスワード
   ▼ponpon さん:
何度もすみません。
実際には

Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("F4:F28,I4:I28,L4:L28,O4:O28,R4:R28")) Is Nothing Then Exit Sub
  With Target
   If .Count > 1 Then Exit Sub
   If IsEmpty(.Value) Then Exit Sub
   If IsEmpty(.Offset(, -1).Value) Then Exit Sub
      Select Case .Value
    Case "'-1": .Value = "休み"
    Case "'-2": .Value = "計年"
    Case "'-3": .Value = "出張"
   End Select
   Application.EnableEvents = False
   If CBool(Len(.PrefixCharacter)) Then
     .Offset(, 1).Value = Val(.Value)
   Else
     .Offset(, 1).Value = .Value
   End If
  End With
  Application.EnableEvents = True
End Sub

としております。
ここで、「'-1」が入力されたときに「休み」としたいのですが「-1」となってしまいます。
どこを直せばうまくいくのかわからなくなってしまいました・・・。

【35464】Re:文字の入力について
発言  ponpon  - 06/3/5(日) 19:57 -

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

>なぜか今日やってみるとちゃんと動きました。
>今までは動かなかったのに・・・。

Application.EnableEvents = False
のままエラー終了すると、イベントが発生しなくなります。
その後何度やっても、Worksheet_Changeは発生しないので、イベントマクロは動きません。
そんなときは、イミディエイトウィンドウに
Application.EnableEvents = True と記述してエンターでイベントが発生するようになります。


前回質問したのですが・・・・
PrefixCharacterの使い方がよくわからないのですが、
以下のようなことですか?
よくやっていることの意味がわからないので、
うまくいかないときは、識者の回答をお待ちください。

Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("F4:F28,I4:I28,L4:L28,O4:O28,R4:R28")) Is Nothing Then Exit Sub
  With Target
   If .Count > 1 Then Exit Sub
   If IsEmpty(.Value) Then Exit Sub
   If IsEmpty(.Offset(, -1).Value) Then Exit Sub
   Application.EnableEvents = False
   If Len(.PrefixCharacter) > 0 Then
    Select Case .Value
     Case "-1": .Offset(, 1).Value = "休み"
     Case "-2": .Offset(, 1).Value = "計年"
     Case "-3": .Offset(, 1).Value = "出張"
     End Select
   Else
     .Offset(, 1).Value = .Value
   End If
  End With
  Application.EnableEvents = True
End Sub

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