• 締切済み

斜体文字のみのカウント方法を教えてください。

ExcelのVBAで斜体文字のみカウントすることはできますか? 例えば、下記のような文章で、A列に「田中」という文字列が斜体になっている場合 「田中」の文字列の合計をC列で取得したい。   A1          B1     C1(合計)  田中(斜体)     田中     1 使用OS:Windows 8 使用ソフト:Microsoft Excel 2010 ご存知の方がおられましたらご回答をよろしくお願いします。

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 或いはもしかしますと、A列のセルに入力して行く際に、 (フォントを標準に設定)あいうえお(フォントを標準から斜体に変更)かきくけこ(フォントを斜体から標準に変更)さしすせそ(フォントを標準から斜体に変更)たちつてと(フォントを斜体から標準に変更)なにぬねの という具合に入力して行ったセルがあった場合には、その1つのセルの中の文字列には、斜体で記述された箇所が「かきくけこ」と「たちつてと」の2箇所ある事になるので、そのセルと同じ行のC列のセルには2と表示したい、という事なのでしょうか?  もしそうだとしますと、次の様なVBAのマクロとなります。 Sub Macro01()  Dim f1, f2 As Variant  Dim i, j, l, n, fr, lr As Long  Dim s As String  fr = 1  lr = Range("A" & Rows.Count).End(xlUp).Row  For i = fr To lr   n = 0: s = "": f2 = "斜体"   With Range("A" & i)    l = Len(.Value)    If l = 0 Then GoTo Label1    For j = 1 To l     f1 = .Characters(Start:=j, Length:=1).Font.FontStyle     If StrConv(Mid(.Value, j, 1), vbNarrow) = " " Then f1 = ""     If f1 = "斜体" Then      If j = fr Then n = 1      If f2 <> "斜体" Then       s = s & " "       n = n + 1      End If      s = s & Mid(.Value, j, 1)     End If     f2 = f1    Next j    s = Trim(s)   End With   With Range("B" & i)    .Font.FontStyle = "斜体"    .Value = s   End With   Range("C" & i).Value = n Label1:  Next i End Sub

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 御質問は関数の話ではなく、VBAの話ですね。  C1セルの値に関して確認したいのですが、「田」と「中」の両方が斜体になっているのですから、斜体になっている文字数の合計は1ではなく、2ではないでしょうか?  以下は、A1セル~「A列において、何らかの値が表示されているセルの中で最も下にあるセル」に入力されている文字列の中で、斜体で記されている文字列のみをB列のセルに取り出すと共に、斜体で記されている文字数をC列のセルに表示させるVBAのマクロの一例です。 Sub Macro()      Dim f1, f2 As Variant   Dim i, j, l, n, fr, lr As Long   Dim s As String      fr = 1   lr = Range("A" & Rows.Count).End(xlUp).Row   For i = fr To lr   n = 0: s = ""   With Range("A" & i)   l = Len(.Value)   If l = 0 Then GoTo Label1   For j = 1 To l   If StrConv(Mid(.Value, j, 1), vbNarrow) = " " Then   f1 = ""   s = s & " "   Else   f1 = .Characters(Start:=j, Length:=1).Font.FontStyle   End If   If f1 = "斜体" Then   n = n + 1   s = s & Mid(.Value, j, 1)   f2 = .Characters(Start:=j + 1, Length:=1).Font.FontStyle   If f2 <> "斜体" Then s = s & " "   End If   Next j   s = Application.WorksheetFunction.Trim(s)   End With   With Range("B" & i)   .Font.FontStyle = "斜体"   .Value = s   End With   Range("C" & i).Value = n Label1:   Next i    End Sub  尚、もしカウントを始めるセルをA1セルからではなく、A2セルからに変える場合には、 fr = 1 の部分を fr = 2 等の様に変更して下さい。

tsutsumi41
質問者

補足

連絡が遅くなりまして申し訳ありません。 ご指摘頂きました通り「田」と「中」の両方が斜体になっているので、斜体になっている文字数の合計は1ではなく、2になります。 VBAの知識が薄い為、稚拙な質問で申し訳ありませんが、C1に斜体の合計数を表示させるためにはセルにどのような数式を入力すればよろしいのでしょうか? 教えて頂けないでしょうか? よろしくお願い申し上げます。

  • hue2011
  • ベストアンサー率38% (2801/7250)
回答No.1

それはできません。 そのカラムを斜体表示にする原因が、別のカラムの中にあるなら話は別です。 たとえば  C5が20以上であればB5は斜体、だとか  D5がマイナスならばB5は赤字、だとか の条件があってB5の表示状況が変わる作りであれば、その原因事象で対応できます。 B5が斜体の場合どうする、ではなく、C5が20以上だからこうする、という書き方です。 Excelの関数は値しか扱わない仕様だということに気付いてください。 あるカラムが計算式で表示されている場合もありますが、その値だけみて赤表示なんかにしているでしょう。 計算式を見たり書式属性を見たりしたら、あの関数体系は成立しないのです。

関連するQ&A