人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

同一キーワードが出たら累計をカウントしてかつその数字とキーワードを合わせた文字列をセルに入れたい

Excelの質問です。
今、Y列の22行目、55行目、79行目、97行目…と、規則性なくランダムに、それらのセルに「バナナ」という文字列が入っているとします。合計5万行以上、2000近く「バナナ」という同じ文字列がある状況です。

そして、隣のZ列はほとんど空白セルが並んでいる状態です。

この状況におきまして、Y列を1行目から見ていき、「バナナ」という単語が初めて出たら、その隣のZセルに「バナナ1」と。
2つ目の「バナナ」が出てきましたら、その隣のZセルに「バナナ2」と、カウントして既存の文字列と合わせてセルに記入していきたいのです。(Y列のセルが空白セルの場合は、隣のZ列のセルも空白セルでよいです)

今回の例ですと、Z列の22行目が「バナナ1」、55行目が「バナナ2」、79行目が「バナナ3」、97行目が「バナナ4」になります。

そういった処理を関数やマクロを活用することで効率的に出来ないでしょうか。
よろしくお願い致します。

●質問者: moon-fondu
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●1500ポイント ベストアンサー

5万行もあると、計算式では重くなりそうなので、マクロの場合も。

標準モジュールに以下のコードを貼り付けて、カウントしたいシートで countup_keyword サブルーチンを実行してください。

Sub countup_keyword()
 word_col = 25  ' Y列
 count_col = 26  ' Z列
 keyword = "バナナ"
 
 last_row = Cells(Rows.Count, word_col).End(xlUp).Row

 n = 0
 For r = 2 To last_row
 If Cells(r, word_col).Value = keyword Then
 n = n + 1
 Cells(r, count_col).Value = keyword & n
 End If
 Next
 
End Sub

Y列の値が "バナナ" と一致する場合に、同じ行の Z列に "バナナ" + 出現した数を埋めていきます。

部分一致の場合には、For 文の中の If 文の判定を変えます。

 For r = 2 To last_row

' If Cells(r, word_col).value = keyword Then ★部分一致にするには、ここを変更します
 If InStr(Cells(r, word_col).Value, keyword) > 0 Then
 n = n + 1
 Cells(r, count_col).Value = keyword & n
 End If
 Next

完全一致でやる場合よりも、遅くなります。

そして、隣のZ列はほとんど空白セルが並んでいる状態です。
Y列のセルが空白セルの場合は、隣のZ列のセルも空白セルでよいです

この扱いがちょっと分かりませんでした。
Y列が "バナナ" ではない場合には、Z列をそのままにしてあります。
空白に置き換えた方が良いのかもとは思ったのですが、Z列に何らかの値が入っていそうなので。

ただ、こうしてしまうと、Y列の値が変わったときに、昔の Z列の値がそのまま残ってしまう、という問題が出てきます。
一発動かして Z列に値が抽出できればお役御免、ということであれば問題ないと思いますが。


moon-fonduさんのコメント
すみません、少し質問の書き方が曖昧でしたようで。 Z列はそのままで大丈夫です。 関数でも5分もかかりませんでしたし、マクロだとすごいですね、一瞬でした! ありがとうございました(^^
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