• ベストアンサー

VBA 空白以外のセルをカウントして数値を返す

エクセルVBAについて、初心者です。 例えば、A1からA5までに何か入力されている場合は、別シートのA1セルに個数を返す、というVBAを教えてください。 (A1からA5の5セルに3セルだけ文字列データが入っている場合は、別シートA1に3と入力される) 困っております。ご回答よろしくお願いいたします。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

das101さん、こんにちは。 > VI列までこれを繰り返す処理もできますでしょうか。 IV列でしょ? 以下のようにFor nextで繰り返せます。 Sub test02() Dim Rng As Range For i = 1 To 256 '1列から256列まで繰り返す Set Rng = Sheets("Sheet1").Range(Cells(1, i), Cells(5, i)) Sheets("Sheet2").Cells(1, i) = Application.WorksheetFunction.CountA(Rng) Set Rng = Nothing Next i End Sub ただ、CountA関数できをつけなければならないのは、式の答えで空白(="") となっていてもカウントされます。式が入っているので空白ではないからです。 計算結果が空白の場合は空白としたいなら、 Sub test03() Dim Rng As Range For i = 1 To 256 '1列から256列まで繰り返す Set Rng = Sheets("Sheet1").Range(Cells(1, i), Cells(5, i)) Sheets("Sheet2").Cells(1, i) = Rng.Count - Application.WorksheetFunction.CountBlank(Rng) Set Rng = Nothing Next i End Sub のようにしてください。

その他の回答 (3)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

> Dim i As Integer > を追加すれば大丈夫でした。 失礼しました、漏れてましたね。 > ちゃんと動きましたが、行がずれてしまいましたので、 Sheet2の1行目に返すようにしたつもりですが、どうずれましたか?

das101
質問者

お礼

Sheet2の1行目に返すようにちゃんと動作しました。 いただいたプログラムに間違いがあったのではなく、実際は、5行目に返す必要がありましたので、私の方での訂正が必要でした。 思ったとおりのものが出来上がり、感謝しております! また是非相談にのってください!ありがとうざいました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

merlionXXです。 すみません、少し修正させてください。 先ほど#2で書いたコードはSheet1をアクティブにしていないとエラーになってしまいます。 検索範囲であいまいな書き方しちゃったせいです。 すっかり悪い書き方の見本になってしまいました。 (*/∇\*) キャ それぞれ、以下のようにしてください。 Sub test02() Dim Rng As Range For i = 1 To 256 '1列から256列まで繰り返す With Sheets("Sheet1") Set Rng = .Range(.Cells(1, i), .Cells(5, i)) End With Sheets("Sheet2").Cells(1, i) = Application.WorksheetFunction.CountA(Rng) Set Rng = Nothing Next i End Sub Sub test03() Dim Rng As Range For i = 1 To 256 '1列から256列まで繰り返す With Sheets("Sheet1") Set Rng = .Range(.Cells(1, i), .Cells(5, i)) End With Sheets("Sheet2").Cells(1, i) = Rng.Count - Application.WorksheetFunction.CountBlank(Rng) Set Rng = Nothing Next i End Sub

das101
質問者

お礼

早速にありがとうございます!すぐに実行してみましたが、iの定数が定義されていないというコンパイルエラーが出てしまいました。 iを使った別のサンプルを実行してみたときにも同じようにエラーが出てしまい、どのサンプルを見ても定義していないので、なぜだろう??と先に進めなかったのですが・・・。

das101
質問者

補足

すみません!ちゃんと調べたら分かりました。 Dim i As Integer を追加すれば大丈夫でした。 ちゃんと動きましたが、行がずれてしまいましたので、修正して再度実行してみます。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

Sheet1のA1:A5の空白以外のセル個数をSheet2のA1に返します。 Sub test01() Dim Rng As Range Set Rng = Sheets("Sheet1").Range("A1:A5") Sheets("Sheet2").Range("A1") = Application.WorksheetFunction.CountA(Rng) Set Rng = Nothing End Sub

