- ベストアンサー
続・エクセルのユーザー定義で12345B1で12345AB-1にする方法
- エクセルのユーザー定義で「12345B1」で「12345AB-1」にする方法を教えてください。
- 「12345A67-1」という風にAの次の数字が二桁の場合が出てきて、「12345671」では「123456A7-1」になってしまいます。前回教えていただいたコードをいじれば修正可能なのでしょうか?
- 新たに「12345671」の入力で「12345A67-1」となるようにしたいのです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 表示形式の操作ではなく、データそのものを変えてしまうコトになりますが・・・ Private Sub worksheet_change(ByVal Target As Range) If Intersect(Target, Columns(1)) Is Nothing Or Selection.Count <> 1 Then Exit Sub Dim str As String str = Target Application.EnableEvents = False If Target <> "" Then If Len(str) = 7 Then Target = Left(str, 5) & "A" & Mid(str, 6, 1) & "-" & Right(str, 1) Else Target = Left(str, 5) & "A" & Mid(str, 6, 2) & "-" & Right(str, 1) End If End If Application.EnableEvents = True End Sub ※ A列に入るデータの文字数は7、もしくは8という前提です。 ※ 元データを変更させたくない場合は無視してください。m(_ _)m
その他の回答 (1)
- KURUMITO
- ベストアンサー率42% (1835/4283)
次のようなコードにすればよいでしょう。 Private Sub worksheet_change(ByVal Target As Excel.Range) Dim h As Range Dim myStr As String On Error Resume Next For Each h In Application.Intersect(Target, Range("A:A")) '実際に合わせて修正 Application.EnableEvents = False If IsNumeric(h) Then myStr = h If Len(myStr) = 8 Then h = Left(String:=myStr, Length:=5) & "A" & Mid(String:=myStr, Start:=6, Length:=2) & "-" & Right(String:=myStr, Length:=1) ElseIf Len(myStr) = 7 Then h = Left(String:=myStr, Length:=5) & "A" & Mid(String:=myStr, Start:=6, Length:=1) & "-" & Right(String:=myStr, Length:=1) End If End If Application.EnableEvents = True Next End Sub
補足
ご回答ありがとうございます。 出来た!と思ったのですが、前回の「12345B1」で「12345AB-1」にすることが出来なくなりました。 前回のコードのどこかを追加すればいいのかと思うのですが、素人ゆえ分かりません。 宜しくお願い致します。
お礼
ありがとうございます。出来ました。 元データが変わるというのは全然構いません。ユーザー定義も必要なくなるということですね。 今夜はよく眠れそうです。