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

いろいろ調べたのですが、わかりません。
Wordで桁区切りのマクロを作りたいんです。
どなたかお願いします。
ちなみにやってみてできなかったのは

・Excelを開いて桁区切りして結果をコピーする。
・IMEを使う
・手でカンマをいれる
・置換はカンマをあらわす特殊文字がない。
・特殊文字の挿入
・関数の使用

なにかいい方法ないでしょうか。
目的はツールバーにExcelのような桁区切りマクロを作ることです。

A 回答 (5件)

たびたびすみません。

#3 です。

#1 の方が紹介されたコードはマウスで選択した範囲のみ処理します。
こちらの方が便利だと思いました。

が、次の2点改造してみました。

 ・全角・半角数字への対応
 ・0で始まる数字の連続は処理対象外とする


Sub 桁区切り()
  
  Dim Rng     As Range
  Dim SelectionEnd As Long
  Dim RngEnd    As Long
  Dim RngRepEnd  As Long
  Dim strNum    As String

  Set Rng = Selection.Range
  SelectionEnd = Rng.End
  With Rng.Find
    .ClearFormatting
    .Text = "[0-90-9]{4,}"
    .MatchWildcards = True
  End With

  Do While Rng.Find.Execute And Rng.End <= SelectionEnd
    RngEnd = Rng.End
    With Rng
      If Left$(.Text, 1) <> "0" Then
        strNum = Format$(.Text, "#,##0")
        '全半角条件分岐
        If StrComp(.Text, StrConv(.Text, vbWide), vbBinaryCompare) = 0 Then
          '全角の場合
          .Text = Replace$(StrConv(strNum, vbWide), ",", ",")
        Else
          '半角の場合
          .Text = strNum
        End If
      End If
      RngRepEnd = .End
      SelectionEnd = SelectionEnd + (RngRepEnd - RngEnd)
      .Collapse wdCollapseEnd
    End With
  Loop
  Set Rng = Nothing

End Sub

では。
    • good
    • 0
この回答へのお礼

すごいです。完璧です。
ただ、ときどきできない場面があったのです。
でもそう言うときは、段落をエンターマークまで
全部選ぶとうまく行きました。
ありがとうございました。
さっそく、ツールバーにボタンをつくって
遊んでいます。
長い道のりでした。感謝です。

お礼日時:2005/09/14 18:21

こんにちは。



私も、面白そうなので、KenKen_SPさんとは違うものを考えてみました。以下のマクロは、特定の数字しか変更しません。

使用例:

123456という数字を変換する。

という文章があります。そうしたら、カーソルを、1の前に持ってきて、マクロを実行します。 うまくいかなかった場合は、もう一度、先頭を指定してから、再度行ってください。誤変換してしまった場合は、Ctrl+Z で、元に戻ります。全角も変換できます。

ツールボタンに、マクロを設定しても良いですし、ショートカットに設定してもよいと思います。

ショートカット設定マクロを以下に「おまけ」でつけてあります。カーソルラインを、設定マクロに置いて、F5を押して設定したら、一旦、Normal.dot を、Ctrl+S で保存し、Word終了してから、再び、立ち上げればよいかと思います。

<設定場所は、Normal.dot の標準モジュールが望ましいです。> 
ただし、WordのNormal.dot は、Excelと比較して、はるかに脆弱です。バックアップを取ったほうがよいです。

'---------------------------------------
Sub FigureAligment()
  Dim myNumber As String, buf As String
  Dim flg As Boolean
  Selection.MoveEnd Unit:=wdWord, Count:=1
  myNumber = Selection.Text
  If Len(myNumber) <> LenB(StrConv(myNumber, vbFromUnicode)) Then
   flg = True
  End If
  buf = Format$(StrConv(myNumber, vbNarrow), "#,##0")
  If flg Then
   Selection.Text = StrConv(buf, vbWide)
   Else
   Selection.Text = buf
  End If
End Sub
'---------------------------------------------
'-----おまけ(ショートカットを設定するマクロ---

Sub SettingShortCut()
CustomizationContext = NormalTemplate
KeyBindings.Add _
  KeyCategory:=wdKeyCategoryCommand, _
  Command:="FigureAligment", _
  KeyCode:=BuildKeyCode(wdKeyAlt, wdKeyS) 'ショートカットをAlt+Sに設定
End Sub
'---------------------------------------
    • good
    • 0
この回答へのお礼

お。これはまた手動の味わいがあるマクロですね。
マクロってなんだかそれぞれの動きが、かわいいものですね。
桁をくぎることより、マクロ作りに熱中してきました。
いろいろご丁寧にありがとうございます。

お礼日時:2005/09/14 14:16

こんにちは。

KenKen_SP です。

Word の VBA サンプルコードです。ドキュメント内の3つ以上の数字の連続を
探して「桁区切り」にします。

ただ、注意が必要なのは「2005年」のように西暦に関しては、「2,005年」の
ように桁区切りにしないのが通常です。その点をカバーしてません。

あとは、適当にカスタマイズして、ツールバーのボタンにでも割り当てれば
ご希望に近いものができると思います。

Sub 桁区切り()

  Selection.Find.ClearFormatting
  With Selection.Find
    '3つ以上の数字の連続にマッチ
    .Text = "[0-9]{3,}"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .MatchFuzzy = False
    .MatchWildcards = True
  End With
  Do While Selection.Find.Execute
    Selection.Text = Format$(Selection.Text, "#,##0")
    Selection.Collapse wdCollapseEnd
  Loop

End Sub

では。

この回答への補足

すみません。2005年はカンマいりませんが
2005円というのはカンマほしいですね。
お礼の余計な部分は訂正削除します。
ほんとありがとうございました。

補足日時:2005/09/14 14:20
    • good
    • 0
この回答へのお礼

うわー思わず、とりはだ。
一日やっていたんですよ~。
できました。
2005年が、2,005年になったって
そんな細かいことどうでもいいです、やっとできました。
と思ったんですが、
数字の後ろに文字が入っている場合、対象からはずすというようなものを、付け加えられたりなんかすると
さらに完璧になるような気がしてきたのは、
欲張りでしょうか…。

お礼日時:2005/09/14 14:08

「挿入」「フィールド」で


「= 数値 \# #,##0」
とすれば数値がカンマ区切りで表示されます。

でこれを利用するなら
Sub KETA()
'桁区切り
Dim SUUTI As Long
SUUTI = InputBox("桁区切りする数値を入力", "桁区切りマクロ", 0, 1, 1)
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"= " & SUUTI & " \# #,##0", PreserveFormatting:=True
End Sub
参考になりますか?

この回答への補足

ありがとうございます。
早速作っています。むずかしいものですね~。
たぶん、sub以降、Endsubまでをマクロの
編集画面で貼り付けるのですよね。
そしたらマクロ実行途中で、
「桁区切りする数値を入力」って出ます。
ここでなにを入力したらいいのか…?
もしまだみていらしたらお願いします。

補足日時:2005/09/14 13:52
    • good
    • 0

このようなサイトがありました。


参考にしてみてはいかがでしょうか?

参考URL:http://blog.livedoor.jp/daniel_pc/archives/18185 …

この回答への補足

できました。
選択部分が変化するということに気が付きませんでした。恥。

補足日時:2005/09/14 14:42
    • good
    • 0
この回答へのお礼

ありがとうございます。
お礼も兼ねていてもうしわけないのですが
さっそくやってみたのですが、なにも変化しないのです。
やっている事と、記述とどこか違うのかと思うのですが原因がわかりません。
引き続き試してみますが…ううむ。ちなみにわたしは2003Wordです。

お礼日時:2005/09/14 09:27

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