gooドクター有料プランが1ヶ月間無料!

こんにちは。
エリアAを担当する営業マンをBからCへ置換したいのですが、VBAでどのように行えばよいでしょうか。エリアA担当は数十人います。
A列:個人名 B列:エリア名 C列:担当者コード

レコードは数万行ほどあります。関数でもできなくはないのですが、VBAでの方法をご教示いただけると幸いです。

質問者からの補足コメント

  • 説明が足らずすみません!関数だとcountifsなどを使い条件設定して対象行を抽出して、コピペする形になるのですが、vbaでどのように書けば同じ処理ができる(置換できるのか)がわからず質問させていただいています。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/09/22 10:22
  • 説明がわかりづらく申し訳ありません。A列顧客名B列エリア(東京・大阪など)C列担当者コード(営業の社員コード)

    です。
    東京エリアの顧客のうち、営業のAさんが担当している顧客について、担当を一気にAからBさんへ変更したいのです。なおAさんは千葉や埼玉にもお客さんを持っていますが、それについては今後も担当を続けます。また、東京エリアには他にも多くの営業がいます。

      補足日時:2021/09/22 21:09
gooドクター

A 回答 (8件)

No.1の者です。



全て手書きなので、エラーになってしまうかも知れません。
一例ですが、下記の様な記載で、どうでしょうか?
試す前に、ファイルをコピーされたものを使うのが良いかと思います。
(マクロで変更したものは、基本、元の状態に戻せませんので。)
必要に応じて、適宜変更してみて下さい。

Sub Sample3()

Const myErea as String = "対象のエリア名"
Const myTantou_Mae as String = "前任者の担当者コード"
Const myTantou_Ato as String = "後任者の担当者コード"

Dim i As Long
Dim MyArray As Variant
Dim myRng as Range

Set myRng = Range(Cells(1, 1), Cells(Rows.Count, 3).End(xlUp)) 'データ範囲の取得 A1:C列の最後まで
MyArray = myRng.Value ’セルデータを一括で配列に取り込み

For i = 2 To myRng.row ’1行目はタイトルとして処理しない、2行目~
If MyArray(i, 2) = myErea Then ’B列エリアの判定
If MyArray(i, 3) = myTantou_Mae Then 'C列担当者コードの判定
MyArray(i, 3) = myTantou_Ato 'C列担当者コードを変更
End If
End If
Next i

myRng.ClearContents ’データを一旦消去。データがあると書き出しが遅い
myRng.Value = MyArray ’データを一括で書き出し

End Sub
    • good
    • 1
この回答へのお礼

色々とありがとうございます。今、これだとなにも動かないのですが、私が初歩的なミスをしている可能性があります。確認しながら色々やってみます。教えていただき大変勉強になりました。どうもありがとうございました!!

お礼日時:2021/09/25 10:32

No.6です。



『担当者コード』って例えば頭文字が0から始まる00123みたいなものですか?
それとも部署を示すような感じでA-00123みたいとか?

前者の場合セルの書式設定で5桁なら5桁で、空いてしまう部分を "0" で補うようにし表示させているとかと言う意味も含めて。
    • good
    • 0
この回答へのお礼

ありがとうございます!!

お礼日時:2021/09/25 10:31

No.5です。



>東京エリアの顧客のうち、営業のAさんが担当している顧客について、担当を一気にAからBさんへ変更したいのです。

実際には『東京エリア』の顧客担当の営業Aさんの『担当者コード』を営業Bさんの『担当者コード』に変更したいと言う事ですか?
この場合与える3つの条件はその都度どうされるのでしょう?
どこか空いているセルに条件として入力してから実行するのですかね?

それもですが元々エクセルのシートにデータはあるのでしょうか?
それとも取り込むなどして処理をし、終わったら何らかのファイルとして吐き出そうと言う感じですか?
    • good
    • 1
この回答へのお礼

ありがとうございます!!

お礼日時:2021/09/25 10:32

個人名とは


・営業担当名
・顧客名
のどちらなのか?

仮に後者なら、『担当者コード』を変更するのか下さい

とも受け取れますよね?
    • good
    • 1
この回答へのお礼

ありがとう

説明がわかりづらく手申し訳ありませんでした。回答ありがとうございました。Aがお客さんで、担当者コードというのは営業マンのコードです。(質問に説明を追記いたしました)

お礼日時:2021/09/22 21:13

No.1の者です。



下記記事で、データが10万あると、14秒ほどかかるとの事で、配列を使用
した高速化を考慮した方が良いかと思いました。

あとは、IF関数や、Like演算子で、絞り込みを行い、記事の様な置換に
 するのが良いかと思います。

Excel VBA Replace関数で文字列を高速で置換する方法と速度検証の、
 配列を使用した高速化
https://officedic.com/excel-vba-highspeed-replace/
    • good
    • 1
この回答へのお礼

ありがとうございます!!!いただいたURL確認して勉強するようにいたします。

お礼日時:2021/09/22 21:11

すみません。


「エリアAを担当する営業マンをBからCへ置換したい」の意味ですが、
①エリアAを担当する担当者が置換対象となる。
②上記担当者のエリアがBのエリアをCへ置換する。

添付図の例では、4行目の山田太郎のBをCへ置換する。(黄色の行)
ということで、あってますか。(それ以外の行は置換対象外)
「Excel VBA 条件にあったデータだ」の回答画像3
    • good
    • 1
この回答へのお礼

ありがとう

ありがとうございます!説明がわかりづらく申し訳ありません。個人名は顧客名で、担当者コードは営業マンのコードです。(説明補足しました)

お礼日時:2021/09/22 21:10

No.1の者です。



No.1の回答のリンクが、置換のVBAになります。説明不足でしたね。
 但し、内容は、Ctlr + Hと同じ、VBAですが。。。
それを、応用する形になるかと思いますが。

例えば、フィルターで、エリアAを抽出。
エリアAの列?を選択した状態で、Ctrl + Gで、可視セルを選択。
Ctlr + Hの置換とかでは、ダメでしょうか?
    • good
    • 2
この回答へのお礼

ご丁寧にありがとうございます!VBAを使うのは意図があり、今学んでいるためと、同様の大量データの処理(条件によって複数データを書き換える)が非常に多くあるので、VABで一気にできるコードを知りたくて質問させていただきました。

お礼日時:2021/09/22 10:38

おはようございます。



Excelの置換ではダメなのでしょうか?
Ctrl+H 置換前 置換後
全て置換で、できると思いますが。。。

それとも、他に理由があるのでしょうか?

例えば、下記が参考になるでしょうか?
http://officetanaka.net/excel/vba/function/repla …
この回答への補足あり
    • good
    • 1
この回答へのお礼

おはようございます。ご回答ありがとうございます。複数の条件があるので置換で処理はできません(エリアには他担当者もいること、この担当者は他のエリアも担当しているためです)

お礼日時:2021/09/22 10:18

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング