• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:指定したセル範囲に入力された文字のみに*をつけたい)

Excelマクロで文字列に*を追加する方法

このQ&Aのポイント
  • Excelのマクロを使って、特定の範囲に入力された文字列に*を追加する方法について教えてください。
  • 現在のマクロでは、文字列を入力しても先頭に*が追加されない問題が発生しています。
  • マクロの式の入力が間違っている可能性がありますが、どこが問題なのかわかりません。解決方法を教えてください。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

提示のコードでは上手くいく場合と上手くいかない場合があります。 (上手くいく場合)    抽出シートがアクティブになっている状態で実行したとき (上手くいかない場合)   抽出シート以外のシートがアクティブになっている状態で実行したとき 原因は、>For Each r In ●Range("A2:I4") ●の部分にシート名が省略されているので このセル範囲は実行時にアクティブになっているシートのセルとして処理される。   今回のように複数のシートを扱う場合は、 対象となるセルがどのシートのセルなのか明示するために Rangeプロパティの前には必ずSheet名を付加するようにした方がいいでしょう。 For Each r In Sheets("抽出").Range("A2:I4") また、Sheet(2)のようなINDEXでの指定は避けて、 Sheets("Data")のようにシート名を明示することもお勧めすます。 Sheets(2)だと、シートを移動するとINDEX番号の変更必要があり 以上です。

chanchanko_2010
質問者

お礼

ご連絡ありがとうございます。 For each in にシート名を明示的に表示してうまくいくようになりました。 またシート名ですが、毎回シート名が変わり、必ず2枚目をデータとして使うので 明示的に表示することができませんでしたので、これはとりあえず現状のままに しておきます。 ありがとうございました。 シート名の明示に気がつきませんでした。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

> For Each r In Range("A2:I4") 最初の行にカーソルを置いて、F9キー押下でブレーク行に設定。 マクロを実行して、F8キーを押下しステップ実行させ、各変数の値を見ながら調整すると 原因をつかみやすいですよ。 > If IsNumeric(r.Value) Then > r.Value = r.Value > ElseIf Len(r.Value) >= 0 And Left(r.Value, 1) <> "*" Then 数値の場合に「何もしない」だから r.Value = r.Value は不要。 また ElseIf Len(r.Value) > 0 And Left(r.Value, 1) <> "*" Then じゃないのかな?

chanchanko_2010
質問者

補足

ありがとうございました。 ブレークポイントの設定は全く知りませんでした。 やってみてr.valueの値の変化がよくわかりました。 またElseIf Len(r.Value) > 0 And Left(r.Value, 1) <> "*" Then ここを>=0 としていたところを直してうまくいくようになりました。 勉強になります!!

全文を見る
すると、全ての回答が全文表示されます。
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

Excel 2008で試しましたが、 > For Each r In Range("A2:I4") 中略 > Next は想定通りの動作をしているような。「文字を入力しても頭に*はつかない」原因は別にあるのでは。 AdvancedFilterのところは回答不能。具体的なシートの記載内容を補足すれば、だれか答えてくれるかと。

chanchanko_2010
質問者

お礼

