プロが教える店舗&オフィスのセキュリティ対策術

Excel2003を使用しています。

C7:C38に文字が入力されています。
それぞれのセルに入力されている文字のあとに続けて、特定の文字、例えば“[変更分]”と入力したい場合に、それを関数やマクロを使うことで、一気に入力することってできますか?

C7:C38に入力されている内容(文字)も文字数もバラバラです。
よろしくお願いします。

A 回答 (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)すればいいです。
 
    • good
    • 0
この回答へのお礼

おはようございます。

再度の回答ありがとうございます。
こちらのコードで今回希望していたことがすべて出来ました!

今回、『Union』を使用したのは初めてでしたので、勉強になりました。
ありがとうございました。

お礼日時:2007/01/15 09:11

こんばんは。



>この固定範囲を複数設定することはできますか?
以下は、固定範囲ではなく、ユーザーオプションです。
ただ、これ以上は、手を加えたくないなっていうか、製作者の意図が伝わらない場合は、質問者さんの目的が見えていないことが多いので、手を加えないほうがよいのですね。時には、掲示板でも、こういうのを作るっていうことだけです。単に参考までです。別に、単に範囲を決めておいて、ループでまわすだけなら、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
    • good
    • 0
この回答へのお礼

おはようございます。

再度の回答ありがとうございます。
こちらのコードだと、追加したい文字をその都度ダイアログボックスに入力するので、コードを変更することなく文字を追加でき、他でも利用できそうです。
ありがとうございました。

お礼日時:2007/01/15 09:04

◆こんな方法はいかがでしょう


◆表示形式をユーザー定義で、 @"変更分"
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
今回は表示のみの追加では不都合がありますので、実際に入力する方法でいきたいと思います。
また機会がありましたら、よろしくお願いします。

お礼日時:2007/01/15 09:15

一回こっきりでしょうからあっさりと。


例えば、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を使う方がシンプルですが、特定文字を追加したくないセルもあるでしょうから、固定範囲がいいでしょうね。
 
    • good
    • 0
この回答へのお礼

こんばんは。

早速、教えていただいたマクロを実行してみましたところ、希望していることができました。ありがとうございました。

>特定文字を追加したくないセルもあるでしょうから、固定範囲がいいでしょうね。
そうなんです!おっしゃるとおり一回こっきりで、特定文字を追加したくないセルもありますので、固定範囲がいいのですが、この固定範囲を複数設定することはできますか?

マクロに関しては、まだ勉強し始めてそう長くないので、どこをどうすればいいというのを教えていただけると助かります。

お礼日時:2007/01/13 01:39

こんばんは。



設問を勘違いしていなければ、マクロでは、こういうことになりますね。このマクロは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

'-------------------------------------------
    • good
    • 0
この回答へのお礼

こんばんは。
回答ありがとうございます。

作っていただいたマクロを実行してみました。
希望することは、ほぼ出来ました。列ごとで文字列のある範囲のセルをすべて変更しようとするマクロとのことでしたが、質問文で書いているC7:C38というのは表の一部でして、列全体に特定の文字が追加されると、列のタイトルにまで文字が追加されてしまいます。
『複数の固定範囲』ということではできないでしょうか?

コードの一部を変更したらできるかなと思って、コードを見ていたのですが、どこをどうしたらいいのかがワカリマセン。。。
もしよろしければ、アドバイスくださると助かります。

お礼日時:2007/01/13 01:34

表示だけでいいなら


「セルの書式設定」「表示形式」で「ユーザー定義」を選択して
「@"[変更分]"」
とすれば入力した文字は 「*******[変更分]」のようになります。

数式だとD7に
=C7&"[変更分]"
としてD38までコピーしてから
D7:D38をコピーして、C列に「編集」「形式を選択して貼り付け」で「値」を選択してOKしてください。
不要のD7:D38を削除すれば終了です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

表示形式のユーザー定義を使用することで、見た目だけなら簡単にできますね。勉強になりました。
ただ、今回の場合は、この特定の文字が入っているセルを集計したりもするので、実際に入力する方法でいきたいと思います。

教えていただいたユーザー定義を使用する方法は他で利用できそうなので、大変参考になりました!ありがとうございました。

お礼日時:2007/01/12 16:58

もし隣のD列が空いていれば、D7に


=C7&"[変更分]"と入力し、D38までドラッグして式をコピーします。
これでD7~D38にそのように表示されたと思います。

次ぎに、D7~D38を範囲選択してコピーし、C7:C38に値貼り付けすればOKです。

この回答への補足

早速のご回答ありがとうございます。

No.1のご回答に対して補足させていただいたのと同じ内容になりますが、回答いただいた方法は私も考えました。
質問文にはC7:C38に文字が入力されていて…
としか書きませんでしたが、実はこのC7:C38が1ページ分で、横へ同様の書式で7ページ分ありまして、近いセルで空きの列もありませんので、今回はできれば、作業列を使用しない方法でいきたいと思います。

説明が足りず、お手数かけて申し訳ありません。

補足日時:2007/01/12 16:28
    • good
    • 0

例えばD列のD7に「=C7&"追加したい文字列"」と式を入れD38まで式をコピー


その後D7:D38をコピーしC7に「形式を選択して貼付け」で「値」を選択して
貼り付けてはどうですか?

この回答への補足

早速のご回答ありがとうございます。

回答いただいた方法は私も考えました。
質問文にはC7:C38に文字が入力されていて…
としか書きませんでしたが、実はこのC7:C38が1ページ分で、横へ同様の書式で7ページ分ありまして、近いセルで空きの列もありませんので、今回はできれば、作業列を使用しない方法でいきたいと思います。

説明が足りず、お手数かけて申し訳ありません。

補足日時:2007/01/12 16:23
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!