word vba 特定の文字変換について

このQ&Aのポイント
  • word vbaの特定の文字変換方法についての質問です。
  • 質問者は1桁の数値を全角に変換し、2桁以上の数値+カンマを半角変換し、変換されたカンマ+半角数値1桁を全角に変換するソースを作成したが、一部うまく動作していないという問題が発生しています。
  • 具体的には、「[!0-9],[0-9][!0-9]」という部分がうまく動作しておらず、文字「a」を入力すると文字「a」が全角変換されるという現象が発生しています。
回答を見る
  • ベストアンサー

word vba 特定の文字変換について

お世話になります。 word vbaの特定の文字変換を行っております。 条件としては、 (1)1桁の数値を全角に変換 (2)2桁以上の数値+カンマを半角変換 (3)上記で変換されたカンマ+半角数値1桁を全角に変換 ソースを作成してみました。 Dim sw(1 To 3) As String Dim cw(1 To 3) As Integer Dim i As Integer Dim t As Integer t = 1 sw(1) = "[!0-9][0-9][!0-9]" sw(2) = "[0-9,]{2,}" sw(3) = "[!0-9],[0-9][!0-9]" cw(1) = 6 cw(2) = 4 cw(3) = 6 With Selection For i = 1 To 3 .HomeKey wdStory With .Find .ClearFormatting .Text = sw(i) .Replacement.ClearFormatting .Replacement.Text = "" .MatchFuzzy = False .Forward = True .Wrap = wdFindStop .Format = False .MatchWholeWord = False .MatchWildcards = True .Execute End With Do While .Find.Found = True If i = 1 Or i = 2 Then .Range.CharacterWidth = i + cw(i) ElseIf i = 3 Then .Range.CharacterWidth = t + cw(i) End If .Collapse wdCollapseEnd .Find.Execute Loop Next .HomeKey wdStory End With 上手く行かない箇所としまして、 (3)上記で変換されたカンマ+半角数値1桁を全角に変換 ソースの中で、「"[!0-9],[0-9][!0-9]"」 があるんですが、どうやらここがうまくいってないようです。 例えば、ここに、"a"を入れると、word上の"a"の文字が全角変換されます。 雑なソースかと思いますが、 ご指導のほど、よろしくお願いします。

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

  • ベストアンサー
回答No.1

お世話になります。 StrConv 関数を使用されてはいかがでしょう。 ' 全角へ Public Sub ToWide()   Selection.Text = StrConv(Selection.Text, vbWide) End Sub ' 半角へ Public Sub ToNarrow()   Selection.Text = StrConv(Selection.Text, vbNarrow) End Sub