das101
質問者

お礼

大変助かりました!本当にありがとうございます。 相談できる人がおらず、書籍を見たりと、1週間悩んでいましたので、回答いただいたときは感激しました。 空白セルをTrueで返す、などのサンプルは見つけたのですが、COUNTAのサンプルがなかなか見つかりませんでしたので・・・。 (ずうずうしいのですが、VI列までこれを繰り返す処理もできますでしょうか。これ以上考える時間がないので、とりあえず、同じ処理をコピーしたのですが・・・。) とにかく、ありがとうございました。

関連するQ&A

  • Excel VBA 空白セル以外のセルを罫線で囲む

    Excel VBA 空白セル以外のセルを罫線で囲む ここの質問箱をよく利用させて頂いている者ですが、また質問させていただきます。 あるシート(例:”Sheet1”)の全セル内のうち、ランダムな文字が全セル内のどこかに記入されています。 また、記入される位置は常に変化します。 つまり、ある時は「A1」に入力されていても、次ははそうでないということです。 この様な場合、文字が入力されているセルのみに罫線を引く処理を行いたいのですが、実現は可能でしょうか? また、可能であれば、どの様なコードになるのでしょうか。教えてください。

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • VBA セルに入力されている数値でセルを指定する

    Excel VBA初心者です。 Sheet1のA1セルに10、A2セルに3を入力しています。 この入力したセルの数値を参照して、 Sheet2の「Cells(10,3)」(C10セル)を青(Interior.ColorIndex = 5)に 書式変更したいのですが、「Cells(”Sheet1.A1の値”,”Sheet1.A2の値”)」の 書き方がわかりません。 Excel2010を使用しています。 よろしくお願いします。

  • エクセルVBAでセル結合

    いつもお世話になっています。 エクセル2003でVBAを使って下記をしたいのでその、VBA構文を教えて下さい。 特定の列のあるセルに文字が入っています。 (文字が入っている列は固定ですが、行番号はデータによって変わります。例えば、Aデータの場合は「J30」、Bデータの場合は、「J55」だったりします。) この文字が入っているセルをVBAで検索し、検索したセルを右隣のセルと結合します。(先ほどのAデータの場合、J30:Z30に結合します。) 更に、文字が入っているセルが2以上の複数の場合があります。(先ほどのAデータの場合、「J30」と「J40」と「J45」という感じです。文字が入っているセルの数はデータにより異なります。) 結合が終わり、このシートのデータがあるところだけに罫線を引きます。(このシートのデータというのは、前述の文字とそれ以外は、「数字」と「・」です。 ややこしいですが、よろしくお願いします。

  • エクセルVBAでセルに色を付けるには

    エクセル2010の質問です。 例えばA列に入力した文字のバイト数が38より多い場合、セルに色を付けたいのです。 条件付き書式で =LENB($A2:$A1048576)>38 でもよかったのですが シート内のデータをクリアすると条件付き書式までクリアされてしまい困っています。 VBAで出来るのが一番なのかなと思っていますが、ご教授お願い致します。

  • 条件に一致するセルのカウントと色付けと置換

    こんにちは。 指定した文字列を選択範囲から検索し、 文字列を含むセルの個数のカウント& セルの色付け&文字列の置換ができる コードを教えてください。 <シート1> A列:検索文字列 B列:置換後の文字列 <対象範囲> 別ブックの指定した範囲のみ 文字列の置換のみであればエラーなく 実行することができたのですが、 個数のカウントとセルの色付け方法が いまいちわかりません。 vba初心者のため、簡単な解説を つけていただけると嬉しいです。 なお、文字列の置換は以下のサイトを参考に しています。 http://extan.jp/?p=5749

  • Excel 空白セルのコピペについて

    http://imgur.com/5e8TsP1 上記図のように、シート1のB列に各文字を入力しています。 そして、A列にはもしB列に文字が入力されていたらID代わりの数値を表示する、という式を入力してあります。 次に、シート1のA列、B列をコピーして、シート2に数値としてペーストをします。 すると、A列は空白のはずが、xldown操作をすると元のセルで式が入力されていたものまで選んでしまい、真の空白セルとして認識してくれません。 そこで、このような例の場合、どうコピーペースト、または選択をすれば偽物の空白 セルを生み出さないように出来るでしょうか? 実際に使用するデータは項目名が多く存在し、マクロですべてのセルを選択→新規ブックを作成してそこにペースト、という処理を行っています。 この時に偽物の空白セルが出ると、データベースに読みこむ際に不都合が生じますので、何とか改善を図りたいです。 VBA、関数、Excel上のテクニックのいずれでも構いませんので、どうかご教授下さい。 よろしくお願いいたします。

  • エクセルvba初心者です・・・

    エクセルvba初心者です・・・ シート1にあるひとつのセルをコマンドボタンを押した時にそのセル内の文字列をシート2にかいていくようなプログラムをつくりたいです。 例えば シート1のセルに文字入力→”田中”→登録ボタンおす→シート2のセルA1にはいる シート1のセルに文字入力→”竹山”→登録ボタンおす→シート2のセルA2にはいる                  ・                  ・                  ・ というようになるコードわかる方いたら教えてください。おねがいします。

  • EXCEL2010 VBAで空白行以外をコピー

    EXCEL2010を使用しています。 シートAではセルA1からA10に順にデータを入力していきます。 A1からA10のすべてにデータを入力する場合やA1からA4のみデータを入力する場合等があります。 このA1からA10のデータをシートBのA1からJ1にコピーしたいと思っています。 空白以外のデータをコピーして、コピー後はシートBのA1:J10で空白の列は削除したいと 思っています。 (例) シートA A1 ○ A2 ○ A3 × A4以降すべて空白 シートB A1 ○ B1 ○ C1 × D1からJ1までは列ごと削除 これをVBAで作成したいのですがどなたか詳しい方押してください。

  • EXCELのデータベース利用について(VBA)

    VBA初心者の者です。 下記の様なEXCELファイルを作りたいのですが、どのようにすれば良いのか まったくわかりません。 ACCESSでの構築が簡単なのかもしれませんが、データ量がそれほど多くないことと 職場にACCESSがないため、可能であればEXCELで構築したいと考えています。 私自身、プログラムの知識がなく、EXCEL VBAのサイトを確認するのですが、いまいち どうすれば良いのかわかりません。 ぜひご教授の程よろしくお願いします。 3つのシートの構成は以下になります。 【入力シート】 A1セルに文字列(A~Z)入力欄 【○○データシート】 A列に A~Z の文字列 B列に 001~100までの数値 C列に 001~100までの数値 D列に 001~100までの数値 E列に 001~100までの数値 例)    A列   B列   C列   D列   E列 1   A   001 2   B   001    002    003   004 3   C   003 4   D   002    003 【▽コマンドシート】 A列に 001~100までの一意の数字 B列に 文字列(コマンド) C列に 文字列(コマンド詳細) 例)    A列    B列    C列 1   001   xx     blank 2   002   xxx△   xxx 3   003   xxxx    x○ 4   004   xxxxx   xxx 【欲しいVBA】 1、入力シートのA1セルに○○データシートのA列に該当するA~Zの 文字列を入力。 2、○○データシートのB列~F列までの数値を参照 3、2の数値において▽コマンドシートのA列に記載ある番号と紐づけを行い、 ▽コマンドシートのB列、C列に記載がある文字列を入力シートのB列、C列にコピー ※コピー時は▽コマンドシートの書式や体裁情報も含めてコピー。 例としては以下になります。 入力シートの A1セルにDを入力した場合は 入力シート    A列    B列    C列 1   D    xxx△  xxx 2        xxxx    x○ 3 以上、ご教授よろしくお願いします。

専門家に質問してみよう