プロが教える店舗&オフィスのセキュリティ対策術

エクセルで
9-9-9
とか書いてあるとこを○の中に9という風に変換する
マクロをこちらで教えてもらったのですが
これを9-9-9とかのデータを貼り付けた途端に
マクロで○の中数字に変換させることはできるんでしょうか?
変換させたい列は決まっていてUの列なんです。
宜しくお願いします。

A 回答 (4件)

こんばんは。



前回の#4さんのコードはユニークだと思います。
本来は、前回の#4さんのコードをサブルーチンにしてしまっても良いわけです。

Sub chgStringFormat(arg as Range)
Selection の部分を、arg に換えて使えるはずです。

しかし、まあ、こちらもVBAを書く側として、あまり人のマクロを使うわけには行きませんもで、最初から、こちらで作り直しました。

前の書き込みのNo.4さんよりも、もう少し、エラー処理を厳しくしました。

>9-9-9とかの数字は18まであってランダムに変わります。

この条件は、元のものに従うことにしましたので、21を越えた時に、( )になります。全角/半角の入力は区別はありません。

=======================
コードの貼り付けの手順
========================
画面の下の[シートタブ]を右クリック-[コードの表示]-白い画面に貼り付ける


'<シートモジュール>
'--------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim InBuf As String
  Dim OutBuf As String
  Dim arBuf() As String
  Dim c As Range
  Dim NumberItem As String
  Dim cnt As Integer
  Dim i As Integer
  Dim j As Integer
  Dim k As Integer
  'U列であるかチェック(21列)
  If Target.Column <> 21 Then Exit Sub
  'Event の起動を制御
  Application.EnableEvents = False
  For Each c In Target
   If VarType(c.Value) = vbDate Then
     InBuf = Format$(StrConv(c.Value, vbNarrow), "yy-mm-dd")
   ElseIf StrConv(c.Value, vbNarrow) Like "#*-#*-#*" And _
     Len(c.Value) - Len(Replace(c.Value, "-", "", , , vbTextCompare)) = 2 Then
     InBuf = StrConv(c.Value, vbNarrow)
   End If
   If Len(InBuf) > 0 Then
     '配列に格納
     arBuf() = Split(InBuf, "-")
     For j = LBound(arBuf()) To UBound(arBuf())
      NumberItem = arBuf(j)
      If IsNumeric(NumberItem) Then '数字であるか
        If CLng(NumberItem) < 21 Then '21以下であるか
         OutBuf = OutBuf & Chr(&H8740 + CInt(NumberItem) - 1)
         cnt = cnt + 1
        Else
         OutBuf = OutBuf & "(" & NumberItem & ")"
         cnt = cnt + 1
        End If
      End If
     Next j
     If cnt = 3 Then '変換チェック
     c.Value = OutBuf
     End If
     c.NumberFormat = "General"
     OutBuf = ""
     cnt = 0
   End If
  Next c
  Application.EnableEvents = True
End Sub
'--------------------------------------
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ございません。回答ありがとうございました。

お礼日時:2006/03/25 03:36

こんなことを質問しているのでしょうか。


本当はU列らしいが、A列とします。
全角で5-4-2のような文字列をコピーして、A列に貼り付けると
(5)-(4)-(2)になる。以下「まる1」などは(1)のように表示されます。読み変えてください。
シートのチェンジイベントに
Private Sub Worksheet_Change(ByVal Target As Range)
a = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
b = Array("", "(1)", "(2)", "(3)", "(4)", "(5)", "(6)", "(7)", "(8)", "(9)")
If Target.Column = 1 Then
For i = 0 To UBound(a)
Target.Replace What:=a(i), Replacement:=b(i)
Next i
End If
End Sub
を貼り付ける。
    • good
    • 0

こんにちは。



「シートのチェンジイベント」というのは、たぶん、イベント・ドリブン型のマクロをシートモジュールに入れるということだと思います。シートモジュールに貼り付ければよいとはいうのは分りますが、元の話が見えてないので、今のところは不可能だと思います。

>9-9-9とかの数字は18まであってランダムに変わります。補足頂ければ幸いです。

というか、「マクロをこちらで教えてもらったのですが」という元のマクロは、どんなだったのかなって思います。たぶん、前回、解決しているから、こうして次のご質問が出たのだと思います。

しかし、全角/半角混合/半角のみとか、オートシェイプで○を入れるのとか、Unicodeの丸付き数字に置き換えるのか分りませんが、そのマクロに渡す引数になるものが見えていません。ご質問者さんが満足されるようなマクロは、とても私には出来ません。


9-9-9
12-12-3

など。
元のマクロは、フォントの大きさ、種類、標準スタイルのセル幅など、一定の条件の上で作られたものだと信じますが、上記のような問題をどのようにクリアされたのでしょうか、私にはわからないことだらけです。
    • good
    • 0
この回答へのお礼

http://oshiete1.goo.ne.jp/kotaeru.php3?q=792728
回答ありがとうございました。↑のが元の質問です。No.4の所で教えてもらったマクロでうまくいきましたが貼り付けた瞬間にマクロが作動するようにしたいのです。できますか?

お礼日時:2005/12/17 21:29

こんんばんは。



シートのチェンジイベントで処理すればいいです。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 21 And Target.Value = "9-9-9" Then
'ここに処理を記述
End If
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
シートのチェンジイベントとか全く知らないのですがどうすればいいんでしょうか?

9-9-9とかの数字は18まであってランダムに変わります。補足頂ければ幸いです。

お礼日時:2005/12/09 20:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!