ありがとうございます。 For Each r In Range("A2:I4") のシート名を明示的に指定しなかったために現在カーソルのあった場所で処理が行われてしまい 変な風になってしまいました。 シート名を明示的に指示をしたところうまくはしるようになりました。 お手数をおかけしました。 あまり長々と入れるのはどうかなと思ってAdvancedFilterのところははしょってしまいました。 また手詰まりになった場合はちゃんとすべて書くようにします。(^^ゞ 助かりました!!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 指定文字のみセルコピーする方法

    sheet1(表-1)の入力文字「A,C,F,H」をsheet2へコピーする。 sheet2(表-3)のように[A,C,F,H」以外及びsheet1空白のセルはsheet2でも空白としたい。 その際、sheet2(表-2)に入力済みの記号「○、●、◎」はそのまま残したい。 下記のコードでは、sheet2に入力済みの記号「○、●、◎」が消えてしまいます。 どなたかコードがわかる方よろしくお願いします。 Sub シートコピー() Dim r As Range For Each r In Worksheets("Sheet1").Range("B1:F10") If WorksheetFunction.CountIf(Range("A14:A18"), r.Value) Then Sheets("sheet2").Range(r.Address).Value = r.Value Else Sheets("sheet2").Range(r.Address).Value = "" End If Next End Sub セルA18に"0"を入力して実行してもsheet1空白セルはsheet2でも空白となり困っています。

  • 条件に従ってセルに入力の構文の簡素化

    よろしくお願いします。 ComboBox4の値を条件(20行づつ下)に従ってセルに入力するのですが 構文の簡素化はできないでしょうか With Worksheets("写真") If ComboBox5.Value = "1" Then .Range("R34").Value = ComboBox4.Value ElseIf ComboBox5.Value = "2" Then .Range("R54").Value = ComboBox4.Value ElseIf ComboBox5.Value = "3" Then .Range("R74").Value = ComboBox4.Value ElseIf ComboBox5.Value = "4" Then .Range("R94").Value = ComboBox4.Value ~ ElseIf ComboBox5.Value = "48 Then .Range("R994").Value = ComboBox4.Value ElseIf ComboBox5.Value = "49" Then .Range("R1014").Value = ComboBox4.Value ElseIf ComboBox5.Value = "50" Then .Range("R1034").Value = ComboBox4.Value End If

  • 指定記号のみ別シートにコピー

    sheet1(表-1)の入力文字「A,C,E」をsheet2へコピーする。 sheet2(表-3)のように[A,C,E」以外及びsheet1空白のセルはsheet2でも空白としたい。 その際、sheet2(表-2)に入力済みの記号「○、●、◎」はそのまま残したい。 下記のコードでは、sheet2に入力済みの記号「○、●、◎」が消えてしまいます。 どなたかコードがわかる方よろしくお願いします。 Sub シートコピー() Dim r As Range For Each r In Worksheets("Sheet1").Range("B1:D5") If WorksheetFunction.CountIf(Range("A8:A10"), r.Value) Then Sheets("sheet2").Range(r.Address).Value = r.Value Else Sheets("sheet2").Range(r.Address).Value = "" End If Next End Sub セルA11に"0"を入力して実行してもsheet1空白セルはsheet2でも空白となり困っています。

  • 特定範囲のセルの最終文字1文字を削除

    よろしくお願いします。 Sheet1のJ26からJ56の、セルに入れた文字の最終文字1文字を 削除して表示したいのですが、下の構文で、 For Each r In Application.Selectionが黄色くエラー表示されます。 どこをどのように直せばよいのか解りません。 よろしくお願いします。 Private Sub CommandButton1_Click() Dim r As Range r = Worksheets("Sheet1").Range("J26:J56") For Each r In Application.Selection If Len(r.Value) > 0 Then r.Value = Left(r.Value, Len(r.Value) - 1) End If End Sub Next

  • ExcelVBA データのコピー範囲について

    あけましておめでとうございます。今年もよろしくお願いします。 Sub Test() Dim myTarget As Range, r As Range, f Set myTarget = Sheets("Sheet1"). _    Range("B2", Sheets("Sheet1").Range("B65536").End(xlUp)) For Each r In myTarget  Set f = Sheets("Sheet2").Columns(1). _    Find(r.Value, Sheets("Sheet2").Range("A1"), Lookat:=xlWhole)  If Not f Is Nothing Then    If r.Offset(0, 3).Value <> f.Offset(0, 3).Value Then      f.Resize(1, 4).Copy Destination:= _      Sheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0)    End If  End If Next r End Sub 前回の質問で教えていただいたコードなのですが、現時点では、B列のデータを元にして二つのSheetのデータを比較して別Sheetへコピーしているのですが、そのときに、B列以降の(たとえば、B列からX列まで)データはコピーできますが、A列もコピーしたい時はどうすればよいのかで、悩んでいます。どの様に変更すればよいのでしょうか?

  • セル範囲指定方法

    VBAにて下記作成中ですが、行き詰ってしまいました。 どなたか、ご教授願います。 Sub 転記ボックス1_Click() Sheets("S").Select Range("N13").Select If ActiveCell.Value <> "" Then Selection.Copy Sheets("H").Select Range("K65536").End(xlUp).Offset(0, 1).Select --->シートH、K列最終行の右隣からL列最終行の範囲を指定 上記指定範囲内全てに、シートS・N13の値を貼付 ElseIf ActiveCell.Value = "" Then Sheets("H").Select Range("K65536").End(xlUp).Offset(0, 1).Select --->シートH、K列最終行の右隣からL列最終行の範囲を指定 上記指定範囲内全てに、”シートS・N13”と入力 End If End Sub --->部分の書き方がわかりません。 よろしくお願いします。

  • VBA 特定のシートが選択されていたら、セル入力

    Excel365。簡略化したVBAです。 現在、「あ」というシートが選択されていたら、「あ」シートの「A1」セルに「a」と入力 「い」というシートが選択されていたら「い」シートの「A1」セルに「i」と入力。 それ以外のシートが選択されていたら、何もしない。 If Sheets("あ").Activate Then Range("A1") = "a" ElseIf Sheets("い").Activate Then Range("A1") = "i" Else 以下省略 「い」シート選択中でも、「あ」シートの「a1」セルに入力され、シートを増やしても、「あ」シートの「a1」セルに入力されます。 「い」シートを入力していません。 簡単だと思っていたのですが…。 どんなコードになるのでしょうか?

  • 指定した範囲のセル内の数値を検索したい(VBA)

    いつもありがとうございます。 また皆様のお知恵を拝借したいと思い質問をさせて頂きました。 現在VBAを勉強中なのですが、以下の場合、コードはもっと簡単になるでしょうか? 【やりたい事】 プログラムを実行すると、シート2に数値が返されます。  ※数値が返される範囲は「A1~A100」だとします。 シート2の「A1~A100」には「1~4」の数値が返され、それぞれの数値が何個あるかを検索。 検索した結果を、「シート1」の指定したセルに表示する。 【記述したコード】 dim x as integer x = 0 For x = 1 To 101 If Sheets("シート2").Cells(x, 1) = "1" Then 1count = 1count + 1 End If If Sheets("シート2").Cells(x, 1) = "2" Then 2count = 2count + 1 End If If Sheets("シート2").Cells(x, 1) = "3" Then 3count = 3count + 1 End If If Sheets("シート2").Cells(x, 1) = "4" Then 4count = 4count + 1 End If Next x 上記のコードで「"x"count」に数値を加算していき、最終的に以下のように各数値をシート1に表示させています。 Sheets("シート1").Range("A1") = 1count Sheets("シート1").Range("A2") = 2count Sheets("シート1").Range("A3") = 3count Sheets("シート1").Range("A4") = 4count 結果的にはうまくカウントされて、結果も正しく表示されるのですが、 列をまとめて検索してやる方法などがあれば、もっと短く分かりやすく おさまるのではと思い、質問をさせて頂きました。 こうやるともっと簡単にできるよなどがあれば、教えて頂けないでしょうか。 Excelの関数などを使用しても構いません。 以上、よろしくお願いします。

  • 【Excel VBA】ワークシートの表示(続き)

    すみません。 追記が出来なかったため、コードの続きをこちらに記載します。 For i = 1 To 12 If actsht = tmp(i) Then Flag = 1 Anser = MsgBox("翌月分シートを作成しますか?", vbYesNo + vbDefaultButton1, "確認") If Anser = vbYes Then ActiveSheet.Copy After:=ActiveSheet ActiveSheet.Name = tmp(i + 1) Sheets(actsht).Tab.ColorIndex = 2 Sheets(actsht).Range("B3").Value = Sheets("Sheet2").Range("A1").Value Sheets(actsht).Range("B4").Value = Sheets("Sheet2").Range("A2").Value ActiveSheet.Range("A2").Select Exit For ElseIf Anser = vbNo Then Exit For End If End If Next If Flag = O Then MsgBox ("新しいワークシートを作成出来ません。") End If If actsht = tmp(i) Then If Sheets(元データ).Visible = False Then Sheets(元データ).Visible = True End If End If End Sub

  • 指定範囲のセルが変更されたら

     下記のコードで1つのセル(A1)が変更されたら入力前の元データを別シート(A1)に保存できるようにしたのですが、指定範囲(I10:CW42,2行3列を一升)のセルが変更されたら別シートの指定範囲(I10:CW42)に保存できるようにしたいのですが方法がありましたらお教え下さい。お願いします。 Windows7・SP1 Office2010 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub Application.EnableEvents = False Application.Undo Sheets("Sheet2").Range("A1").Value = Range("A1").Value Application.Undo Application.EnableEvents = True End Sub