• 締切済み

エクセルでマクロを自動で実行させることはできますか?

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

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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 '--------------------------------------

masaro55
質問者

お礼

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

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

こんなことを質問しているのでしょうか。 本当は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 を貼り付ける。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 「シートのチェンジイベント」というのは、たぶん、イベント・ドリブン型のマクロをシートモジュールに入れるということだと思います。シートモジュールに貼り付ければよいとはいうのは分りますが、元の話が見えてないので、今のところは不可能だと思います。 >9-9-9とかの数字は18まであってランダムに変わります。補足頂ければ幸いです。 というか、「マクロをこちらで教えてもらったのですが」という元のマクロは、どんなだったのかなって思います。たぶん、前回、解決しているから、こうして次のご質問が出たのだと思います。 しかし、全角/半角混合/半角のみとか、オートシェイプで○を入れるのとか、Unicodeの丸付き数字に置き換えるのか分りませんが、そのマクロに渡す引数になるものが見えていません。ご質問者さんが満足されるようなマクロは、とても私には出来ません。 例 9-9-9 12-12-3 など。 元のマクロは、フォントの大きさ、種類、標準スタイルのセル幅など、一定の条件の上で作られたものだと信じますが、上記のような問題をどのようにクリアされたのでしょうか、私にはわからないことだらけです。

masaro55
質問者

お礼

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

noname#187541
noname#187541
回答No.1

こんんばんは。 シートのチェンジイベントで処理すればいいです。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 21 And Target.Value = "9-9-9" Then 'ここに処理を記述 End If End Sub

masaro55
質問者

お礼

回答ありがとうございます。 シートのチェンジイベントとか全く知らないのですがどうすればいいんでしょうか? 9-9-9とかの数字は18まであってランダムに変わります。補足頂ければ幸いです。

関連するQ&A