• ベストアンサー

エクセル 色のついた行番号を取得する

データの集計表で、オレンジ色の行は、下の行の合計を入れます。 1行目.オレンジ色の行(Colorindex=44) 2行目.(無色) 3行目.(無色) 4行目.オレンジ色の行 5行目.(無色) 6行目.(無色) 7行目.(無色) 8行目.(無色) 9行目.オレンジ色の行     ・     ・     ・ といった形に、ランダムに集計行があります。 さらに、 列A,列B,列C 大分類,中分類,売上金額 集計行(オレンジ色) 肉,(空白),1000 肉,生肉,500 肉,ハム,300 肉,ソーセージ,200 魚,(空白),750 魚,たい,450 魚,いか,200 魚,えび,100 集計行(オレンジ色) 野菜,(空白),1250 野菜,キャベツ,950 野菜,トマト,300 漬物,(空白)350 集計行(オレンジ色)     ・     ・     ・ 列Bが空白の場合は、その下の中分類の集計行なので、列Bが空白の行だけの合計を、列Cのオレンジ色のセルにSUM関数で集計したいのです。 また、次のオレンジの集計行まで、全ての列Bが空白の場合もあります。 まず、オレンジ色の行から、次のオレンジ色の行範囲を確認して、無色の行だけをSUM関数で集計できるのか、さらに列Bに文字が入っていた場合、それを除外してSUM関数で集計できるのか。を教えていただけますでしょうか。 以上宜しくお願い致します。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。Wendy02です。 早速の返事ありがとうございます。 このご質問は、今まで、類のないものです。もちろん、今まで出ていた内容を組み合わせて出来ますが、この処理を一括のユーザー定義関数で処理するというのは、思うほど簡単なものではありません。 出来上がったコードを見せられれば、何だ簡単とは思うかもしれませんが、今までにはナイモノをアルモノにするというのは簡単じゃありませんでしたね。なお、現在、縦に対して計算しますが、複数列は選べません。ちょっと手を加えると、縦横、どちらでも計算できるようになります。試行錯誤の作ですから、まだ、どこかヘンなところがあるかもしれません。 Function SUMIFCOLOR(範囲1 As Range, _            条件 As Variant, _            範囲2 As Range, _            Optional 条件色 As Integer)   Dim rnum As Long, cnum As Integer, i As Long, j As Integer   Dim sum As Double, SumArray() As Double, k As Long   Application.Volatile     If 範囲1.Count = 1 Or 範囲2.Count = 1 Then     If 範囲1 = 条件 Then     SUMIFCOLOR = 範囲2: Exit Function     Else     SUMIFCOLOR = 0: Exit Function     End If  End If     rnum = UBound(範囲1.Value, 1)   cnum = UBound(範囲2.Value, 2)     If Not ((rnum > 1 And cnum = 1) Or (rnum = 1 And cnum > 1)) Then    SUMIFCOLOR = CVErr(xlErrNum)    Exit Function   End If   For j = 1 To cnum    For i = 1 To rnum      If 範囲1.Cells(i, j).Interior.ColorIndex = 条件色 _       Or i = rnum Then       ReDim Preserve SumArray(k)       SumArray(k) = sum       sum = 0       k = k + 1      ElseIf 条件 = 範囲1.Cells(i, j).Value _      And InStr(2, 範囲2.Formula(i, j), "SUMIF", 1) = 0 Then       If VarType(範囲2.Cells(i, j)) = vbDouble Then       sum = sum + 範囲2.Cells(i, j).Value       End If      End If    Next i   Next j   SUMIFCOLOR = SumArray(LBound(SumArray)) End Function ユーザー定義関数の取り付け方はご存知かと思います。 この式の使い方は、ちょっと工夫で便利になります。 B2: =SUMIFCOLOR(B3:$B$17,"",C3:$C$17,44) B3:$B$17    ↑    データの最終行を選択します。 ↑ 相対参照で、1つ下を選びます。 この式を1つコピーして、後は全てどこに貼り付けても、計算します。 '============ 補足 ======================= なお、「集計行」という行を探すのでしたら、ユーザー定義関数はいりませんね。ただし、最後の集計行だけは、「集計行」という言葉が見つからないので、エラーになります。 B2に式を入れる場合 =SUMIF(B3:INDEX($A$1:$C$18,MATCH("集計行",$A3:$A$18,0)+ROW()-1,2),"",C3:INDEX($A$1:$C$18,MATCH("集計行",$A3:$A$18,0)+ROW()-1,3)) .

7-samurai
質問者

お礼

ご回答ありがとうございました。 まだまだ勉強中なので、いただいた回答を理解するのに、今まで時間がかかってしまいました。 すばらしいです!!決してお世辞などではなく、感動しております。 >なお、「集計行」という行を探すのでしたら 本当は、集計行にはその大分類の上の「部門名」が入るので、いただいた補足内容では今回に関しては処理は無理ですね。ですけど、これも非常に参考になります。 また、別の機会に活用させていただきます。 本当に、ありがとうございました。

