セルの範囲指定で、例えば、「=average(A1:C30)」という計算式を入れるとします。
そこに、もう1つセルを足す場合は、「,F1」を足して、「=average(A1:C30,F1)」と
すると思うのですが、その逆は無いのでしょうか?
「A1:C30」という範囲指定の中の「B20」というセルは省いて範囲指定したい場合は、
なにかいい手が無いでしょうか?
エクセルにはそんな考え方はありませんか?
どなたかよろしくご教授ください!!

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

A 回答 (4件)

機能は思いつきませんが、「なにかいい手が無いでしょうか?」ということなのでユーザー定義関数を作ってみました。

他の統計関係の関数も同じように対応できるでしょう。
=EXTaverage(主範囲,"追加範囲","除外範囲") とします。
セルにセットする時は
=EXTaverage(A1:C20,"C22:C24","B10:B12,C19") のようにします。
主範囲,追加範囲のみの場合は(主範囲,"追加範囲")
主範囲,除外範囲のみの場合は(主範囲,,"除外範囲")
主範囲のみの場合は(主範囲)とします。
この例では、セル範囲A1:C20にセル範囲C22:C24を追加し、セル範囲B10:B20とC19を除いた範囲の平均を計算します。
時間をかけていないので誤設定した場合エラーになります。しかし計算が不正になるようなセルの選択は一応チェックしています。ご容赦下さい。
真の回答とは言えないかもしれませんが参考にして下さい。

'***** 拡張平均計算 *************************
' rgMain :主範囲
' strPlus:追加範囲。""で囲んで設定します。
' strSubt:除外範囲。""で囲んで設定します。
'*******************************************
Public Function EXTaverage(rgMain As Range, Optional strPlus, Optional strSubt)
Dim calcSum As Double '値の計
Dim calcNum As Double '数値入力されたセル数

Application.Volatile '自動再計算関数にする
'主範囲と追加範囲の重複チェック
If Not IsMissing(strPlus) Then
If Not (Intersect(rgMain, Range(strPlus)) Is Nothing) Then
EXTaverage = "エラー": Exit Function
End If
End If
'主範囲と除外範囲の包含チェック
If Not IsMissing(strSubt) Then
If Union(rgMain, Range(strSubt)).Address <> rgMain.Address Then
EXTaverage = "エラー": Exit Function
End If
End If
'計算する
With Application
calcSum = .Sum(rgMain) '主範囲
calcNum = .Count(rgMain)
If Not IsMissing(strPlus) Then
calcSum = calcSum + .Sum(Range(strPlus)) '追加範囲
calcNum = calcNum + .Count(Range(strPlus))
End If
If Not IsMissing(strSubt) Then
calcSum = calcSum - .Sum(Range(strSubt)) '除外範囲
calcNum = calcNum - .Count(Range(strSubt))
End If
End With
'ゼロ判定
If calcNum > 0 Then
EXTaverage = calcSum / calcNum
Else
EXTaverage = "エラー"
End If
End Function
    • good
    • 0

選択されたセル以外のセルを計算の対象にしたいということですよね。

答えはそような機能はEXCEL2000までのバージョンにはありませんので、出来ません。VBAでプログラミングすれば出来るかもしれませんが・・・(ホントに出来るかは不明)

そもそも、CTRLキーを押しながらのクリックで、複数選択したセルの一部を解除することも出来ませんしね。

面倒ですが、マウスでドラッグ&クリック若しくはキーボードで入力のどちらかになってしまうかと思います。
    • good
    • 0

結果から言えば、対象外のセルを除く考えはエクセルにはない様です。



手で、a1:a30,b1:b19,b21:b30,c1:c30と入力が面倒というのであれば、ctrlキーを押しながら対象セルをクリック又はドラッグして範囲を指定するとキーボードを打つ必要はなくなります。(このとき同じセルを選択した場合、複数回入力したことになってしまうので注意が必要です)

この回答への補足

ctrlキーを押しながらは使っているのですが、
例えば、もう1つセルを足す場合に、ctrlキーを押しながら
F1を押すと、数式上では「,F1」と入力されるように、数式上では
「a1:a30,b1:b19,b21:b30,c1:c30」と表示されても、
ショートカットキーの機能として、どこか押しながら
B20を押すと、「a1:a30,b1:b19,b21:b30,c1:c30」と表示される
という機能はやはり無いのでしょうか?

