• ベストアンサー

エクセルのマクロ

Sub test() x = Range("b1") z = Len(x)  For i = 1 To z   Range("a1").Offset(i - 1, 0).Value = Mid(x, i, 1)  Next i End Sub 上記は、"B1"に入力されているデータを、"A1"から下方向に一文字ずつ入力していくマクロです。 これに条件を付け加えたいのですが。 "今日(きょうは)雨[あめ]でした"のように、"( )"や"[ ]"内の文字はカッコも含めてフォントが赤(ColorIndex = 3)になるようにしたいのですが。 上の例だと、"(きょうは)"と"[あめ]"のフォントが赤になります。 おわかりの方がいましたら、お願いいたします。

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

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

以下ご参考に。 Sub testred() x = Range("b1") z = Len(x) For i = 1 To z ck = Mid(x, i, 1) If ck = "[" Or ck = "(" Then red = True End If Range("a1").Offset(i - 1, 0).Value = ck If red Then Range("a1").Offset(i - 1, 0).Font.ColorIndex = 3 End If If ck = "]" Or ck = ")" Then red = False End If Next i End Sub 括弧の閉じの妥当性チェックは別途考慮してください。"今日(きょうは(雨[あめ]でした"の場合、「雨」も赤くなります。

naruue
質問者

お礼

ありがとうございました。 OKでした。

その他の回答 (3)

  • NCU
  • ベストアンサー率10% (32/318)
回答No.4

そのまんまです。 Sub 切り出し着色()   Dim x As String, y As String, i As Integer, j As Integer   x = Range("B1").Text   For i = 1 To Len(x)     y = Mid(x, i, 1)     If y = "(" Or y = "(" Or y = "[" Or y = "[" Then j = j + 1     With Range("A1").Offset(i - 1)       .Value = y       If j > 0 Then .Font.ColorIndex = 3     End With     If y = ")" Or y = ")" Or y = "]" Or y = "]" Then j = j - 1   Next End Sub

naruue
質問者

お礼

ありがとうございました。 OKでした。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

Sub test01() Dim x As Range Set x = Range("b1") For i = 1 To Len(x) Select Case Mid(x, i, 1) Case "(", "[" cmode = "y" Case Else End Select Cells(i, "A") = Mid(x, i, 1) If cmode = "y" Then Cells(i, "A").Font.ColorIndex = 3 x.Characters(i, 1).Font.ColorIndex = 3 End If Select Case Mid(x, i, 1) Case ")", "]" cmode = "n" Case Else End Select Cells(i, "A").Orientation = xlVertical Cells(i, "A").HorizontalAlignment = xlLeft Next i End Sub 実際やってみると、時間のかかった課題でした。 縦書きセルの文字は括弧を変え、左詰めにしてます。

naruue
質問者

お礼

ありがとうございました。 OKでした。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

こんな感じで如何でしょうか。 所定外のフォント色は、黒とします。 文字列を変更して何回実行してもいいように対処しています。 Sub test() Dim x As String Dim i As Integer Dim Flg As Boolean Range("A:A").Clear x = Range("b1").Value For i = 1 To Len(x)   If Not Flg Then     If Mid(x, i, 1) = "(" Or Mid(x, i, 1) = "[" Then Flg = True   End If   With Range("A" & i)     .Value = Mid(x, i, 1)     If Flg Then       .Font.ColorIndex = 3     Else       .Font.ColorIndex = 0     End If     If Flg Then       If Mid(x, i, 1) = ")" Or Mid(x, i, 1) = "]" Then Flg = False     End If End With Next i End Sub  

naruue
質問者

お礼

ありがとうございました。 OKでした。

