[あすかぜ・ねっと]あすかぜ・ねっと自作ソフトCassava > サポート掲示板

Cassava Editor サポート掲示板

スレッド一覧に戻る
題名:
名前:
この名前を次回も使用する


スレッド一覧に戻る返信

[618] 重複文字をカウント

田中 [2021/03/16 09:35:53]

あすかぜ様

いつもお世話になっております。

B列からK列に、○や△、□の記号を含んだ文字列が並んでいます。
B列目には、記号を含んだ文字列があるが、C列目には、記号を含んだ文字列がない場合も御座います。

1行ずつ記号が何個あるかカウントし、A列に記号が何個あったのかを表示させるマクロを作成したいです。

A列 B列      C列     D列
   あいうえお○ かきくけこ  さしす△せそ



A列 B列      C列     D列
2個 あいうえお○ かきくけこ  さしす△せそ


行は、1行だけであったり、50行の場合もあります。

// t 行 l 列から b 行 r 列までの中から、
// 内容に str が含まれるセルを数えます。
function including(l, t, r, b, str){
  count = 0;
  for(y = t; y <= b; y++){
    for(x = l; x <= r; x++){
      if(pos([x,y], str) > 0){
        count++;
      }
    }
  }
  return count;
}

が応用できると思い、試してみたのですが
上手くいきません。

お手数お掛け致しますが、
ご教授頂けますと幸いで御座います。


Re: [618] 重複文字をカウント

大石剛司 [2021/03/16 10:28:27]

大石です。

マクロの勉強のために作成してみました。
検索文字は2文字まで対応しました。
3文字以上の場合は、同じように追加して下さい。
希望の動作になっていますでしょうか?
テストで作成したデータではOKでした。

// t 行 l 列から b 行 r 列までの中から、
// 内容に str が含まれるセルを数えます。
//function including(l, t, r, b, str){
  //行と桁を設定
  t = 1;
  l = 2;
  b = 2;
  r = 4;
  //検索文字を設定
  str1 = "○";
  str2 = "△";
  //行範囲
  for(y = t; y <= b; y++){
    //クリア
    count = 0;
    //列範囲
    for(x = l; x <= r; x++){
      //検索文字がある
      if(pos([x,y], str1) > 0){
        //加算
        count = count + 1;
      }
      //次の検索文字がある
      if(pos([x,y], str2) > 0){
        //加算
        count = count + 1;
      }
    }
    //現在行の A列に書込
    [1, y] = count + "個";
  }
//}

よろしくお願いします。

Re: [618] 重複文字をカウント

いっち [2021/03/17 07:20:48]

実は、今回のような場合は、あすかぜさんが現在開発されている
Cassava Ver2.3β2以降を用いると、快適にスクリプトを書けるので
私も書いてみました。
あすかぜさんへの質問なのにお邪魔して、ごめんなさい。
単に、Cassava Ver2.3β2以降の宣伝だとお考え下さい。
β版なのに、(現在のところ私には)不具合を見つける事が、
できていません。

最近知ったのですが、Cassavaマクロは、コードのインデントが、
スペースやタブだけでなく、全角スペースでも動作するようです。

// Cassava Ver2.3β2以降専用マクロ
// test.cms
// 2個,あいうえお○,かきくけこ,さしす△せそ
// 9個,○△□,△□○,□○△
// 6個,あ△い□うえお○,かきくけこ,さ○しす△せ□そ
// 0個,,かきくけこ,
// 2個,○,あいうえお,△
search_str = "[○△□]";
for (y=Top;y<=Bottom;y++) {
 str_count = 0;
 for (x=2;x<=Right;x++) {
  cell_str = [x,y];
  str_len = cell_str.length;
  match_pos = cell_str.search(search_str);
  while (match_pos!=-1) {
   str_count++;
   if (match_pos<str_len-1) {
    cell_str = cell_str.substring(match_pos+1);
    str_len = cell_str.length;
    match_pos = cell_str.search(search_str);
   } else {
    break;
   }
  }
 }
 // [1,y] = str_count.toString()+"個";
 [1,y] = str_count+"個";
}
// Refresh();

Re: [618] 重複文字をカウント

田中 [2021/03/17 08:57:52]

お世話になっております。

大石様、いっち様
早々のご返信を有難う御座います。

マクロを書いてくださり、有難う御座います。

希望通り、動作致しました。
感謝です。

Cassava Ver2.3β2でも希望通りの動作をしております。

この度は、本当に有難う御座います。
助かりました。

今後ともよろしくお願いいたします。



Re: [618] 重複文字をカウント

あすかぜ [2021/03/17 18:47:09]

無事解決しているようでよかったです。
大石様、いっち様、ありがとうございます。

Re: [618] 重複文字をカウント

田中 [2021/03/23 08:42:27]

あすかぜ様

ご返信ありがとうございます。

みなさまのおかげで無事、解決出来ました。
有難う御座います。

今後とも宜しくお願い致します。

スレッド一覧に戻る返信