Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
「セルに入力された文字列を取得する方法」のtakodoさんへ
投稿日時: 21/01/11 15:15:38
投稿者: もこな2

別掲示板ですが、似たような質問がありましたので紹介します。
http://www.excel.studio-kazu.jp/kw/20201231083919.html
↑を見て頂ければわかるとおもいますが、Value2プロパティを参照することで表示形式によらず、入力された内容を調べることができます。
 
あとは、文字数をみて↓のように条件分岐をすればOKのようにおもいます。

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim MyRNG As Range
   If Not Intersect(Range("B:B"), Target) Is Nothing Then
      Application.EnableEvents = False
      For Each MyRNG In Intersect(Range("B:B"), Target)
         Select Case Len(MyRNG.Value2)
            Case 3 To 4
               MyRNG.Value = DateSerial(Year(Date), Left(Format(MyRNG.Value2, "0000"), 2), Right(MyRNG.Value2, 2))
            Case 5 To 6
               MyRNG.Value = DateSerial("20" & Left(Format(MyRNG.Value2, "000000"), 2), Mid(Format(MyRNG.Value2, "000000"), 3, 2), Right(MyRNG.Value2, 2))
         End Select
      Next
      Application.EnableEvents = True
   End If
End Sub

 

回答
投稿日時: 21/01/11 20:13:10
投稿者: WinArrow
投稿者のウェブサイトに移動

便乗させてください。
 
前スレの中に
>無限ループ
という話がありましたが、
Worksheet_Changeイベントの中で、セルの値を変更すると
自分自身(Worksheet_Change)が起動されてしまいます。
 
それを防ぐために、「値」セット前に
> Application.EnableEvents = False
を、実行して、イベントが発生しないよう制御します。
「値」セット後
> Application.EnableEvents = True
で戻しておきます。
 
もう一つ、肝心なこと
操作者が、入力を間違えた時のことを想定してみてください。
どのように修正しますか?
殆どの人は、見えている状態の一部を修正する思います。
例えば、数式バーで修正とか、F2を押して、修正するとか
このような場合、Value2を使って変換すると、どうなるでしょう?
操作者はパニックを起こしませんか?
 
運用としては、入力=表示でないと混乱すると思います。

投稿日時: 21/01/13 13:13:16
投稿者: もこな2

Value2プロパティについては、すでに前トピックでコメントされていましたね。失礼しました。
 
そのほか追加の書き込みもないようなので、閉じておきます。