Excel VBAのCharacters関数の使い方と注意点

このQ&Aのポイント
  • Excel VBAのCharacters関数を使用して指定のセル内の一部の文字を太字にする方法について説明します。基点の指定や文字数の制限に注意しながら、正確な位置に太字を適用する方法をご紹介します。
  • 質問者はRange("b43").Characters(5, 10).Font.bold = Trueというコードを実行したが、指定のセルが太字にならなかったとのことです。他のパラメーターを試してみたが、同じく太字になりませんでした。基点が1以外だとうまく動かず、基点が1だと全体が太字になってしまいます。どのようにすれば狙った場所だけ太字にできるのかについて解説します。
  • 質問者はRange("b43").Characters(5, 10).Font.bold = Trueのコードで指定のセルを太字にしたいが、うまくいかないとのことです。基点を変えても全体が太字になってしまい、目的の場所だけ太字にする方法が分かりません。使う関数やパラメーターに注意しながら、正確に文字を太字にする方法をご説明します。
回答を見る
  • ベストアンサー

Excel VBAのCharacters関数

Range("b43").Characters(5, 10).Font.bold = True と入れたのですが、指定のセルが全く太字になってくれません。いろいろパラメーターをいじってみたのですが、 Range("b43").Characters(1,10).Font.bold = True Range("b43").Font.bold = True の両方で、全部太字になる現象が起きました。基点が1以外ですとまったく動いてくれず、基点が1だと全部太字になってしまうようです。どのようにすれば狙った場所だけ太字にすることができるのでしょうか? セル自体にはvlookup,char(10),concatenate,if,iserrorの関数が使用されています。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

ご相談で掲示されたマクロは合ってます。 が、「関数で計算した結果」の途中文字を書式変更することは、そもそもできません。エクセルの通常操作でも、マクロでも。 >どのようにすれば狙った場所だけ太字にすることができるのでしょうか? 敢えて行うとすれば range("B43").value = range("B43").value range("B43").characters(1,10).font.bold = true のように値にすれば、出来ます。

shallowsou
質問者

お礼

やってみたらできました。ありがとうございます。一度使った後は元に戻したいので、これは自分で組みながらやってみます。関数の結果の書式が変更できないということは初めて知りました。

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

Range("b43").Characters(Start:=5, Length:=10).Font.FontStyle = "太字"