その他の回答 (3)

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

時々この手の質問があるが、今のエクセルの関数の、原理的な点から、できません。それは色のコードを関数で捕らえる関数がないことによります。 そこで、そういう関数があるとか、ないとかいう回答が過去に出ました。旧いバージョンの関数を使うためです。 しかしないとしておきます。 簡単なVBAでユーザー関数を使うと、色コードを数値化できる関数が作れますのでそれを使えばよい。しかし、「色という書式」と「関数が扱う値というものは」世界が違うことを認識してください。 http://okweb.jp/kotaeru.php3?q=1006740 や「エクセル セル 色 カウント」などで照会すれば出てきます。

7-samurai
質問者

お礼

ありがとうございます。 色々なパスワードで検索したつもりでしたが、不足だったようで、たどりつけませんでした。 いつもお手数をおかけして申し訳ございません。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。Wendy02です。 質問を読んでみて、疑問に感じたのは、「次のオレンジ色の行範囲を確認して、無色の行だけをSUM関数で集計」とある場合に、下側のセルに向かってというのは、ひじょうにやりにくいことに気がつき、再度確認したほうがよいと思いました。 中分類  売上金額 (オレンジ行)(1)       1000  ---- 生肉    500  ↑ ハム    300  | ソーセージ 200  この空白行の条件合計はどこに?       750   (1) か (2)か? たい    450  | いか    200  ↓ えび    100  ----- (オレンジ行) (2)       1250  ----- キャベツ  950   ↑ ここは、(2)か(3)か? トマト   300   ↓       350  ----- (オレンジ行) (3) ユーザー定義関数を作ってみて、その条件によってコードが換わります。ただし、上の表では、(1),(2),(3)の計算式を入れる場所はずれていますが、C列です。

7-samurai
質問者

補足

ご回答ありがとうございます。 おっしゃる通り、集計行のSUM(SUMIF)は下側を参照しています。 別の人間が作ったフォーマットに間違いがないように関数を入れるのが目的なので、このような形になっています。 集計行数がランダムな為、現状手作業で入れていくしかないのですが、それではミスが発生してしまいますし、作業カラムに集計行であることを判別するフラグを立てて、それで範囲を確定する方法もあるのですが、出来る限り現状のフォーマットを崩したくないのです。フォーマットを作った人がワガママなので(笑)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。Wendy02です。 >列Bが空白の行だけの合計を、列Cのオレンジ色のセルにSUM関数で集計したいのです。 例えば、 C12: =SUMIF(B4:B11,"",C4:C11) というような具合で良いのではありませんか? それとも、まだ、他にあるのかな?

7-samurai
質問者

補足

