お手数ですが、次の点をご教示ください。

MS-Excelに付属する関数をどうにか利用し、

特定のセルの範囲(ここではA1~An(n=2以上の任意の整数)とします)で、互いに排他的な複数の属性(例えば
a,b,c...)をそれぞれ1個または複数個、セルごとに割り当てた場合、A1~Anの範囲には特定の属性(例えばa)が複数のセルに存在しうるわけですが、特定の属性が複数個存在するときには自動的にこれを重複していると認識して1個とみなすという方式で、A1~Anの範囲に存在する属性の個数(<n)を数えさせることができるしょうか? もし可能ならば、その方法を教えてください。

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

A 回答 (1件)

こんにちは。

maruru01です。

いろいろ方法はあると思いますが、とりあえず2つ。

1.
作業列を使用します。
仮にデータがA1~A20として、作業列をB列とすると、B1に、

=COUNTIF($A$1:A1,A1)

と入力して、下の行(B20まで)へコピーします。
そうしたら、個数を表示するセルに、

=COUNTIF(B1:B20,1)

と入力すると、重複なしの個数が表示されます。


2.
オートフィルタを使用する方法です。
オートフィルタを使用するので、データの先頭に項目行を挿入します。
つまり1行目に行を挿入して、A1に項目名(例えば「属性」)を入力します。
これでデータはA2~A21になります。
個数を表示するセル(オートフィルタを使用するので、1行目か22行目以降にします。)に、

=SUBTOTAL(3,$A$2:$A$21)

と入力しておきます。
現時点では20(データ総数)になっています。
項目行を含んだA1~A21を選択します。
メニューの[データ]→[フィルタオプションの設定]でフィルタオプションの設定ダイアログを表示させます。
(途中で別のメッセージダイアログが表示されたら、[OK]します。)
[抽出先]は[選択範囲内]のままにします。
[重複したレコードは無視する]にチェックを入れて[OK]します。
すると、重複なしでフィルタリングされ、数式を入れたセルには、フィルタリングされた後のデータ数(つまり重複なし)が表示されます。
    • good
    • 0
この回答へのお礼

すばらしい(!)お答えを早速いただき大変ありがとうございました。いただいた2つのお答えのうち、作業としては1.の方が簡単そうですね。

お礼日時:2003/10/01 11:05

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

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

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

Qエクセルで種類を数える関数が無いのは何故?

エクセルで種類を数える関数が無いのは何故なんでしょうか?

エクセルで種類を数えるには、いくつかの関数を組み合わせるのが一般的ですよね?
直接数える関数が無いのは、訳があるんでしょうか?

Aベストアンサー

>>エクセルで種類を数える関数が無いのは何故なんでしょうか?

やっぱり、そういう関数が必要な方が全体からみたら少数派だと、エクセルの開発者たちが考えているからではないかと思います。
また、既存の関数を組み合わせたら、対処可能だから、無理して新しい関数を作る必要性もない、開発の優先順位が低いって判断もあるでしょうね。

私は、エクセルの表を作ったり、エクセルVBAでプログラムを作ったりしますけど、そういう関数が必要になったことが全くありませんし。

Qエクセルについてなのですが、 例えば指定の範囲内に A B B C A B C A B B C D

エクセルについてなのですが、

例えば指定の範囲内に
A B B C A B C A B B C D B D
と並んだセルからAとDの合計を出したい時はどのようにすればいいのですか?

COUNTIFSだったら複数条件を満たした数を表示するので希望とは違います。
希望はA or Dの合計を出したいのです。

Aベストアンサー

こんにちは!

COUNTIFS関数はAND条件になりますので、今回の質問には適しません。

=COUNTIF(範囲,"A")+COUNTIF(範囲,"D")
のように「A」のセル数と「D」のセル数をコツコツと足し算するのが
間違いないと思います。m(_ _)m

Qエクセルの関数で

エクセルの関数辞典を見ていたら、CUMPRINC関数というのがありました。
しかし、エクセルの「挿入」→「関数」→関数の分類で「財務」というのを選択したのですが、一覧表に載っていません。
どこに載っているのでしょうか?
どうすればこの関数を使えますか?
ちなみにシートの上でやっても関数の反応をしませんでした。

Aベストアンサー

Yahooで検索してみると、参考URLが引っかかりました。

参考になりませんか?

参考URL:http://money-sense.net/doc/20041215_224257.php

QエクセルでB列の数値がA列(A1:A10)の範囲に存在するかどうかを知りたい

こんばんは。
エクセルでこのようなことができるのかどうか分からないので、教えてください。

B列の数値がA列(A1:A10)の範囲に含まれる数値なら○、含まれない数値なら×と、C列に表示したいのですが、エクセルでそのようなことはできるのでしょうか。
できるのであれば方法を教えていただけますでしょうか。
よろしくお願いいたします。

<<最終的な結果は以下のように表示したいです>>

  A B C

1 12 19 ○

2 15 20 ○

3 19 28 ○

4 20 30 ×

5 23 34 ○

6 28 35 ×

7 32 38 ×

8 34 39 ○

9 39

10 40