補足日時:2001/04/24 11:48
    • good
    • 0

(A1:C19,A20,C20,A21:C30)


または
(A1:A30,B1:B19,B21:B30,C1:C30)
とするしかないような気がしますが。
    • good
    • 1

このQ&Aに関連する人気のQ&A

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

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

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

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

QCountif関数で検索条件に「C:C」のようにセル範囲を指定するのと同等の処理をする方法について

エクセル2010を使っている者ですが、関数のことで伺います。
AというシートにおいてG列に氏名が入力してあり、BというシートのC列にも氏名が入力してあります。両シートの氏名を照合して、Aシートにおいて合致する人数を取得したく、以下のような式を作ったのですが、エラーになってしまいます。

COUNTIF($GG$3:$GG$300,B!C:C))

検索値に「B!C:C」とセル範囲を入れている点がうまくいかない原因だと思うのですが、どのような式にすれば希望する処理ができるのか、どなたかご教示願います。

Aベストアンサー

ANo2です。

>式の流れを教えていただけないでしょうか。
回答にも書きましたように関数をよくは理解していないので、うまく説明できるかどうかもわかりませんが・・・

式の流れというよりも、考えた流れを以下に説明してみます。

例えば、単独のセルの値があるかないかが調べられれば、マッチしたものの数を合計すれば良さそうなのですが、普通に
 = MATCH(G3,B!C:C,0)
などで調べようとすると、マッチした場合はそのインデックス値(1~の整数)、マッチしない場合はエラー値が返されます。
これを、マッチしたら1、マッチしなければ0となるような数式にできれば、合計できる可能性があるのではないかと考えました。

通常は、エラーが出ると処理が面倒になるだけなのですが、今回の場合は、上の式の結果がエラーか否かが行いたい場合分けと合致していることを利用して、エラー処理も兼ね、一旦、ISERRORで論理値に変えてしまいました。
この結果は、マッチ:false、否マッチ:true となります。

これで場合分けはOKなのですが、実際は、マッチした場合を1にしたいので、NOTを取り、更に、値を確実に数値化するために*1の計算をさせています。
(乗算はしなくてもいけるかもしれませんが…)
この結果は、マッチ:1、否マッチ:0 となるはずと思います。

このあたりになってくると段々自信がなくなって来ますが(汗)、後は、この値を全体で合計させるために、SUMPRODUCTを用いて合計しているという次第です。


>特に、NOT,ISERRORで、真の値、偽の値を置いておらず~~
論理値は、通常、Falseが0、それ以外がTrueとして扱われます。
NOTをとることで、False→1、True→0と、0、1の2値に固定化できるので、これに1を乗ずることで、予定する数値化ができているものと考えています。
今回の場合は、NOTの前も論理値なので2値化はすでにできていると言えますが・・・
(この説明が、正しいのかどうかの自信はありません(笑))


※ 後から書くと(横道は省いているので)着実に求めているように見えるかもしれませんが、実際には、1枚のシート上に10行くらいの簡単なモデルを作成しておいて、H列に「= MATCH(G3,C:C,0)」、I列に「=ISERROR(H3)」などと分解した形で順にフィルコピーして結果をみながら、試行錯誤で思う結果になりそうな式を求めています。

ANo2です。

>式の流れを教えていただけないでしょうか。
回答にも書きましたように関数をよくは理解していないので、うまく説明できるかどうかもわかりませんが・・・

式の流れというよりも、考えた流れを以下に説明してみます。

例えば、単独のセルの値があるかないかが調べられれば、マッチしたものの数を合計すれば良さそうなのですが、普通に
 = MATCH(G3,B!C:C,0)
などで調べようとすると、マッチした場合はそのインデックス値(1~の整数)、マッチしない場合はエラー値が返されます。
これを、マッチ...続きを読む

Qエクセルのマクロで範囲指定をセルに番号を入れて、範囲指定したセルの字の