関連するQ&A

  • エクセルのマクロ

    任意のセル内の文字の一部をコピー状態にした後に、任意のセルに一文字ずつ貼り付けるマクロを作成したいのですが。 例えば、A1に"あいうえお"と入力されていて、"うえお"をコピー状態にして実行すると、貼り付ける基点となるセルをインプットボックスで指定し、B3が指定されたとするなら、B3に"う"、C3に"え"、D3に"お"が貼り付けられる。 以下のマクロで望んでいる処理が可能になるのですが。 Sub test()  Set x = Application.InputBox(Prompt:="test", Type:=8)   Range("A10").Select   ActiveSheet.Paste   y = Range("A10").Value   z = 0   w = Len(y)     For i = 1 To w      x.Offset(0, z).Value = Mid(y, i, 1)       z = z + 1     Next i   Range("A10").Clear End Sub 上記マクロでは、コピー状態になっている文字を一旦作業用のセルに貼り付けるという処置を取っていますが、そのように作業用のセルを用いないで同じ処理を行うにはどうすればいいでしょうか?

  • エクセルのマクロ

    Sub test() Dim x As Range  For Each x In Selection    If x.Value <> "●" And Selection.Font.ColorIndex = 0 Then    x.Value = "○"  End If Next 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 オートシェイプを利用して画像をエクセル内に作りました。 その画像を表示、非表示させたいのですが、どのようにすればよいでしょうか?よろしくお願いします。

  • 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 よろしくお願いします。

  • エクセル イベントマクロ

    マクロ初心者です。よろしくお願いします。 セル範囲(A1:F20)に何も入力されていなければ塗りつぶしされ、 何か(文字、数字などなんでも)入力されていれば、塗りつぶしがなくなる。 というマクロをあえて、条件付き書式を使わずに行いたいとやってみました。(以下) Private Sub Worksheet_Change(ByVal Target As Range) Dim a As Range For Each a In Range("A1:F20") If a.SpecialCells(xlCellTypeVisible) Then a.Interior.ColorIndex = xlNone Else a.Interior.ColorIndex = 7 End If Next a End Sub ところが、半角数字(0以外)では動作するのですが 文字を入力するとエラーとなり「型が一致しません」と表示されます。 どう直したらよいのでしょうか? 最近マクロをやってみようと始めたので、基本的なことがわかっていないのかも。 どなたか、具体的なご指導お願いします。

  • Excelのマクロに関して

    Excelのマクロで特定のセルに特定の数値が入力されている場合、違うセルにある文字列を入力させる場合 すいません。 説明がものすごく悪くて申し訳ないのですが。 A列(行は100くらいまで)に「100」の数値が入力されている場合に、同じ行のE列に文字列「○○」を返す場合は どのようなマクロを使ったらよろしいですか。 会社の人が Sub TimeIntervalPaint() Dim x As Integer, op As Integer Dim TI As Range Application.ScreenUpdating = False Cells.Interior.ColorIndex = xlNone op = Range("B3").End(xlDown).Row Range("E3:BF" & op).ClearContents Call WorkTime For x = 3 To 150 If Range("A" & x).Value = "101" Then If TI Is Nothing Then Set TI = Union(Range("L" & x), Range("AD" & x), Range("T" & x, "W" & x)) Else Set TI = Union(TI, Range("L" & x), Range("AD" & x), Range("T" & x, "W" & x)) End If こういったマクロを登録しているのですが、新たにE列に文字列を入力できるように改良したいのです。 既に退職していて聞くことすら出来ません。 説明がものすごく悪いのは分かっていますが、どなたかご教授ください。

  • エクセルのマクロについて

    お手数ですが誰か教えてください! BのデーターをAに集計するマクロを作ったのですが 処理速度とっても遅いのです。 高速で処理する方法はありませんでしょうか? 私が作ったマクロ Sub 集計() Dim Z As Integer Dim i As Integer Dim X As Integer For Z = 2 To 2000 For i = 2 To 2000 For X = 3 To 20 If Worksheets("A").cells(Z, 1) = Worksheets("B").cells(i, 1) And       Worksheets("A").cells(1, X) = Worksheets("B").cells(i, 14) Then Worksheets("A").cells(Z, X) = Worksheets("B").cells(i, 16) End If Next X Next i Next Z End Sub       どこかが間違っている気がしますがマクロ初心者のため       先に進めません。       どうかご教授よろしくお願い致します。

  • エクセルVBAで条件付書式の色を取得

    セルに条件付書式で書式設定してあります。 A1は「値」100以下 A2は「値」500以下 A3は「値」1~10の間 B1は「数式」で=B1<A1 以下さまざまな数式があります。 条件に一致すると、セルの文字が「赤」になります。 このとき、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox Target.Font.ColorIndex End Sub を実行しても、ColorIndexは、赤の「3」ではなく「-4105」と表示されます。 「-4105」は何もフォントの色を指定してないセルでも同じく表示されます。 質問1.条件付書式で、条件が一致して表示されたフォントの色は取得できないのでしょうか? 質問2.-4105とは何でしょうか?

  • Excelマクロ 負の数(例-20)を赤にしたい

    こんにちは。 Excel2003でA1からB20までのセルに正と負の数字が混在しています。 負の数字 (-20などマイナス記号が入ったまま) を赤にしたいのです。 調べてマクロを組みましたが書き方がわからないところがあります Sub Macro() Dim r As Range With Range("A1:B20") For Each r In .Cells <-----ここの書き方 If .Cells < 0 Then <-----ここの書き方 With r.Font .ColorIndex = 3 End With End If Next End With End Sub どこを修正すれば良いでしょうか おわかりの方お教えください。

  • 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

専門家に質問してみよう