Aベストアンサー

セル C1 に式 =IF(COUNTIF(A:A,B1),"○","×") を入力して、此れを下方にズズーッと複写

Qエクセルの関数 ネスト

エクセルの関数 ネスト

エクセルの関数で、ネストさせるときがあるとおもうのですが、

関数を内側に書いたらよいのか外側に書いたらよいのか分からなくなる時があります。

エクセルの関数に関してわかりやすく書いてあるページなどありますか。

Aベストアンサー

こんばんは

Excel2003までは、ネストが7まで、2007では64までが可能です。
http://www.google.co.jp/search?hl=ja&source=hp&q=excel+%E3%83%8D%E3%82%B9%E3%83%88%E3%80%802003%E3%80%802007&aq=f&aqi=&aql=&oq=&gs_rfai=

「仕様上は可能」でも、複雑なネストは間違いが生じやすいですし、変更もしにくくなります。「出来るだけネストはしない」「適宜、中間結果をセルに出力する」という方法を採った方が、間違いが少なく、柔軟性のあるシステムになると思います。

>エクセルの関数に関してわかりやすく書いてあるページなどありますか。
関数の個別の機能ならば、Webサイトも書籍も多数あるのですが、「組み合わせて使う」というのはその場その場での発想になってしまうと思います。

QA1セルにAと入力すると、A2セルに3000A3セルに2000A4セルに1000と表示させたい。

A1セルに「A」と入力する1回だけで、
A2セルに「3000」
A3セルに「2000」
A4セルに「1000」
A5セルに「合計数字」を表示させたいのですが、
式をご教授願いたいです。

よろしくお願いします。

Aベストアンサー

D1:G3
A500030001000
B500300130
C1200800300
A1にA,B,Cのどれかを入れる。
A2に =VLOOKUP($A$1,$D$1:$G$2,ROW(),FALSE)と入れて、
A4まで(G-D-1列数だけの行数)式を複写する。
結果
A1がBの場合A1:A4は
B
500
300
130

A1の空白の場合に対処して
=IF(A1="","",VLOOKUP($A$1,$D$1:$G$2,ROW(),FALSE))
が良いでしょう。
(既回答とほぼ同じ式ですが、1箇所違うところがあります。)

Qエクセル関数の解読サイトなんてありますか?

エクセル関数の解読サイトなんてありますか?

いつもお世話になっております<(_ _)>

エクセルファイルに関数の入った数式が入力されています。
セルごとに複数の関数が入っていますが、私にはちっともわかりません。

そこで質問です。
こんなとき「エクセル関数を解読」してくれるようなサイトってありませんか?

たとえば検索窓があってそこに「=SUM(S1:S13)」わからなくて困っている関数式を入力。
すると答えの別ボックスに「S1~S13までの数値の合計」と出てくるようなサイト。

それに近いサイトでも良いので知っている方がいらっしゃればぜひ、教えてください<(_ _)>

Aベストアンサー

もし、