エクセルのマクロで範囲指定をセルに番号を入れて、範囲指定したセルの字の色を白にして消したいのですが、番号を入れるマクロがわかりません。マクロに記録でA2からB12までのセル内の字の色を白

にする方法は

Sub 字を消す()
'
' 字を消す Macro
'

'
Range("A2:B11").Select
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
End SubでできるのですがD3に開始番号、E3に終了番号を指定する方法がわかりません。ご教授お願いします

Aベストアンサー

>D3に開始番号、E3に終了番号を指定する方法がわかりません。
 ⇒マクロ記録でD3、E3を選択すればコード化されますが、開始/終了番号での振舞はご自身でコード化しない限り、マクロ記録では設定できません。 
  多分、D3、E3に入力される情報によって、対象範囲の該当セルフォント色を変更したいという事ではないでしょうか。
  ならば、D3,E3セルに入力する情報と対象範囲との関連付けを明示しないと問題解決しませんのでこの質問は一旦締めて、再質問しては如何でしょうか。

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範囲指定したセル中のカーソルを合わせたセルに指定した数値を足していくVBA

エクセル2010を使っている者です。
「Color = 13434828」と色を設定したセル範囲においては、カーソルを合わせたセルに、キーボード上の数字をクリックするとその数字が足されるというマクロを作ることは可能ですか?

伝票を見ながら1か月分のデータを集計しようと思っているのですが、そのマクロがあると作業がはかどります。

どなかたよろしくお願いいたします。

Aベストアンサー

No.5です。
>セルを移動させて戻らないと連続して同じセルに加算されない点はなんとかならないのでしょうか。

こちらの環境では正しく動作しているのですが・・・
ブックを開いた時の最初の1回だけかと思っていましたが、全部のセルで同じ状況だと
2番目のプロシージャの動作に問題があります。
エラーが出て止まることはないですよね?
1番目のプロシージャでイベントを制御しているので、そこでエラーが出ると動作しなくなります。
とりあえず2度目からも起動しなくなると言うことですので、一旦コードをすべて消して、
Dim MySum As Variant 
と2番目のプロシージャだけの状態にして、
Private Sub Worksheet_SelectionChange(ByVal Target As Range) の下の行に
MsgBox "SelectionChangeイベント"    '追加-----①
End Withの下の行に
MsgBox "セルの値は" & MySum      '追加-----②
この2行を追加してください。これでプロシージャが状況が分かります。
セルの範囲が変更になると①番目のメッセージがでるので動作していることが分かります。
特定色を選択した場合と特定色のセルに入力したときに②にセルの値が表示されます。
空白の場合は、値は表示されませんがメッセージだけは表示されます。
②が表示されない場合は、特定色のセルでは無いか、コードに問題があります。
①が表示されない場合は、プロシージャが実行されていないということになります。
正しく動作しているようでしたら、1番目のプロシージャを貼り付けて同じように確認してください。
動作しているようなら、特定色のセル以外にカーソルを移動させて保存してブックを閉じてください。
再度ブックを開いて、特定色セルで加算されるか確認してください。
この二つが動作していれば加算されます。
3番目とPrivate Sub Workbook_Open()のコードは、動作の確認できたら貼り付けてください。
Private Sub Workbook_Open()のコードは保存してからブックを閉じて、次に開いた時に実行されます。

>3つめのプロシージャの意図はどういったものなのでしょうか?

セル内での編集を禁止しています。あと編集の途中で他のセルをクリックすると
加算されるのを防ぐためです。
これに関しては、必要なければ消しても構いません。
あとIF文ですが、単一行形式の構文はEnd Ifがありません。

No.5です。
>セルを移動させて戻らないと連続して同じセルに加算されない点はなんとかならないのでしょうか。

こちらの環境では正しく動作しているのですが・・・
ブックを開いた時の最初の1回だけかと思っていましたが、全部のセルで同じ状況だと
2番目のプロシージャの動作に問題があります。
エラーが出て止まることはないですよね?
1番目のプロシージャでイベントを制御しているので、そこでエラーが出ると動作しなくなります。
とりあえず2度目からも起動しなくなると言うことですので、一旦コードをす...続きを読む


人気Q&Aランキング

おすすめ情報