・・・おっしゃる通りですね。気づきませんでした(^^; 後、計算範囲を、オレンジ色の行から次のオレンジ色の行までにする方法さえ分かれば問題解決なのですが。 御礼;先日ご紹介いただきました、「かんたんプログラミング EXCELVBA」3冊とも購入しました。以降、本を頼りに大分一人で解決できるようになりました。ありがとうございました。

関連するQ&A

  • エクセル 空白行にSUM関数を入力するには

    下記の様な、データ行数の決まっていない各空白行に自動でSUM関数を入力するにはどうすれば良いでしょうか。        A列   B列   C列 1行     123    酒    100 2行     123    酒    100 3行(空白)            (SUM)   4行     215   ビール   200 5行     215   ビール   200 6行     215   ビール   200 7行(空白)            (SUM) 8行     324    ワイン  300 9行     324    ワイン  300 10行     324    ワイン  300 11行     324    ワイン  300 12行(空白)           (SUM) (SUM)表記のセルにそれぞれのデータのSUM関数を自動で入れたいのですが。 実際のデータは3千行ほどあります。よろしくお願いいたします。

  • 「自分のセルより1行上の行番号」を求める方法

    初歩的な質問で申し訳ありません。 あるプログラムからデータをExcelに吐き出しています。 SUM関数を使って値の合計を表示したいのですが、 行数が不明なため、SUM関数をうまく作れません。 A列|B列 ────── No1| 13 No2| 21 No3|  8 No4| 40     ~   ~ ────── 計 |SUM(B2 : B?)  ← ★ この★の部分の、「自分のセルより1行上の行番号」を求める方法を教えてください。

  • エクセルマクロで表の途中の集計行と合計行追加

    こんなことできますか? エクセルの表が各シートに一つずつあります。 B列からR列まで使用しています。 始まりは3行目で見出し行です。 データは4行目以降ですが、これは各シートごとに最終行は異なります。だいたい120行から200行程度です。 途中に空白はありません。 この表はS列の数値(12種類)により分類され並べ替えてあります。 やりたいのは、S列の数値を見て、分類(同じ数字)ごとに集計する行を追加したいのです。 集計する列は、D~K列だけです。 そして、最終行に全部の合計も出したいのです。 ただ、量が多いのと、頻繁に行なう作業なのでマクロでささっと出来ないかと思います。 どなたかどうすればよいか教えてください。 なにとぞお願いします。

  • エクセルの1行おきの集計

    エクセルで1行おきの集計をしています。   A 1 1 2 2 3 1 4 2 5 関数A(A1とA3の合計)(合計2) 6 関数B(A2とA4の合計)(合計4) 関数A SUM(IF(MOD(ROW(A$1:A$4),2)=1,A$1:A$4,0)) 関数B ???????????????????? 関数Aはうまくいっているのですが、 関数Bの設定がよくわかりません。。。 設定方法を教えて下さい。

  • 【エクセル】横方向へ複数行の数式をコピー

    こんばんは^^ ちょっとエクセルで苦戦してる作業があるので何か良い方法があったら教えてください。   a    b     c    d    e(列) ------------------ 1| 2      3      3       2     1 2| 2      4       1      3      2 ・ ・ 9| sum  c9/a9  sum   b9*c9  b9+d9 (小計の行) 10| 2     3     3     2     1 ・ ・ ・ 14|  2      1      2      2     5 15| sum ・・・・      (小計の行) ・ ・ ・ 上記のようなレイアウトにしたとします。 1.小計行がたくさんあります。 2.それぞれの小計で合計する行数が違います。 3.横方向にsumを手軽にコピーしたいけど、列が多く、ところどころに関数が入っているので、無闇にドラッグしたりできません。 今は、例えば9行の小計を1つsumを使った後、関数が入っていない空白セルのみをctrlキーを駆使して1つ1つクリック、ペースト そして、次の小計行へ行き同じ作業を繰り返してます。 ただ、これだと横にも縦にも長いデータが入ってるので労力使いすぎます(^^; フィルタをかけて「空白以外」にして、横方向にsumをドラッグが出来たら良いなーって思ったんですが、フィルタって列にかけられないですよね? 何か良い方法ってありますか?

  • EXCELで途中の集計行を除いて集計したい。

    EXCEL2002で合計を出したいのですが、途中に「合計」とか「中計」などの集計行があり、最初から最後までSUM関数を使うとその分だけ重複してしまいます。途中の計算式が入っているセルを除いて集計するには、どうしたらよいでしょうか?A列に項目(例えば、事務用品、コピー用紙、小計、固定電話料、携帯電話料、通信費計・・・)、B列に数値または計算式を入力しています。

  • エクセル2003 計算されないようにしたい

    例 A列     B列  1     =A1+A2  2     =A2+A3  3     =A3+A4 (A4は空白です) となっている場合に B1=3 B2=5 B3=3 になると思うんですが この時に空白のセルと計算結果を出すときは0もしくは 計算されないようにしたいです。 最終的にB列にSUM関数を使って合計を出したいのですが A列に求めたい数字が片方しか入ってない場合 (数字が入っているセル+空白セル)はSUM関数の合計に入れたくないです。 なので上記の例では B列にSUM関数をした場合11ではなく8にしたいです。 それには文字列を入力して#VALUE!にするしかないですか? でもその状態にしてSUM関数で合計を出したときも#VALUE!になってしまいます。 よろしくお願いします。

  • エクセル2000で集計行に色をつける

    エクセルの縦に長い表があります。 途中、ところどころが集計行、一番下が総合計です。 以前、こちらで教えていただいた「集計」機能で作成したものです。 今回の質問は、その集計行のセルに色をつける方法です。 集計行のE列には必ず「○○ 計」の文字列がありますから、これを判別して、B列からE列まで色をつけるVBAまたは、便利な方法がありましたら教えてください。 よろしくお願いします。

  • EXCEL行挿入・行削除しても正しく集計する方法

    例えばSUM関数で、1~10行目までが明細行で、11行目に合計行がある場合、明細の途中で1行挿入しても、自動的に集計範囲が変わってくれますが、最終明細行の下に行挿入した場合、集計範囲が変わってくれません。  (1)SUM(C1:C10) → 明細途中に1行挿入 → SUM(C1:C11)  (2)SUM(C1:C10) → 明細最後に1行挿入 → SUM(C1:C10) (2)の場合でも、全明細行集計するようにする方法(関数)があれば教えてください。(Office365使用) よろしくお願いします。

  • EXCELの行番号取得について

    A列に●がランダムに入っている状態で、1番目に●が入っている行番号、2番目に●が入っている行番号、3番目・4番目・・・の行番号を関数で取得したいのですが、良い方法はありますでしょうか。ご教授下さい。(バージョンはEXCEL2016です) よろしくお願いします。   A列    B列 1        4  ← 1番目の●の行番号 2        6  ← 2番目の●の行番号 3        9  ← 3番目の●の行番号 4  ● 5 6  ● 7 8 9  ● 

専門家に質問してみよう