素人です。誤認識などございましたらすみません。

VBAとは、EXCEL関数も利用できるものと聞きましたが、

例えば、range("A1:D10")において 5以上の数を調べることを
countif("A1:D10",>5)のEXCEL関数をもちいて表現するにはどのような記載の
仕方をすればよいでしょうか?

なおかつ、D10の部分を inputboxなどで、入力者が数値を変化させたいのです。
D10をE20とか自由に変更させたい。

他の方法もあると思いますが、countifとinputboxを用いて、入力者が範囲を自由に設定でき、5以上の数を数えさせるにはどうしたらよいでしょうか?

質問自体がおかしかったり意味がとおらないのではと心配していますが、なんとなく意味がつたわりましたでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

その場合は次のようにします。



Range("E2") = Application.WorksheetFunction.CountIf(Range("a1:a" & 変数), ">5")
    • good
    • 0
この回答へのお礼

pesoさん

どうも度々 ありがとうございました。なにぶんにも、VBA等のプログラムなるものは、右も左もわからないのでチンプンカンプンな質問でしたが、ごていねいにわかりやすく教えてくださいまして大変助かりました。

お礼日時:2001/11/28 12:33

>例えば、range("A1:D10")において 5以上の数を・・・



ワークシート関数を使うためには Application.WorksheetFunction.関数 とします。

例)
Range("E1") = Application.WorksheetFunction.CountIf(Range("A1:D10"), ">5")

選択範囲にテキストボックスを使う場合は CountIf(Range("A1:D10"), ">5") の部分を CountIf(Range(テキストボックス名), ">5") にします。
また、 CountIf(Selection, ">5") にすると選択範囲が適用されます。

この回答への補足

pesoさんありがとうございます。大変たすかりました。大感激です。ところで下
のようなことはできるのでしょうか?追加で教えて頂けると助かります。

Sub Macro1()

Dim 変数
変数 = InputBox("変数を入力してください")
Range("E2") = Application.WorksheetFunction.CountIf(Range(変数), ">5")
'とやり A1:A13を入力すると出来ました!(大感激!!)
'ところで、テキストボックスにA1:A13に入力すると大変なので、A1:A×と固定してしまい
'テキストボックスに数字を入力するだけで範囲を指定させることはできないのでしょうか?
'下のようにしてみましたが、デバックになってしまいました。
Range("E2") = Application.WorksheetFunction.CountIf(Range("a1:a変数"), ">5")


End Sub

補足日時:2001/11/28 09:18
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3コピー元ワークシート3

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = Workbooks.Add

'ここからが実際のコピー処理です。
'単純に3回コピーメソッドを呼び出して3回コピーしています。
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)

End Sub

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = W...続きを読む

QInputboxメソッドでRangeオブジェクトを取得

WinXP、Excel2002です。

InputboxメソッドでRangeオブジェクトを取得
しようとしています。

ヘルプを見て、
Set myRange = Application.InputBox(prompt := "Sample", type := 8)

を適用したのですが、これではダイアログのボタンで
キャンセルすると、Setの部分でエラーになってしまいます。

これを回避するため、いろいろ考えましたが、結局On Error Resume Nextでエラーを無視することにしました。

私が初心者なもので、キャンセルや不正な入力のときのもっと適切なやり方があるのではと思い質問させていただきます。

みなさんは、inputboxでキャンセルや不正な入力があったとき、どのようにプログラムされているのでしょうか?

Aベストアンサー

ある本のApplication.InputBoxの説明には、エラーが起こった時の処理について次の3つが挙げられています(当たり前のことですが)。
On Error はエラーが発生した時に行いたい処理によって
(1)On Error Resume Next
(2)On Error GoTo Line
(3)On Error GoTo 0
がある。
Type=8の場合は処理を続けても意味がない場合がおおく
(2)でEnd Subの手前まで飛ばすケースが多いのでは。
On Error Exit Subは使えないでしょうから。

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3ワークシート

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめる。
 新規ブックのオープンをtestwriteを呼ぶ前に1度だけ行い、
 testwriteの中ではその新規ブックに対してシートを追加していく。
 そしてtestwriteの処理が全部終わったら、
 新規ブックの全シートを1度に「記録シートYYYY/MM/DD.xls」にコピーする。

それでも駄目でしたら、以下の回答No.1を試してみてください。
http://oshiete.goo.ne.jp/qa/1822561.html

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめ...続きを読む

QエクセルのSheet1のA1:D5の範囲をSheet2のA1:D5へ参照したいのですが、何か方法はあ

エクセルのSheet1のA1:D5の範囲をSheet2のA1:D5へ参照したいのですが、何か方法はありますでしょうか?

Aベストアンサー

#5です。間違えました。

正「Sheet2のB2に以下を貼り付けて」
誤「Sheet2のA3に以下を貼り付けて」

QEXCELのVBAでシートコピーをしたとき元のマクロを削除するには?

