• 締切済み

【マクロ】特定の文字を追加

こんにちは。 エクセルで管理している一覧表があり、2万行程になります。 そこへ特定の列に文字を追加したいのですが、 行数も沢山あり、気が遠くなりそうです。 添付します画像で、C列は各メーカーが入力されており、 D列(型番)に特定文字で【有り】をC列(メーカー)がA社とB社以外という 条件で追加したいです。 何かいい方法が有りましたら、ご教授頂きたいです。 宜しくお願い致します。

みんなの回答

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.8

>何故か4010行目以降は、反映されなかったです。 >原因等考えられることはございませんでしょうか? 申し訳ありませんでした。 最終行のチェックでA列の最終行をチェックしていましたので修正してください。 n = Cells(Rows.Count, 1).End(xlUp).Row      ↓ n = Cells(Rows.Count, c - 1).End(xlUp).Row メーカー名のC列の最終行に変更すれば問題ないかと思います。

eco2012
質問者

お礼

ありがとうございます!本当に助かりました!!

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.7

2017-12-28 17:44:34 回答No.3 への追記です。 >試してみましたが、私のやり方が変だったのか、うまく動きませんでした。 > 【有る】がつきませんでした。  Const Maker1 = "A社"  Const Maker2 = "B社" を  Const Maker1 = "A社"  Const Maker2 = "B社"  つまり半角 にしてみてください。

eco2012
質問者

お礼

ありがとうございます。試してみます!!ご教授助かりました。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.6

>何かいい方法が有りましたら、ご教授頂きたいです。 VBAでの処理を希望されているようですがマクロウィルスの危険性がありますのでマクロ有効ブックは避けた方が良いでしょう。 しかし、2万行は少々多いので関数での処理に向きません。 簡単なVBAコードを添付画像で提供しますので確かめてください。 但し、提示のコードは"型番"と入力されたセルをアクティブにして実行しないと何もしません。 また、既に"【有り】"が追加された型番については"【有り】"を取り除いて改めて追加しています。 尚、テストに使うブックは複製を使ってください。(原本はバックアップとして残すこと)

eco2012
質問者

お礼

ご回答ありがとうございます。補足が解決できましたらベストアンサーとさせて頂きたいです。ご回答お待ちしております。

eco2012
質問者

補足

ご丁寧にありがとうございます。まさにこちらがやりたかったことです。 ですが、何故か4010行目以降は、反映されなかったです。 原因等考えられることはございませんでしょうか?

回答No.5

あぁ、なるほど、そこまで読めませんでした。 失礼しました。 だとしたら、式を 式:=IF(AND(C3<>"A社",C3<>"B社"),D3&"【有り】",D3) にしてみると良いと思いますよ。

eco2012
質問者

お礼

こちらこそ、言葉足らずで申し訳ございませんでした。ご教授頂きありがとうございます。

回答No.4

今の列を、後ろにコピーして移す。 今の列に、イコールで後ろの行を差す。 フィルターで除きたい行を隠し、一番上に、&で入れたい文字列を書き加える。 その行を見えているすべてにコピーする。 (コピー以外の方法だと隠した行にも反映すると思います。) フィルターを解除し、コピーアンドペーストで、数式を値に置き換える。 セルの文字列の最初か最後に入れるのなら、これでできるかと。

eco2012
質問者

お礼

ご丁寧にありがとうございます。色々と試してみたいと思います。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

データが3行目から始まっている前提で。 なお、途中に空行があることから どの行(何行目)まで処理すればいいのかわからないので シートの末尾の行から上方向に処理しています。 そのため、若干性能が劣ります。 また、VBAのイロハのイ程度はわかっている前提で コードのみを書きます。  Sub TxtAdd()  Dim wkLineCounter As Long  Const Maker1 = "A社"  Const Maker2 = "B社"  With ThisWorkbook.Sheets(1)   For wkLineCounter = Rows.Count To 3 Step -1    If ((.Cells(wkLineCounter, 3).Value <> Maker1) And _     (.Cells(wkLineCounter, 3).Value <> Maker2) And _     (.Cells(wkLineCounter, 3).Value <> "")) Then     .Cells(wkLineCounter, 4).Value = _      .Cells(wkLineCounter, 4).Value & "【追加】"    End If   Next wkLineCounter  End With   End Sub

eco2012
質問者

お礼

コードまで書いてくださり、誠にありがとうございます。

eco2012
質問者

補足

試してみましたが、私のやり方が変だったのか、うまく動きませんでした。 【有る】がつきませんでした。

回答No.2

2通り紹介。 その1 例えばG3セルに   式:=IF(AND(C3<>"A社",C3<>"B社"),"【有り】",D3) として、G列一杯にフィル。 G列の3行目以降を選択、コピーして、D3セルに「値を貼り付け」。 完了。 その2 表の中のどこでも良いのでどこかを選択した状態で リボンの「データ」から「フィルター」。 C列(メーカー)の▼をクリックすると、 存在するエントリーが一覧で見られるので、 A社とB社のチェックを外して、OK。 抽出されたリストの全行D列を選択した状態で、 そのまま「【有り】」と入力し、Ctrl+Enterで確定。 フィルタを解除して、完了。 どちらの場合も「C社」の分も書き換わりますが、 それでいいのかどうかはご判断ください。 番外として、VBAで頑張る方法もありますが、 おそらくVBAを理解して準備する手間を考えると ソレは厳しいと思いますので割愛です。

eco2012
質問者

お礼

ご回答ありがとうございます。 試してみました!元のデータが書き換わってしまうため、元のデータはそのまま+【有り】とするのが希望です。勉強になりました。ありがとうございます。

  • _backyarD
  • ベストアンサー率34% (199/580)
回答No.1

今回限りの作業であれば 1. D列の隣あたりに列を追加する 2. そこに「=IF(AND(C3<>"A社", C3<>"B社"), D3 & "【有り】", D3)」   のような式を入れる。 で、新しく追加した列にお望みの結果が入るかと。 あとはそれを文字列としてコピー&ペーストしてD列にかぶせればいけそうですよ。 式の内容は ・IF文に「有り」を付記する条件を書く。  条件を満たす場合、D列の内容+有りを、  条件を満たさなければD列をそのまま写す。 ・IFの条件は「AND」関数で以下の2条件を並べ、どちらも満たす場合に  Trueになるようにする。   - C列がA社でない   - C列がB社でない ただし、この方法は列を追加して一時的に式を追加する必要があるので、定期的に、自動的に処理したい場合には使えません。その場合は、上記のような処理を行うVBAプログラムを組む必要があるかと思います。

eco2012
質問者

お礼

ご回答頂きありがとうございます。一度試してみますね。 ただ、定期的に更新されるので(更新頻度はほぼ毎日)、随時更新部分は、 既に【有り】を入れるようにするので問題はないです。 今までの積み重なった2万行に対してその作業をしたいです。 VBAプログラムで組んだほうが良さそうです。 ありがとうございました。

関連するQ&A