- 締切済み
エクセルでマクロを自動で実行させることはできますか?
エクセルで 9-9-9 とか書いてあるとこを○の中に9という風に変換する マクロをこちらで教えてもらったのですが これを9-9-9とかのデータを貼り付けた途端に マクロで○の中数字に変換させることはできるんでしょうか? 変換させたい列は決まっていてUの列なんです。 宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 前回の#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 '--------------------------------------
- imogasi
- ベストアンサー率27% (4737/17070)
こんなことを質問しているのでしょうか。 本当は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)
こんにちは。 「シートのチェンジイベント」というのは、たぶん、イベント・ドリブン型のマクロをシートモジュールに入れるということだと思います。シートモジュールに貼り付ければよいとはいうのは分りますが、元の話が見えてないので、今のところは不可能だと思います。 >9-9-9とかの数字は18まであってランダムに変わります。補足頂ければ幸いです。 というか、「マクロをこちらで教えてもらったのですが」という元のマクロは、どんなだったのかなって思います。たぶん、前回、解決しているから、こうして次のご質問が出たのだと思います。 しかし、全角/半角混合/半角のみとか、オートシェイプで○を入れるのとか、Unicodeの丸付き数字に置き換えるのか分りませんが、そのマクロに渡す引数になるものが見えていません。ご質問者さんが満足されるようなマクロは、とても私には出来ません。 例 9-9-9 12-12-3 など。 元のマクロは、フォントの大きさ、種類、標準スタイルのセル幅など、一定の条件の上で作られたものだと信じますが、上記のような問題をどのようにクリアされたのでしょうか、私にはわからないことだらけです。
お礼
http://oshiete1.goo.ne.jp/kotaeru.php3?q=792728 回答ありがとうございました。↑のが元の質問です。No.4の所で教えてもらったマクロでうまくいきましたが貼り付けた瞬間にマクロが作動するようにしたいのです。できますか?
こんんばんは。 シートのチェンジイベントで処理すればいいです。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 21 And Target.Value = "9-9-9" Then 'ここに処理を記述 End If End Sub
お礼
回答ありがとうございます。 シートのチェンジイベントとか全く知らないのですがどうすればいいんでしょうか? 9-9-9とかの数字は18まであってランダムに変わります。補足頂ければ幸いです。
お礼
お礼が遅くなり申し訳ございません。回答ありがとうございました。