VBAのマクロでシートのコピーをしたいのですが、元のシートにはVBAのコードが含まれています。コピーするのはデータだけのコピーが必要で、マクロ自体は必要ないのですが、それを削除するコードはどのように書いたらいいのでしょうか?
どうしてもコピーしたファイルを開くと「マクロが含まれています」という確認メッセージが出てしまうのですが、それもなくしたいのです。
シートにフォームのボタンが配置されている場合も同様に、そのボタン自体をなくした状態でコピーを行いたいのですが・・・。プログラムで行うのは不可能なのでしょうか?

Aベストアンサー

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け
Sheets("Sheet1").Name = "コピー"
Application.CutCopyMode = False
Application.SheetsInNewWorkbook = sc
ActiveWorkbook.Close
ThisWorkbook.Activate
End Sub

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け...続きを読む

QCOUNTIF関数

COUNTIF関数の 質問します。

A1:A20 に 数値入ってるとします。
10以上の セル数を 求める 式は
=COUNTIF(A1:A20,">10") ですよね?

質問なのですが
例えば、10以上20以下 の セル数を
求める時の 式は どういう 式に なるのでしょうか?

COUNTIFでは できないのでしょうか?
もし できないなら 他の 関数 教えてください。

よろしく お願い いたします。

エクセルは 2002です。

Aベストアンサー

 質問された条件は一つの式ではできなかったかと思います。
 そこで10以上のカウントしたものから20より大きいものをカウントしたものを
引いてみてはどうでしょうか。
例)
=COUNTIF(A1:A20,">10")-COUNTIF(A1:A20,"<20")

QVBAのワークシートの追加とコピーなんですが。

VBAのワークシートの追加とコピーなんですが。


sheet1の原紙をすべてコピーして、

新しくワークシートを追加してそのシートに貼り付けるプログラムを

教えてください。

Aベストアンサー

With ActiveWorkbook
  aaa = .Sheets("Sheet1").Cells(9, 4).Value 'aaaは社員
  bbb = .Sheets("Sheet1").Cells(9, 5).Value 'bbbは4月
  .Sheets("Sheet1").Copy After:=.Sheets(.Sheets.Count)
End With
ActiveSheet.Name = aaa & bbb

QIF関数とVLOOKUP関数を使って以上以下を検索させるには?

EXCEL2000使用しております。IF関数を使って数式を作っております。
値が10以上15以下なら特定のテーブルからVLOOKUPで数字を抽出、
そうでなければ別のセルを参照し計算する数式を作りたいのですが、
ifの後、○以上○以下を一度に表示するにはどうしたらよいかわかりません。
どうかよろしくお願いいたします。

Aベストアンサー

「=IF(AND(値>=10,値<=15),VLOOKUP(~),・・・)」
とすれば可能だと思います。

QEXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法

 EXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法
 普通のやり方では、セルの数字、値だけで、通常は、中身の重要な"関数式"であったり、VBA等のプログラムまで、コピーされることは、ありませんので、そこまで、出来る方法を教えて下さい。

Aベストアンサー

コピー元のBookとコピー先Bookをどちらも開いて
Excel画面上に並べます(左右に並べる方が作業しやすいと思います)

Ctrlキーを押しながら、コピーしたいシートのタブ部分を
クリック長押しすると、+マークと▲マークが出てきます。
マークが出てきたら、新しいBookにドラッグ&ドロップ で
シートコピーが出来ます。

全く同じシートがコピーされ、マクロもコピーされます。

QExcel2010のCOUNTIF関数で誤動作

A列に20桁の数字ばかりの「文字列」が入ったセルが1000行ほどあります。
A列の書式は文字列に設定してあります。
特定のセルの中身が重複してないことを確認しようと。
B1=COUNTIF(A:A,A1)
のようにしたところ、うまく動きませんでした。
調査したところセル先頭から15文字までしか認識してくれません。
文字列扱いして欲しいのですが、数字ばかりなのが気に入らないようです。
数字だけのまま20桁認識させる方法は無いものでしょうか?

Aベストアンサー

>調査したところセル先頭から15文字までしか認識してくれません。
文字列データでも比較するときに数値化が可能な値は数値として扱うためと考えられます。
有効数字の桁数に係わる問題化と思います。

>文字列扱いして欲しいのですが、数字ばかりなのが気に入らないようです。
何処かに英字や記号が有れば純粋に文字列として扱われますので桁数の制限を避けられるでしょう。

>数字だけのまま20桁認識させる方法は無いものでしょうか?
COUNTIF関数ではできないみたいです。
SUMPRODUCT関数、SUM関数で配列を前処理することでカウントできます。

前処理は次の式になります。
(A:A=A1)*1
次の3つの式は正しくカウントできています。
=SUMPRODUCT((A:A=A1)*1)
=SUM(INDEX((A:A=A1)*1,,1))
=SUM((A:A=A1)*1)
3番目のSUM関数の場合は数式の確定時にCtrlとShiftを押しながらEnterキーの打鍵が必要です。


人気Q&Aランキング