関連するQ&A

  • EXCEL VBA 文中の書式ごと複写するには

    EXCEL VBAのプログラミングについて教えてください。 セルA1とセルB1が結合されており、セルには「あいうえお」と入力されています。 入力された「あいうえお」の内、「いうえ」は赤文字+太字を設定したと仮定します。 その結合されたセルの文章と文字色+太字を、結合されていないA3というセルに複写する場合、 下記の様なコードを考えてみましたが、長文になると処理が遅いので知恵を貸してください。 Range("A3").Value = Range("A1").Text For i = 1 To Len(Range("A1").Text)   Range("A3").Characters(i, 1).Font.Color = Range("A1").Characters(i, 1).Font.Color   Range("A3").Characters(i, 1).Font.Bold = Range("A1").Characters(i, 1).Font.Bold Next i よろしくお願いします。

  • エクセル2002のVBAで太文字を検索したいのですが、

    エクセル2002のVBAで太文字を検索したいのですが、 <状況> B列にチェックしたい文字が入力されています <やりたいこと> B列に入力されている文字の中から、太文字のみを抜き出して、 太字の見つかった行のG列に太文字のみを抜き出して複写したい <自作マクロの現状> セル全体の太文字検索は下記のマクロ「太字検索チェック1」で完成しましたが、 セルに記載してある文字の中で「一部は普通文字、のこり一部は太文字」と混在 しているセルの中身から太文字部分のみを別のセルに抜き出したいのですが、 そのマクロを「太字検索チェック2」のように書きました。 しかし「太字検索チェック2」の「 If dat.Font.Bold = True Then」の部分で 「型が違う・・・」のエラーで先に進みません。 どなたか、セルの中身の太文字のみを抜き出すマクロを教えてください よろしくお願いします   Sub 太字検索チェック1() i = 3 Worksheets("テスト").Activate For Each myRng In Range("B:B") セル = "b" & i If Range(セル).Font.Bold = True Then Cells(i, 7) = Cells(i, 2) ’太字のCells(i, 2)を Cells(i, 7) にコピー End If i = i + 1 If i = 1703 Then ’1703番地で終了 Exit For End If Next End Sub Sub 太字検索チェック2() i = 3 Worksheets("テスト").Activate For Each myRng In Range("B:B") 内容 = Cells(i, 2) 文字数 = Len(内容) For p = 1 To 文字数 dat = Mid(内容, p, 1)       X=8+P If dat.Font.Bold = True Then  ’1文字づつ太字を検索 Cells(i, X) = dat        ’太字なら→Cells(i, X) にコピー End If Next i = i + 1 If i = 1703 Then Exit For End If Next End Sub

  • 選択文字列ではなく引数を太字にするユーザー定義関数

    質問を見ていただき、ありがとうございます。 Excel2010でユーザー定義関数を作っています。 目指している機能は、ワークシート上のセルで =Bold("あいう") とすると あいう が太字で出るというものです。 選択したセルの内容を太字にしたいのであれば、 Function Bold() Selection.Font.Bold = True End Function とすれば良いのですが、引数を指定して Function Bold(S) S.Font.Bold = True End Function としても(当然ながら)うまく行きません。 なんとかして目的の機能を持つユーザー定義関数を作りたいのですが、 良い方法はありませんでしょうか。

  • VBAでダブルコーテーション入りの数式をセルにセットしたい

    VBAにて下記質問があります。 複数の質問を連続して投稿するのもどうかと思い、 不慣れなもので、1投稿で2種類の質問を記載いたしましたが、 迷惑等になるのであれば、削除後複数投稿にて再度投稿したいと思いますので、遠慮なくご指摘下さい。 さて、本文ですが、 1.VBAにてExcelのあるセルに数式をセットしたいのですが、数式内にダブルコーテーションがある為、上手くセットできません。 2.VBAでRange関数のパラメータを可変にしたい。 1について、 セットしたい数式 =IF(ISERROR(VLOOKUP(H23,ini!B36:D401,3))=TRUE,"",IF(VLOOKUP(H23,ini!B36:D401,3)=0,"",VLOOKUP(H23,ini!B36:D401,3))) セットしたいセルをH44とした場合、単純に .Range("H44").Value = "=IF(ISERROR(VLOOKUP(H23,ini!B36:D401,3))=TRUE,"",IF(VLOOKUP(H23,ini!B36:D401,3)=0,"",VLOOKUP(H23,ini!B36:D401,3)))" このように書いてエラーになってしまいます。 ダブルコーテーションがあるので当然だとは思うのですが、 回避の仕方がわかりません。 また、2についてですが、 「ワークシートに書かれた値をRangeのパラメータとして代入したい。」 仮にSheet1のA2のセルにA~Fまでのいづれかの値が入るものとする。 Range関数の列の指定はA2の値を参照し、代入したい。 A2の値:C worksheets("sheet1").Range("〇1”).Value 〇にCが入るようにしたい。 当然、A2がFになったらFが代入されるようにしたい。 色々検索し、調べてみたのですが上手く見つけられませんでした。 VBA初心者である為、上記説明が分かりづらいかもしれませんが、 分かる方おりましたら、ご教授の程、よろしくお願い致します。

  • VLOOKUP関数 エクセル関数教えてください

    =IF(ISERROR(VLOOKUP(B2,$E$1:$F$296,2,FALSE)),"",VLOOKUP(B2,$E$1:$F$296,2,FALSE)) という関数を入れて、品番をセルに入力して元表から品名を導く表を作成しました。うまく使えています。 これを元に =IF(ISERROR(VLOOKUP(B2,$F$1:$I$1000,2,FALSE)),"",VLOOKUP(B2,$F$1:$I$1000,2,FALSE)) という関数に直して、同じような表を作ろうとしたのですが、うまくいきません。 何が悪いのか分かりません。 どうすればうまくいきますでしょうか?

  • excel vba

    VBAに不慣れなので教えてください。 今下記のプログラム(A1セルで青色以外の文字を消去する)はA1セルのみを対象にしているのですが、 (1)セルをA1からA3までにする。 (2)処理対象をA1のある列を対象とするようにしたい。 各々どう手直しすればいいか。 プログラムtest Public Sub test() Dim r As Range Dim i, wk As String Set r = Range("A1") wk = "" For i = 1 To Len(r.Value) Debug.Print r.Characters(i, 1).Font.ColorIndex If r.Characters(i, 1).Font.Color = vbBlue Then wk = wk + r.Characters(i, 1).Text End If Next r.Value = wk r.Characters.Font.Color = vbBlue End Sub

  • エクセルVBA

    Sub 金額未記入のセルをカウント() Dim kensu As Long Range("I100").End(xlUp).Select 'リストの最終行を、上方向に向けて指定する Selection.Offset(0, 1).Select '上で指定したセルの、右の列のセルを指定する Selection.Font.Bold = True '選択しているセル範囲の文字を太字にする Range(ActiveCell, "J4").Select '最後のセルから上までの範囲を選択する ActiveWorkbook.Names.Add Name:="kingaku", RefersToR1C1:=Selection '金額の範囲に名前をつける Range("I1").FormulaR1C1 = "=COUNTBLANK(kingaku)" 'セルI1に式を代入する End Sub 経常費ファイルについての質問です。 月ごとに、ワークシートがあり、品名、個数のあとに、総額を入れています。 個数は最初からデータが入っているため、総額のところが未記入だと、まだ 品物が入荷していない、と、わかるように工夫しました。 上記のマクロで、各ワークシートごとには、未記入セルの個数を表示できるのですが、 違う月のワークシートでも、その数字が表記されてしまいます。 そこで、マクロを実行するボタンを押すと、その月の未記入セルの個数を出すことは できるのですが、 ワークシートごとに、そのワークシートにあった数字を表記できたままにするには、 どうしたらよろしいでしょうか。 わかりにくい質問で、申し訳ありませんが、よろしくお願いします。

  • エクセルのVBAを教えて下さい。

    Private Sub OptionButton1_Click() Range("A15").Select Selection.Font.ColorIndex = 1 Range("B12").Select Selection.Font.ColorIndex = 1 Range("A18").Select Selection.Font.ColorIndex = 2 Range("B18").Select Selection.Font.ColorIndex = 2 Sheets("シート1").Image1.Visible = False Sheets("シート1").Image2.Visible = True End Sub 上記のようなプログラムがありますが、たとえば、以下をまとめてコンパクトに出来ますか? Range("A15").Select Selection.Font.ColorIndex = 1 Range("B12").Select Selection.Font.ColorIndex = 1 オートシェイプを利用して画像をエクセル内に作りました。 その画像を表示、非表示させたいのですが、どのようにすればよいでしょうか?よろしくお願いします。

  • エクセルVBAとワークシート関数が違う答え?

    エクセル2013です。 A1セルからA100セルにすべて1%と入力されています。 BIセルに =SUM(A:A) と数式が入っており、100%と表示されています。 A,B列のセルの書式はすべてパーセテージです。 101行以下には何も入っていません。 C1セルに =B1=1 と数式が入っており、TRUEが表示されています。 標準モジュールに Sub test01() MsgBox Range("B1").Value = 1 End Sub と書きました。 実行したところFalseが帰ってきました。 なぜ、TRUEにならないのでしょうか? なお、 Sub test02() MsgBox Val(Range("B1").Value) = 1 End Sub とすると、TRUEが帰ります。 でも、Val関数はStringを数値化するものですよね? B1セルはもともと数値なのでVal関数で答えが変わるのも不思議です。 どなたか、わかるように教えていただけないでしょうか?

  • VBAの関数について

    VBA初心者です。 VLOOKUP関数の使い方がわかりません。 具体的に書かせてもらうと VBAの中にVLOOKUP関数を使いたいです 試験1ファイルのシート"sheet1"にある 検索値を使い 試験2ファイルの指定した検索範囲を 試験1ファイルのシート"sheet1"の指定した位置に数値を挿入することです。 例えばですが(この使い方も間違ってるかもしれません)コードを書いてみると 試験1の検索値はA5セルとします 試験2の検索範囲はB1~C20とします 検索範囲から取得した数値の位置はD5とします VLOOKUPに関してですが 検索値は変数を使い 検索値範囲も変数を使い 列番号はC列がいいので3で 検索方法はFALSEでお願いします sub test() dim a as range dim b as workbooks dim c as range set a = range("B1~C20") set b = workbooks("sheet1") set c = range("A5") workbooks("試験1").worksheets("sheet1").range("D5").value=workbooks("試験2").activesheet."=VLOOKUP(ここがわかりません)".value end sub そもそも変数やsetの使い方が間違ってるかもしれませんm(__)m コードを書いて貰えるととても助かります。 回答お願いします。

専門家に質問してみよう