=IF(E14="","",IF(O14="",(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1300,(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1625))

だったら、どういう文章が出て欲しいのでしょうか?

もしE14が空白だったら、
 空白、
そうじゃなかったから、
 もしO14が空白だったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1300
 そうじゃなかったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1625

って感じですか?
数式をそのまま読解したほうが解りやすくないですか?

QVBA 2個のセル範囲を1個にまとめる時

2個のセル範囲rng1,rng2について、union(rng1, rng2)を用いて1個のセル範囲にまとめようとしてます。少なくとも一方がNothihgの場合にエラーになるので、以下のようにしてます。

Sub Macro()
Dim rng1 As Range
Dim rng2 As Range
Dim rng As Range
set rng1= 'ここで入力
set rng2=
If rng1 Is Nothing Then
If rng2 Is Nothing Then
Set rng = Nothing
Else
Set rng = rng2
End If
Else
If rng2 Is Nothing Then
Set rng = rng1
Else
Set rng = Union(rng1, rng2)
End If
End If
End Sub

IF文を使って分岐させてますが、rng2の条件判断が2重になってたり、全体的に見た目ダラダラというか、もうちょっとマシな表現はないでしょうか?主観的質問ですみません。まったく別な方法でもいいです。

2個のセル範囲rng1,rng2について、union(rng1, rng2)を用いて1個のセル範囲にまとめようとしてます。少なくとも一方がNothihgの場合にエラーになるので、以下のようにしてます。

Sub Macro()
Dim rng1 As Range
Dim rng2 As Range
Dim rng As Range
set rng1= 'ここで入力
set rng2=
If rng1 Is Nothing Then
If rng2 Is Nothing Then
Set rng = Nothing
Else
Set rng = rng2
End If
Else
If rng2 Is N...続きを読む

Aベストアンサー

こんにちは。お邪魔します。

条件判別の部分だけを切り抜いて、
Is Nothing 判定の扱いについてお訊ね、
という解釈で、直接的にお答えします。

何れにしても、
rng に対して何もしない(Set しない)なら、値は Nothing ですから、
そういう前提で3通りを分けるような書き方をすれば
幾らかスッキリするのではないでしょうか。

'  Set rng = Nothing ' ←省略するのが普通です。
  If rng1 Is Nothing Then
    If Not rng2 Is Nothing Then Set rng = rng2
  ElseIf rng2 Is Nothing Then
    Set rng = rng1
  Else
    Set rng = Union(rng1, rng2)
  End If

直接の回答は以上です。

もしも、Set する以前の文脈で、判別やフラグを立てておくことが可能なら、
Is Nothing 判定は(ややこしいので)使わないで済む場合が多いですよね。
そういう意味では実例がイメージし難い課題のように、私も感じていたりもします。
Excel VBA で Excel を扱う限りでは、
オブジェクトよりは文字列、文字列よりは数値、を優先する方向で、
判別できるような設計をしていくと、案外スッキリ書けちゃうことも多いのかな、と。

とりあえず、以上です。

こんにちは。お邪魔します。

条件判別の部分だけを切り抜いて、
Is Nothing 判定の扱いについてお訊ね、
という解釈で、直接的にお答えします。

何れにしても、
rng に対して何もしない(Set しない)なら、値は Nothing ですから、
そういう前提で3通りを分けるような書き方をすれば
幾らかスッキリするのではないでしょうか。

'  Set rng = Nothing ' ←省略するのが普通です。
  If rng1 Is Nothing Then
    If Not rng2 Is Nothing Then Set rng = rng2
  ElseIf rng2 Is Nothi...続きを読む

Qエクセル関数を、書き写して分析できるツールはある?

タイトルの件、質問します。

エクセルの関数を分析する際に、エクセルの数式バーや、セルに入っている関数を
F2を教えて見るのでは、見にくい場合があります。

現在は、私は、メモ帳に関数をコピーして、分析したり、修正したりしています。
エクセルの機能or他ソフトで、関数を分析できるツールはあるのでしょうか??

【エクセルバージョン】
2003、2007

Aベストアンサー

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利な方法です。
そもそも計算が通っていない(たとえばカッコの対応が間違えていて,Enterしても受け付けてくれないようなミスをしている場合)には使えません。



また,数式バーの中で数式の「中」にカーソルを入れて左右の矢印キーでカーソルを動かしていったときに,「(」や「)」をまたいだ瞬間に,対応する「閉じカッコ」「始まりのカッコ」が色つきで強調表示されるのを確認しながら,カッコの対応がまちがえてないかなどを調べるのも簡易な良い方法です。


あまり使わない方法ですが,数式の中で適宜ALT+Enterを打って「セル内改行」してしまい,数式を縦に分解して書いてみるのも整理しやすい方法のひとつです。

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利...続きを読む

Qマクロ「A1の値は、セル範囲でA1:AB39の右2文字が YR と書いてあるセルの右隣の値」

よろしくお願いします
いつもgooの皆さんに大変お世話になっています
エクセルは2013です

マクロで
「A1の値は、セル範囲でA1:AB39の値(文字列)の右端2文字が YR と書いてあるセルの右隣の値」
はどういうコードになるでしょうか

例えば セル D10 の値(文字列)が、「2月合計yr」でしたら
セル A1 には 右隣のセル E10 の値を表示したいのです

右2文字は Ucase(Right(セル,2)) ですが
「セル範囲A1:AB39で、そのセルの右端2文字がYRと書いてあるセルの右隣のセル」を
探す方法が分かりません

Aベストアンサー

本来、以下は省略して書くことが多いのですが、明示的に書かせていただきます。

Ucase(Right(セル,2)) ->MatchCase:=False
全角半角の違いは、MatchByte:=False
末尾のyr を探すのは、What:="*yr"  (LookAt:=xlWholeも必要)
現在のコードは1回限り After:=Range("A1") 続けるなら、ActiveCell

私は、ここのカテゴリでは、質問者さんから、答えだけ書いてりゃいいのだ、というので、みなさんから評判が悪いようです。
どなたかの回答をお待ちになっても良いかと思います。

'//
Sub SearchChars()
 Dim c As Range
 With Range("A1:AB39")
 Set c = .Find( _
  What:="*yr", _
  After:=Range("A1"), _
  LookIn:=xlValues, _
  LookAt:=xlWhole, _
  SearchOrder:=xlByRows, _
  MatchCase:=False, _
  MatchByte:=False)
    If Not c Is Nothing Then
     c.Offset(, 1).Value = Range("A1").Value
    End If
 End With
End Sub
'//

本来、以下は省略して書くことが多いのですが、明示的に書かせていただきます。

Ucase(Right(セル,2)) ->MatchCase:=False
全角半角の違いは、MatchByte:=False
末尾のyr を探すのは、What:="*yr"  (LookAt:=xlWholeも必要)
現在のコードは1回限り After:=Range("A1") 続けるなら、ActiveCell

私は、ここのカテゴリでは、質問者さんから、答えだけ書いてりゃいいのだ、というので、みなさんから評判が悪いようです。
どなたかの回答をお待ちになっても良いかと思います。

'//
Sub SearchChars()
 Dim c...続きを読む


人気Q&Aランキング

おすすめ情報