マクロの追加に関する質問

このQ&Aのポイント
  • マクロの追加をお願いしたいです。以前こちらで教えていただきましたマクロを使用していまして、要改善点が2つほど見つかりましたので、どなたかご教授いただけないでしょうか?
  • 1.カナが含まれるセルに対して反応させたいです。 2.コマンドボタンを使用して、特定のセルに対して、反応させることは出来ますでしょうか?
  • 以前こちらで教えていただきましたマクロを使用していまして、要改善点が2つほど見つかりましたので、どなたかご教授いただけないでしょうか?
回答を見る
  • ベストアンサー

マクロの追加をお願いしたいですm(_ _)m

以前こちらで教えていただきましたマクロを使用していまして、要改善点が2つほど見つかりましたので、どなたかご教授いただけないでしょうか? 現在使用しているマクロと改善希望点を以下に記載しますので、宜しくお願いします。 1.カナが含まれるセルに対して反応させたいです。 2.コマンドボタンを使用して、特定のセルに対して、反応させることは出来ますでしょうか? 以下、現使用マクロです。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False With Target セルの内容 = Replace(.Value, " ", "", 1, -1, vbTextCompare) 'すべて全角文字で 数字を含まない場合 名前 とみなす If Not セルの内容 Like "*#*" And 0 < Len(セルの内容) And _ セルの内容 = StrConv(セルの内容, vbUpperCase Or vbNarrow) And _ セルの内容 = StrConv(セルの内容, vbLowerCase Or vbWide) Then '実際に私が行いたいこと・・「 "さま"を付けて」 敬称 = "さま" .Value = .Value & 敬称 If 30 < .Font.Size Then 'セルのフォントサイズより20下のサイズ .Characters(Start:=Len(.Value) - Len(敬称) + 1, _ Length:=Len(敬称)).Font.Size = .Font.Size - 20 Else 'セルのフォントサイズの70% .Characters(Start:=Len(.Value) - Len(敬称) + 1, _ Length:=Len(敬称)).Font.Size = Int(.Font.Size * 0.7) + 1 End If End If End With Application.EnableEvents = True End Sub 以上、宜しくお願い致します。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 Wendy02 です。 >別のシートに転記(ex.sheet1!A2)させた時に、2種類のフォントサイズが1種類に戻ってしまうのです。 転記というのは、 =Sheet1!A2 とさせることですね。 そこで、二つの解決法があります。 私個人としては、最初のほうが好みです。 ひとつは、図のリンク貼り付けで、もう一つは、マクロです。 ・図のリンク貼り付けは、 その文字列の範囲(A2であっても、列がまたがっているのでしたら、その範囲を含ませます。(例 A2:C2)を選択して、コピーします。 貼り付ける場所にセルポインターを置き、シフトキーを押しながら、編集で、  図のリンク貼り付け をクリックします。 式は、=Sheet1!$A$2:$C$2 となって、画像として、そのまま写されているはずです。 印刷をしてみましたが、まったく違いはありませんでした。 ・マクロの場合 こちらは、書式をコピーすれば、一つになってしまいますので、転記先からコピーしなければなりません。そして式が消えて定数になってしまいます。 この方法は、単に式を読んで、その式の先にある文字列をコピーしてくるというものです。 前と同じようにボタンにしたらよいかと思います。 Option Explicit Sub TestSample2()   Dim myFormula As String, myWSh As Worksheet, strRng As String   Dim num As Integer, myRng As Range   With ActiveCell    If Not (IsNumeric(.Text)) And .HasFormula Then      num = InStr(.FormulaLocal, "!")      If num > 0 Then       myFormula = Mid$(.FormulaLocal, 2)       On Error GoTo ErrHandler       Set myWSh = Worksheets(Mid$(myFormula, 1, num - 2))       strRng = Mid$(myFormula, num)       myWSh.Range(strRng).Copy       .PasteSpecial       Application.CutCopyMode = True      End If      Else      MsgBox "コピーできません。式とコピー先を確認してください。", 16    End If   End With   Exit Sub ErrHandler:   MsgBox "その式は、コピーは出来ません。", 16 End Sub

tankob3210
質問者

お礼

ご回答ありがとうございました。 図のリンク貼り付けで私の希望どおりの結果が出ました。 リンク貼り付けって基本的なことだとは思いますが、調べることが出来ず、思いつくことも出来ず。。。 本当に今回は前回含めて感謝しております。 2つ目の方法であるマクロに関しては、のちのち試してみたいと思います。 いやぁ、本当にすっきりしました。3ヶ月くらい悩んでましたので・・・ 多謝。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。Wendy02 です。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1335605 前回、十分にサポートできずにすみません。 もしかしたら、今回書かれているようなイベント型をお望みではないのではありませんか?その「さま」の付けるタイミングをどのように取るのか、未だに分りません。 ボタンを押した時点でしょうか? >1.カナが含まれるセルに対して反応させたいです。 そのスレッドにいた私としては、そのご質問のマクロの訂正は可能ですが、それは遠慮いたします。 それはともかく、私自身の元のコードを修正しました。 >2.コマンドボタンを使用して、特定のセルに対して、反応させることは出来ますでしょうか? コントロールツールからコマンドボタンをシートに貼り付けて、ボタンをセレクトしたまま、右クリック-コードの表示で、Visual Basci Editor が出てきますから、 Sub CommandButton1_Click()の下に下記のコードの中身を入れてください。 これは、複数の範囲でも、選択して、ボタンを押せば変換が可能です。 Private Sub CommandButton1_Click()  Dim Rng As Range   Dim c As Range   Application.ScreenUpdating = False  '変換範囲を、A1:A20 にする   If Intersect(Selection, Range("A1:A20")) Is Nothing Then Exit Sub   Set Rng = Selection   For Each c In Rng    With c      If Not (.HasFormula _       Or LenB(StrConv(.Value, vbFromUnicode)) <> LenB(.Value)) Then       If Right(.Value, 2) <> "さま" Then         .Value = .Value & "さま" 'さまがなければ「さま」をつける       End If       If .Font.Size > 30 Then          .Characters(Start:=Len(.Value) - 1, Length:=2).Font.Size = _          .Font.Size - 20 'セルのフォントサイズより20下のサイズ       End If      End If    End With   Next c   Application.ScreenUpdating = True   Set Rng = Nothing End Sub

tankob3210
質問者

お礼

上記コードを試用してみました。結果、思っていた通りのことが出来たのですが、1点だけ不都合が生じてしまいました。それは、別のシートに転記(ex.sheet1!A2)させた時に、2種類のフォントサイズが1種類に戻ってしまうのです。つまり、転記させたセルには氏名と「さま」が同一フォントサイズになってしまったのです。これに関しては、どうにかならないでしょうか?あと一歩のところで、非常に困っております。

関連するQ&A

  • 【Excel】 *を上付き文字にするマクロ

    Excelで統計の図表を作成する際、 P値に付随する、その有意性を表す*(アスタリスク)を上付き文字に設定することが頻繁にあるのですが、面倒で困っています。 マクロで組みたいのですが、 LIKE演算子で*を設定する方法はどうすればいいのでしょうか? チルダを使用した"~*"でも無理だったのですが、方法があれば教えてください。 よろしくお願いします。 ※以下に現在暫定的に使用している、"数値"、"."、"-"以外の文字を上付きに設定するマクロを書いておきます。 Sub 数字のみ上付き設定() Dim セル As Range Dim 値 As String Dim 文字の位置 As Integer For Each セル In Selection For 文字の位置 = 1 To Len(セル.Value) 値 = Mid(セル, 文字の位置, 1) If 値 Like "[0-9]" <> True And 値 Like "." <> True And 値 Like "-" <> True Then セル.Characters(Start:=文字の位置, Length:=1).Font.Superscript = True End If Next 文字の位置 Next セル End Sub

  • このマクロの説明をお願いします

    Dim buf As String Private Sub CommandButton1_Click() End Sub Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim tmp As Variant Application.EnableEvents = False tmp = InStr(2, buf, "$", vbTextCompare) tmp = Right(buf, Len(buf) - tmp) If buf = "$B$" & tmp Then Range("C" & tmp).Value = Range("C" & tmp).Value + Range("B" & tmp).Value Range(buf).Select End If Application.EnableEvents = True End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) buf = ActiveCell.Address End Sub どうやらB列の各セルに入力がされた場合、隣接するC列のセルに加算していくマクロのようです。 なんですが、 InStr関数、Right関数、Len関数あたりでやっていることがよくわかりません。 Private Sub CommandButton1_Click()は必要なのでしょうか? あと、 もっとシンプルなマクロができるようでしたらご教授ねがいます。

  • エクセルのマクロ

    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 上記は、選択されているセルのフォントが黒でかつ"●"が入力されていない場合は"○"を入力する、というマクロですがうまく動作しません。どうすれば正常に動作するようになるでしょうか?

  • 郵便番号を入れると住所が出るマクロを組みたい

    A列に郵便番号を入れると、(例:123-4567)B列に住所が出るマクロを組みたいのですが なかなかできません。例えばA1セルに入力するとB1セルに。A4セルに入力するとB4セルに 出るといった感じです。インターネットで調べながら、 Option Explicit ' ワークシートのChangeイベント記述 Private Sub Worksheet_Change(ByVal Target As Range) Dim xlAPP As Application ' 郵便番号セル以外では動作させない If Target.Address <> "$A$1" Then Exit Sub ' (1) ' 3桁以上の郵便番号があり、住所がブランクの場合のみ住所を変換させる If ((Len(Cells(1, 1).Value) >= 3) And (Cells(1, 2).Value = "")) Then ' (2) Set xlAPP = Application xlAPP.EnableEvents = False ' (3) ' 郵便番号を全角変換し住所に転記 Cells(1, 2).Value = StrConv(Target.Value, vbWide) ' (4) ' 住所のセルを選択 Cells(1, 2).Select ' (5) ' F2 → Shift+Home → F13 を擬装入力する SendKeys "{F2}", True ' 編集モード ' (6) SendKeys "+{HOME}", True ' 文字列全体を選択 ' (7) SendKeys "{F13}", True ' 再変換(MS-IME) ' (8) xlAPP.EnableEvents = True End If End Sub というコードを作ったのですが、これはA1セルしか対応しておらず、A列全体で対応できません。 何か方法があればご教授いただけたら幸いです。

  • Excelのプロシジャーで有効範囲のセルを限定したい

    Excelの「コードの表示(V)」に、下記のフォントサイズ変更コードを登録してあります。この有効範囲を、あるセル範囲、たとえば(C3:S20) などのように限定したいのですが、どう記述したらよいのでしょうか、教えて下さい。よろしくお願いします。 (現在のコード) Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Application.EnableEvents = False For Each c In Target If IsNumeric(c.Value) Then If Len(Mid$(c.Text, InStr(c.Text, ".") + 1)) > 1 Then c.Font.Size = 8 Else c.Font.Size = 9 End If End If Next c Application.EnableEvents = True End Sub

  • このマクロあっていますでしょうか?よろしくお願いいたします。

    ★sheetA Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$C$14" And Target.Address <> "$C$19" _ And Target.Address <> "$F$19" Then Exit Sub If Target.Address <> "$R$14" And Target.Address <> "$S$14" _ And Target.Address <> "$T$19" Then Exit Sub Application.EnableEvents = False With Sheets("B") .Range("F14").Value = Range("C14").Value .Range("F17").Value = Range("C19").Value .Range("F20").Value = Range("F14").Value .Range("F23").Value = Range("F19").Value End With With Sheets("C") .Range("F13").Value = Range("R14").Value .Range("F14").Value = Range("S14").Value .Range("F18").Value = Range("T19").Value End With Application.EnableEvents = True End Sub ★sheetB Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$F$14" And Target.Address <> "$F$17" _ And Target.Address <> "$F$23" Then Exit Sub Application.EnableEvents = False With Sheets("A") .Range("C14").Value = Range("F14").Value .Range("C19").Value = Range("F17").Value .Range("F19").Value = Range("F23").Value End With Application.EnableEvents = True End Sub ★sheetC Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$F$13" And Target.Address <> "$F$14" _ And Target.Address <> "$F$18" Then Exit Sub Application.EnableEvents = False With Sheets("A") .Range("R14").Value = Range("F13").Value .Range("S14").Value = Range("F14").Value .Range("T19").Value = Range("F18").Value End With Application.EnableEvents = True End Sub

  • エクセル マクロ 初心者です

    エクセルマクロ初心者です。 以下の2つの Private Sub Worksheet_Change(ByVal Target As Range)を1つのシートで実行させたいのですが、 当方、初心者なので組み合わせ方が分かりません。 よろしくお願いします。 ===No1=== Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target = StrConv(Target, vbUpperCase) Application.EnableEvents = True End Sub ===No2=== Private Sub Worksheet_Change(ByVal Target As Range) Dim Ans As Integer If Target.Count = 1 Then Ans = MsgBox("コピーは禁止!!", vbCritical) MsgBox "データを消去します。" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If If Target.Count = 1 Then Exit Sub Else MsgBox “複数セルのコピー禁止!" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub ------------ 上記の2つを1つのシートで動作させたいのですが、うまくいきません。 単体では、動作します。

  • エクセルのマクロコードに付いて教えて下さい。

    下記のマクロコードがありますが、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With End Sub セル位置の指定を変更する場合は、どの様に 書けば良いのですか? このコードですと、セルA1の入力指定でなっていますが A1~A5までとか。A1、B1,C1とかにする場合はどの様に 書けば良いか教えて下さい。 マクロに付いて、殆ど知識が無いものですので 出来れば、分かり易い説明でお願いします。 宜しくお願いします。

  • マクロ コピー&ペーストで書式が変わる

    特定列のセルに入力があれば、文字数で書式を変更するコードを書きました。 リストから選択や手入力なら問題ないですが、コピー&ペーストだと、うまくいきません。 ペーストでも問題なく起動するコードはありますか? 【やりたい事】 特定の文字を入力→〇文字未満なら折り返し解除、縮小して全体表示、文字大きさ11。〇文字以上なら折り返して文字大きさ7で表示。 【現状】 コピー&ペーストだと、ペーストだと、文字フォント7で縮小して全体表示になってしまう。 コード Private Sub Worksheet_Change(Byval Target As Range) If Not Intersect(Target, Range(”AE:AE”)) Is Nothing Then If Len(Target.Value) < 8 Then Target.WrapText = False Target.ShrinkToFit = True Target.Font.Size = 11 ElseIf Len(Target.Value) >= 8 Then Target.WrapText = True Target.ShrinkToFit = False Target.Font.Size = 7 Else Exit Sub End If ElseIf Not Intersect(Target, Range(”AI:AI”)) Is Nothing Then If Len(Target.Value) < 5 Then Target.WrapText = False Target.ShrinkToFit = True Target.Font.Size = 11 ElseIf Len(Target.Value) >= 5 Then Target.WrapText = True Target.ShrinkToFit = False Target.Font.Size = 7 Else Exit Sub End If End Sub

  • エクセル 加算 

    1つのセルに数字を入力すると加算されているマクロを探していたら 以下の回答がありました Dim memo Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value <> "**" And IsNumeric(Target.Value) = False Then Exit Sub Application.EnableEvents = False If Target.Value = "**" Then memo = 0 Else memo = memo + Target.Value End If Target.Value = memo Application.EnableEvents = True End Sub このマクロですがA1に入力した場合に適用しますが、このマクロをたとえばA1からC1の範囲で使用した1場合にどのようなマクロをすればよいかわかりません それか、このマクロではそのようなことができるのかもわかりませんので教えて頂けないでしょうか

専門家に質問してみよう