- ベストアンサー
【Excel】文字が入力されている複数のセルに特定の文字を一気に追加できますか?
Excel2003を使用しています。 C7:C38に文字が入力されています。 それぞれのセルに入力されている文字のあとに続けて、特定の文字、例えば“[変更分]”と入力したい場合に、それを関数やマクロを使うことで、一気に入力することってできますか? C7:C38に入力されている内容(文字)も文字数もバラバラです。 よろしくお願いします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
>この固定範囲を複数設定することはできますか? 色々な方法があるでしょうが、一回こっきりということで。。。 --------------------------------------------------------- Sub Test222() Dim R As Range Dim myArea As Range Set myArea = Union(Range("A3:B6"), Range("C5:D10"), Range("F2:F8")) For Each R In myArea If R.Value <> "" Then R.Value = R.Value & "【変更分】" End If Next R End Sub ----------------------------------------------------- 範囲が多くて一行が長くなる場合は、 Set myArea = Union(Range("A3:B6"), Range("C5:D9"), Range("F2:F8")) Set myArea = Union(myArea, Range("H5:H7"), Range("J3:J8)) このように、前の行のmyAreaごと結合(Union)すればいいです。
その他の回答 (7)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >この固定範囲を複数設定することはできますか? 以下は、固定範囲ではなく、ユーザーオプションです。 ただ、これ以上は、手を加えたくないなっていうか、製作者の意図が伝わらない場合は、質問者さんの目的が見えていないことが多いので、手を加えないほうがよいのですね。時には、掲示板でも、こういうのを作るっていうことだけです。単に参考までです。別に、単に範囲を決めておいて、ループでまわすだけなら、VBAの初歩の初歩です。 Sub EditCellsText2() Dim r As Range Dim cl As Integer Dim strText As String Dim c As Range With Application On Error Resume Next .DisplayAlerts = False Set r = .InputBox("変更するセルの範囲を選択してください" & vbCrLf & _ "飛び範囲の場合は、"", ""(コンマ)でつないでください", "セル選択", Type:=8) .DisplayAlerts = False On Error GoTo 0 If r Is Nothing Then Exit Sub r.Select strText = .InputBox("セルに追加する文字を入力してください。", "文字入力", Type:=2) If strText = "False" Or strText = "" Then Exit Sub If MsgBox(strText & " を選択範囲の文字列の後に入れます。よろしいですか?", vbOKCancel) = vbCancel Then Exit Sub .ScreenUpdating = False For Each c In r If VarType(c.Value) = vbString Then c.Value = c.Value & strText End If Next c .ScreenUpdating = True End With r.Cells(1).Select Set r = Nothing End Sub
お礼
おはようございます。 再度の回答ありがとうございます。 こちらのコードだと、追加したい文字をその都度ダイアログボックスに入力するので、コードを変更することなく文字を追加でき、他でも利用できそうです。 ありがとうございました。
- maron--5
- ベストアンサー率36% (321/877)
◆こんな方法はいかがでしょう ◆表示形式をユーザー定義で、 @"変更分"
お礼
回答ありがとうございます。 今回は表示のみの追加では不都合がありますので、実際に入力する方法でいきたいと思います。 また機会がありましたら、よろしくお願いします。
- onlyrom
- ベストアンサー率59% (228/384)
一回こっきりでしょうからあっさりと。 例えば、C7~I38の範囲で未入力セルを除く場合は -------------------------------------------------- Sub Test() Dim R As Range For Each R In Range("C7:I38") If R.Value <> "" Then R.Value = R.Value & "【変更分】" End If Next R End Sub ------------------------------------------------------- UsedRangeを使う方がシンプルですが、特定文字を追加したくないセルもあるでしょうから、固定範囲がいいでしょうね。
お礼
こんばんは。 早速、教えていただいたマクロを実行してみましたところ、希望していることができました。ありがとうございました。 >特定文字を追加したくないセルもあるでしょうから、固定範囲がいいでしょうね。 そうなんです!おっしゃるとおり一回こっきりで、特定文字を追加したくないセルもありますので、固定範囲がいいのですが、この固定範囲を複数設定することはできますか? マクロに関しては、まだ勉強し始めてそう長くないので、どこをどうすればいいというのを教えていただけると助かります。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 設問を勘違いしていなければ、マクロでは、こういうことになりますね。このマクロは1列ごとで、文字列のある範囲のセルをすべて変更しようとします。 '標準モジュールのみ '------------------------------------------- Sub EditCellsText() Dim r As Range Dim cl As Integer Dim strText As String Dim c As Range With Application On Error Resume Next .DisplayAlerts = False Set r = .InputBox("変更する列の任意のセルを選択してください", "セル選択", Type:=8) .DisplayAlerts = False On Error GoTo 0 If r Is Nothing Then Exit Sub cl = r.Cells(1).Column '列数 strText = .InputBox("セルに追加する文字を入力してください。", "文字入力", Type:=2) If strText = "False" Or strText = "" Then Exit Sub Range(Cells(1, cl), Cells(65536, cl).End(xlUp)).Select If MsgBox(strText & " を選択範囲の文字列の後に入れます。よろしいですか?", vbOKCancel) = vbCancel Then Exit Sub .ScreenUpdating = False For Each c In Range(Cells(1, cl), Cells(65536, cl).End(xlUp)) If VarType(c.Value) = vbString Then c.Value = c.Value & strText End If Next c .ScreenUpdating = True End With Set r = Nothing End Sub '-------------------------------------------
お礼
こんばんは。 回答ありがとうございます。 作っていただいたマクロを実行してみました。 希望することは、ほぼ出来ました。列ごとで文字列のある範囲のセルをすべて変更しようとするマクロとのことでしたが、質問文で書いているC7:C38というのは表の一部でして、列全体に特定の文字が追加されると、列のタイトルにまで文字が追加されてしまいます。 『複数の固定範囲』ということではできないでしょうか? コードの一部を変更したらできるかなと思って、コードを見ていたのですが、どこをどうしたらいいのかがワカリマセン。。。 もしよろしければ、アドバイスくださると助かります。
- mshr1962
- ベストアンサー率39% (7417/18945)
表示だけでいいなら 「セルの書式設定」「表示形式」で「ユーザー定義」を選択して 「@"[変更分]"」 とすれば入力した文字は 「*******[変更分]」のようになります。 数式だとD7に =C7&"[変更分]" としてD38までコピーしてから D7:D38をコピーして、C列に「編集」「形式を選択して貼り付け」で「値」を選択してOKしてください。 不要のD7:D38を削除すれば終了です。
お礼
回答ありがとうございます。 表示形式のユーザー定義を使用することで、見た目だけなら簡単にできますね。勉強になりました。 ただ、今回の場合は、この特定の文字が入っているセルを集計したりもするので、実際に入力する方法でいきたいと思います。 教えていただいたユーザー定義を使用する方法は他で利用できそうなので、大変参考になりました!ありがとうございました。
- merlionXX
- ベストアンサー率48% (1930/4007)
もし隣のD列が空いていれば、D7に =C7&"[変更分]"と入力し、D38までドラッグして式をコピーします。 これでD7~D38にそのように表示されたと思います。 次ぎに、D7~D38を範囲選択してコピーし、C7:C38に値貼り付けすればOKです。
補足
早速のご回答ありがとうございます。 No.1のご回答に対して補足させていただいたのと同じ内容になりますが、回答いただいた方法は私も考えました。 質問文にはC7:C38に文字が入力されていて… としか書きませんでしたが、実はこのC7:C38が1ページ分で、横へ同様の書式で7ページ分ありまして、近いセルで空きの列もありませんので、今回はできれば、作業列を使用しない方法でいきたいと思います。 説明が足りず、お手数かけて申し訳ありません。
例えばD列のD7に「=C7&"追加したい文字列"」と式を入れD38まで式をコピー その後D7:D38をコピーしC7に「形式を選択して貼付け」で「値」を選択して 貼り付けてはどうですか?
補足
早速のご回答ありがとうございます。 回答いただいた方法は私も考えました。 質問文にはC7:C38に文字が入力されていて… としか書きませんでしたが、実はこのC7:C38が1ページ分で、横へ同様の書式で7ページ分ありまして、近いセルで空きの列もありませんので、今回はできれば、作業列を使用しない方法でいきたいと思います。 説明が足りず、お手数かけて申し訳ありません。
お礼
おはようございます。 再度の回答ありがとうございます。 こちらのコードで今回希望していたことがすべて出来ました! 今回、『Union』を使用したのは初めてでしたので、勉強になりました。 ありがとうございました。