• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:続・エクセルのユーザー定義で )

続・エクセルのユーザー定義で12345B1で12345AB-1にする方法

このQ&Aのポイント
  • エクセルのユーザー定義で「12345B1」で「12345AB-1」にする方法を教えてください。
  • 「12345A67-1」という風にAの次の数字が二桁の場合が出てきて、「12345671」では「123456A7-1」になってしまいます。前回教えていただいたコードをいじれば修正可能なのでしょうか?
  • 新たに「12345671」の入力で「12345A67-1」となるようにしたいのです。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.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

yatchky303
質問者

お礼

ありがとうございます。出来ました。 元データが変わるというのは全然構いません。ユーザー定義も必要なくなるということですね。 今夜はよく眠れそうです。

その他の回答 (1)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

次のようなコードにすればよいでしょう。 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

yatchky303
質問者

補足

ご回答ありがとうございます。 出来た!と思ったのですが、前回の「12345B1」で「12345AB-1」にすることが出来なくなりました。 前回のコードのどこかを追加すればいいのかと思うのですが、素人ゆえ分かりません。 宜しくお願い致します。

関連するQ&A

専門家に質問してみよう