関連するQ&A

  • [VBA]文書内の特定語句をハイライト[Word]

    ある単語のリストがあり、そのリストにある単語が Word 文書内にある場合、すべてをハイライトしたいのですが、うまくできません。 次のコードです。これだと「初出のみ」のヒットしかハイライトされません。 これを「ヒットしたすべて」にかえることはできるのでしょうか? Dim search(2) as string search(0) = "abc" search(1) = "def" search(2) = "ghi" For i = 0 To 2 Selection.Find.ClearFormatting With Selection.Find .Text = search(i) .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Selection.Range.HighlightColorIndex = wdBrightGreen Next

  • VBAプロシージャの間違いを添削願います

    A列からD列にかけてデータが入力されます。B列には4桁の数値が入力されており、 この4桁の数値を利用して、次のようにデータを管理したいと思います。 1.4桁の数値が同じものを抽出する。 2.抽出された数値は、最初に出現している数値の下の行に挿入する。 3.最初に出現している数値以外は削除する。 4.各行は空行が無い状態とする。 これをプロシージャにしたものが下記です。 Sub 重複行削除() Dim lastgyou As Integer Dim i As Integer Dim j As Integer Dim atai As Integer lastgyou = Range("B1").End(xlDown).Row For i = 1 To lastgyou - 1 atai = Cells(i, 2).Value For j = i + 1 To lastgyou If atai = Cells(j, 2).Value Then If j <> i + 1 Then Rows(j).Cut Rows(i + 1).Insert Shift:=xlDown End If i = i + 1 End If Next j Next i End Sub としましたが、重複行が削除されません。 ご教授をお願いいたします。

  • Word2007のマクロについて

    こんにちは。 Word2007のマクロについて質問させて下さい。 ・タイトル行が(16738047)色で、本文が黒文字の日本語の文書があります。 ・タイトル行内でキーワード検索を行いたいです。 ・1個ずつ内容を確認したいので「次を検索」 MsgBoxを使用しています。 以下のコードを実行すると、単語が1個飛ばしに選択されてしまいます。 どこを変更すればいいでしょうか? 教えてください。よろしくお願いします。 Sub タイトル検索() Dim myKW As String 'キーワード myKW = InputBox("検索する文字を入力して下さい") Selection.HomeKey Unit:=wdStory 'カーソルを文頭に移動 With Selection.Find .ClearFormatting .Font.Color = 16738047 .Text = myKW .MatchWildcards = False .MatchFuzzy = False If Len(myKW) = 0 Then Exit Sub If .Execute = True Then Do While .Execute If MsgBox("次を検索", vbokcansel, "確認") = vbOK Then Selection.Find.Execute End If Loop   MsgBox "処理が終了しました。" Else MsgBox "文字はありませんでした。" End If End With With Selection.Find ' 検索・置換のクリア .ClearFormatting: .Replacement.ClearFormatting .Text = "": .Replacement.Text = "" .MatchWildcards = False: .MatchFuzzy = False End With End Sub

  • VBAで、エクセルからワードへの変換について

    VBAは、全くの初心者で、テキスト等のサンプルコードを参照して書いているのですが 期待通りの動きをしないので、教えてください。 やりたい事は、Excelファイル(A-Fカラム、400行程度)を 1行ページのワードに変換し、400枚のワードファイルを作成します。 その際に、添付画面のように、各カラムを、タイトル、連番、内容などと区分けをして フォントも変えたいです。 下のコードでは、転送は、出来るのですが、1行1ページにならず、また、 エクセルの枠も転送されてしまいます。 ワードVBAも試したのですが、特定文字での検索が難しく、各ページでの 改行位置が異なるため、自分の理解では出来ませんでした。 ワードでテンプレートを作って、Excel VBAから差込になるのでしょうか? よろしくお願い致します。 Sub CopyExcelDataToWord() Dim wsSource As Excel.Worksheet Dim cell As Excel.Range Dim collUniqueHeadings As Collection Dim lngLastRow As Long Dim i As Long Dim appWord As Word.Application Dim docWordTarget As Word.Document Set wsSource = ThisWorkbook.Worksheets(1) With wsSource lngLastRow = .Range("A" & Rows.Count).End(xlUp).Row Set collUniqueHeadings = New Collection For Each cell In .Range("A2:A" & lngLastRow) On Error Resume Next collUniqueHeadings.Add Item:=cell.Value, Key:=cell.Value On Error GoTo 0 Next cell End With Set appWord = CreateObject("Word.Application") With appWord .Visible = True Set docWordTarget = .Documents.Add .ActiveDocument.Select End With For i = 1 To collUniqueHeadings.Count With wsSource .Range("A1").AutoFilter Field:=1, Criteria1:=collUniqueHeadings(i) .Range("A1:D" & lngLastRow).Copy End With With appWord.Selection .PasteExcelTable linkedtoexcel:=False, wordformatting:=True, RTF:=False .TypeParagraph End With Next i For i = 1 To collUniqueHeadings.Count collUniqueHeadings.Remove 1 Next i Set docWordTarget = Nothing Set appWord = Nothing End Sub

  • VBAの変数変換のことです

    VBAの変数変換のことです 整数変数=実数変数や実数変数=整数変数でCIntやCSng関数を使わないでOKでしょうか? Dim VAR(20) As Single '単精度浮動小数点数型 (Single) Dim IVARO(20) As Integer '整数型 (Integer) Dim IVAROC(20) As Integer '整数型 (Integer) IVARO(NCD) = VAR(NCD) 'Single to Integer IVAROC(NCD) = CInt(VAR(NCD)) 'Single to Integer これで、IVARO(NCD)とIVAROC(NCD)には同じ値が入っているのですが、 整数=実数でCInt関数を使わないで整数にする構文はOKでしょうか?

  • ExcelのVBAについて質問です

    【初心者です】 現在独学でExcelのVBAを学んでいるのすが、 数値を入力する箱(= a) を8個作り、その数値を自分で入力したのちに、 For文で簡潔に合計した数値を出力させたいのですが、やり方が分かりません。 Suuchiの数は8個で、それぞれに数値を入力して、出力する流れです。 下記の文までは思いついたのですが「???」に該当するもとのをどのように作成すれば良いのか教えていただけないでしょうか? また、そもそもの書き方が違う場合にも指摘していただけると助かります。 Dim Suuchi(0 To 7) As Integer '数値数 Dim total As Integer '合計値 Dim i As Integer 'カウンタ数値 For i = 0 To 7 Suuchi(i) = ??? total = total + Suuchi(i) Next i If chkチェックボタン.Value Then MsgBox "数値の合計は「" & total & "」です", , "数値合計値" End If

  • 文字変換マクロについて

    数値を文字列に変換するマクロで、行数や列数が増えても対応できるようにしたいです。 (並びは…数値 スペース 文字列)どなたか教えてください。 よろしくお願いします。 Sub 文字() Dim i As Long For i = 1 To Range("A1").End(xlDown).Row Cells(i, "C") = Cells(i, "A") With Cells(i, "C") .NumberFormatLocal = "@" .Value = StrConv(Cells(i, "C").Value, vbNarrow) .Value = Format(Cells(i, "C").Value, "'00") End With Next i End Sub

  • VBA "double"から0.1を引くと・・・

    エクセルVBAですが、double型で変数を定義し、-80を代入します。 そこから0.1ずつを引いていきます。すると、途中から桁がおかしくなってしまいます。 (注:別に-80からでなくても、どの値からでも、また、引いていっても足していっても、遅かれ早かれ どこかから桁がおかしくなってしまいます。) -80 -80.1 -80.2 …中略 -80.8 -80.8999999999999 -80.9999999999999 … といった感じです。 どうしてこのようになってしまうのでしょうか。 また、このようにならないためにはどうしたらよいのでしょうか。 いかにサンプルプログラムを載せます。 ------------------------------------------ Sub test() Dim test As Double Dim i As Integer test = -80 For i = 1 To 100 test = test - 0.1 Cells(i, 1) = test Next i End Sub ----------------------------------

  • VBAで実行時エラー'13': がでます

    初歩の初歩ですいません。 VBAで Dim A As Integer Dim B As Integer Dim C As Integer Dim gokei As Integer For i = 8 To 70 A = Cells(i, 4).Value B = Cells(i, 5).Value C = Cells(i, 6).Value goukei = A + B + C Cells(i, 7) = goukei Next i としていますが A = Cells(i, 4).Value のところで今使っているシートだと止まってしまいます。 新規でワークシートを使って仮に数字を代入すると普通に動きます。 今使っているシートもセル内には =100 と入力して 100 と表示され セルの書式設定も数値になってるんですがどうしてでしょうか?

  • Wordのマクロの繰り返しと停止

    Wordで"XX"の場所に"★"の後にある文字列を挿入、という以下のマクロを記録したのですが、この作業を★がなくなるまで繰り返したいと思っております。どのように記入すればよいでようか? Selection.HomeKey Unit:=wdStory Selection.Find.ClearFormatting With Selection.Find .Text = "★" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Selection.Delete Unit:=wdCharacter, Count:=1 Selection.Delete Unit:=wdCharacter, Count:=1 Selection.EndKey Unit:=wdLine, Extend:=wdExtend Selection.Cut Selection.HomeKey Unit:=wdStory Selection.Find.ClearFormatting With Selection.Find .Text = "XX" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Selection.Paste Selection.TypeBackspace End Sub

専門家に質問してみよう