• ベストアンサー

エクセルで列の空白を数えるには?

 A B C 1 * 2   3 2 4 *   5 1 6 * セルに*マークを記入してある、間隔の空欄を計算したいのですが。どうやってやりますか? 空欄の最後に空白が連続した数を表示させたいです。 B,C・・・列も同様に同じ計算をします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

関数などでは難しそうなので、VBAで作ってみました。 Private Sub CommandButton1_Click() ro = 30 co = 1 m = 0 For l = 1 To co For k = 1 To ro If Cells(k, l) = "*" Then m = 0 ElseIf Cells(k, l) = "" Then m = m + 1 Cells(k, l) = m End If Next k Next l End Sub ワークシート上にコマンドボタンを作ってそのボタンに上のマクロを組めば、いけると思います。 最初のroとcoはそれぞれ行数と列数ですので適当に変えてください。

muramomo
質問者

補足

回答大変ありがとうございます。 やはり計算式では、大変そうなので、こちらでやりたいと思います。 上記マクロでやってみた所、 ABC 1 2 3* 4 ABC 112 22 3* 41 B1セルが続きでカウントされてしまいます。 どのような変更がいりますでしょうか?

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.7

#5のご回答の「>別の列に答を出すことは簡単ですが」に当たるかもしれませんが A1=空白 A2=a A3=空白 A4=空白 A5=空白 A6=b A7=空白 A85=空白 A9=c A10=空白 A11=空白 A12=空白 A13=空白 A14=d としてみます。 B2に =IF(A2<>"",MAX($B$1:B1)+1,"") と入れてB14まで式を複写。 C3に =IF(B3<>"",MATCH(B3,$B$1:B3,0),"") と入れてC14まで式を複写。 c6=3 C9=2 C14=4 となりますが、C列のような数字をお望みでしょうか。 列の中にカウント数を入れた例で、No.1778728の私の#7の例があります。苦労して考えたものです。ご参考になれば。

  • zenjee
  • ベストアンサー率47% (50/106)
回答No.6

 No.5 zenjeeです。  前答で、別の列に答を出すことは簡単ですがお望みでないでしょうから、回答は差し控えます。  としておりましたが、やってみると結構難しく、敬遠したと思われるかも知れないという気がしましたので、回答を投稿させていただきます。  A2:A17に元の表が下記のとおりあるとします。(式の都合上、1行目は空欄にします。なお、B列の表示は式の答えです。)   A  B 2 *  * 3 4   2 5 *  * 6   1 7 *  * 8 9 10 11   4 12 * * 13 * * 14 15 16   3 17 * *  B2に次の式を入力し、B17までコピーします。 =IF(A2="*","*",IF(IF(A2="*","",IF(A2=A3,"",1))=1,COUNTBLANK(A$2:A2)-SUM(B1:B$2),""))  なお、ツール→オプション→表示でゼロ値のチェックを外します。  以上で、前記B列表示のとおり 正答が出ますが、工夫するともう少し簡単な式になるかも知れません。  これ以上は他の方の回答に期待します。

  • zenjee
  • ベストアンサー率47% (50/106)
回答No.5

 やっとおぼろげながらご質問の意味が分かりました。  つまり例示されているのは計算前の状態ではなく、計算後の状態ということですか。  であれば、質問の際に例えば  「A2、A3、A5は最初は空白セルである。A2:A3は空白セルが連続しているから連続空白セルの最下行A3にその連続した数「2」と上書きする。A5は空白が1個だからそのまま「1」と上書きする。もし空白が4個続いたら4番目の空白セルに「4」と上書きする。このようにして例示のような表になるようにしたい。」  というように具体的に書いていただければ誰でもすぐ分かると思います。  ところで回答ですが、Excelのワークシート関数では、計算対象セルに直接答を出すと言うことは再帰定義で不可能ですから、別に列を設けて表示するか、又はVBAによらざるを得ないでしょう。(蛇足ですが、昔、富士通には、このようなことができるFacom9450という表計算ソフトがありました。)  別の列に答を出すことは簡単ですがお望みでないでしょうから、回答は差し控えます。  またVBAも既にNo.3で回答が出ておりますし、私自身も熟練者でないので遠慮させていただきます。  今後ご質問の際はセル番地を示すなど、もっと具体的に表現されると回答者も助かるのではないでしょうか。

muramomo
質問者

補足

うまく説明できず、すいませんでした。それでも、回答していただき、大変ありがとうございます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#2の補足によっても質問の意味が良くわかりません。 ---- 列毎に、連続して現れる空欄の個数を計算します。 空欄が1なら、その空欄に1 連続した空欄が2個なら、2個目の空欄に2 3個連続していれば、3個目の所に3を表示 ----- と >セルに*マークを記入してある、間隔の空欄を計算したいのですが の*と*の間隔はどうなったのですか。 実際のケースでは*は何の意味ですか。

  • zenjee
  • ベストアンサー率47% (50/106)
回答No.2

>空欄の最後に空白が連続した数を表示させたい  この意味がどうしても分かりません。例題の場合では、A7に空白セルの合計個数である「1」が出るようにしたいということでしょうか。  それであれば#2ご回答のとおり、A7に =COUNTBLANK(A1:A6)  答えは「1」でいいと思いますが、 >*マークを記入してある、間隔の空欄を計算…… ということは、「*」以外のセルの個数を計算したいというようにもとれます。  であれば、A7の式は =ROWS(A1:A6)-COUNTIF(A1:A6,"*")  で答えは「3」となります。  どちらの意味なのか具体例で補足説明をお願いします。

muramomo
質問者

補足

うまく説明できていなくて、すいません。 列毎に、連続して現れる空欄の個数を計算します。 空欄が1なら、その空欄に1 連続した空欄が2個なら、2個目の空欄に2 3個連続していれば、3個目の所に3を表示 としたいのですが。 http://66.102.7.104/search?q=cache:2QyOGI6tHV8J:www.efcit.co.jp/cgi-bin2/wwwlng.cgi%3Fprint%2B200312/03120011.txt+%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB%E3%80%80%E7%A9%BA%E6%AC%84%E3%80%80%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88&hl=ja のページが参考になるかなと、いろいろやっては見るものの・・・

回答No.1

質問の意図がよく判りませんが、空白セルの数が知りたいのであれば、“COUNTBLANK”関数の利用で良いと思いますが.... もし、質問を誤解していたらごめんなさい。