エクセルで売上金額の集計を作っています。
スパンとしては60ヶ月ほどの集計です。
横軸に年月度、縦軸を個人とします。
最後の列に合計金額が入るのですが、それに対して、売上が開始した月と終了した月を自動的に反映させることができるでしょうか?
具体的には、こんな感じです。
(1)A列1行目をを氏名、B~Y列の1行目を月度とする(2023/04等)
(2)B~Y列の2行目以降(n行目)に売上金額を入れる
(3)B~Cのnが空欄(またはゼロ)で、Dのnに100万円と入力したら、
(4)Z列のn行目セルに、D列1行目の値(2023/06等)が入る
IF関数を使って、「B列が空欄(またはゼロ)なら」を繰り返すには、60ヶ月のスパンは長すぎます。
よい方法がありましたら、ご教示ください。
No.1ベストアンサー
- 回答日時:
こんにちは
イマイチはっきりしないのですが、以下と解釈しました。
・B1:Y1(=1行目)に日付が入力されている
・各行について、B列~Y列が空白でない最初の列の1行目の日付をZ列に表示したい
もしも、1行目の日付が『シリアル値で昇順』になっていると仮定しても良ければ、Z2セルに
=AGGREGATE(15,6,(B$1:Y$1)/(B2:Y2<>""),1)
そうでない場合は、Z2セルに
=INDEX($1:$1,AGGREGATE(15,6,COLUMN(B$1:Y$1)/(B2:Y2<>""),1))
を入力して、下方にフィルコピーすればできると思います。
なお、スピル機能が利用できる環境であれば、Z2セルに
=INDEX(FILTER(B$1:Y$1,B2:Y2<>""),1)
でも可能と思います。
※ Z列の書式は、必要に応じて、日付型の書式にしておいてください。
※ 「最後の空白でない列」の日付も、同様の方法で求めることが可能です。
※ B~Yが全て空白の場合には、上の式はいずれもエラーになります。
(そのような可能性がある場合は、エラー処理を加えてください)
こちらの説明が分かりにくくて申し訳ございませんでした。
ややこしい問題なのに、早々のご回答をいただき、ありがとうございました。
まさに欲しかった処理です。助かりました。
No.2
- 回答日時:
No.1さんの回答は、
>B列~Y列が空白でない最初の列の1行目の日付
を求めるという理屈で計算式を組み立てたものだと思います。
ですから、同じ理屈で「最後の空白でないの列」も求められると説明されています。つまり、No.1さんの発想は空白であるか否かをチェックするという考えだと思います。
「この表には売上の数値以外は入力しない」という前提なので全く問題ありませんが、それを忘れて、文字列を入力してしまった場合、例えば、ある人の「2023/4」の欄に「研修中」などと文字を入力されてしまうと困ることが起きます。この場合「2023/4」が空白ではなくなってしまうので、その人の売上開始月が「2023/4」となってしまいます。
そこで、「文字列は無視」する方法を考えてみました。
ご質問者は
>最後の列に合計金額が入るのですが、それに対して、売上が開始した月と終
>了した月を自動的に反映させる
と仰っているので、B列~Y列には基本的には売上の「数値」が入るのだと思います。そこで、「最初に数値ある列」「最後に数値がある列」を特定するという方法を使います。
まず、「最初に数値がある列」ですが、MATCH関数を用います。Z2セルに、
=INDEX($B$1:$Y$1,MATCH(0,INDEX(0/$B2:$Y2,0),0))
という数式を入れて下方向へコピーすることになります。
MATCH関数は配列の中から、検索値と完全一致するものの位置を返すことができますが、同じ数値が複数ある場合、「最初にヒットした位置」しか返せません。「0をB列からY列のセルの値で割った配列」はセルが数値なら「0」、空白なら「DIV/0!」、文字列なら「#VALUE!」が返ります(売上0の場合は開始月に含めないものとします)。その配列から最初の0の位置を特定すれば、「最初に(0より大きい)数値がある列」を特定したことになります。
次に「最後に数値がある列」ですが、LOOKUP関数を用います。AA2セルに
=LOOKUP(10^15,$B2:$Y2,$B$1:$Y$1)
という数式を入れて下方向へコピーすることになります。
LOOKUP関数は検索範囲から検索値を見つけて対応範囲の同じ位置にあるものを返すことができますが、検索値が見つからない場合、検索範囲の最後の値の位置に対応する値を返します。ですから、10^15というとても大きな数値で通常セル範囲に存在しないと思われる値を検索値にすれば、見つからないので「最後に数値がある列」を特定できることになります。
纏めると
「最初に数値がある列の月」
Z2=INDEX($B$1:$Y$1,MATCH(0,INDEX(0/$B2:$Y2,0),0))
「最後に数値がある列の月」
AA2=LOOKUP(10^15,$B2:$Y2,$B$1:$Y$1)
となります。
なお、No.1さんの数式と同様の注意事項があります。
※ Z列、AA列の書式は、必要に応じて、日付型の書式にしておいてください。
※ B~Yが全て空白の場合には、上の式はいずれもエラーになります。
(そのような可能性がある場合は、エラー処理を加えてください)
ありがとうございました。
いろいろな方法があるんですね。実はこの仕様、上司から相談を受けたものなのですが、最初は「無理だろう」と思っていました。
ですが、端から断るのも失礼なので「考えてみます」として、考えながら(結局思い至らず、VBAに逃げようかと考えていた)こちらでも質問したものです。
何事も、簡単に「無理」とか「できない」とは断定できないものですね。
エラーについては、むしろ「#N/A」が出ている方が未入力が分かっていいかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Excel(エクセル) 特定文字(数字)で行挿入、挿入された行で合計したい 2 2023/03/13 14:30
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Excel(エクセル) SUBTOTAL SUMIF?? 2 2023/03/16 11:25
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- Excel(エクセル) エクセル/列追加時、合計行の計算式 7 2023/03/15 11:14
このQ&Aを見た人はこんなQ&Aも見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
3分あったら何をしますか?
カップ麺にお湯を入れて、できるまでの3分間で皆さんは何をしていますか?
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
何歳が一番楽しかった?
自分の人生を振り返ったとき、何歳のころが一番楽しかったですか? 子供の頃でしょうか、それとも大人になってからでしょうか。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
エクセルで空白を無視して一番左にあるセルを参照したい
Excel(エクセル)
-
空白でないセルの値を返す方法について
PowerPoint(パワーポイント)
-
初めて0以外の数値が出てきたときの値を表示(EXCEL)
Excel(エクセル)
-
-
4
【EXCEL】空白でないセルの位置を検索したい
Excel(エクセル)
-
5
エクセルで空白を無視して一番左にあるセル内容(文字列)を別セルに返したい
Excel(エクセル)
-
6
Excel関数で、範囲内の最後のセルを得る方法
Excel(エクセル)
-
7
範囲内の最左に入力された数値を取得する方法
その他(Microsoft Office)
-
8
エクセルで左から、最初に0より大きい値を抽出したい
Excel(エクセル)
-
9
列内の最初に現れる数字の入った行番号を知りたい
Excel(エクセル)
-
10
エクセルで空白セルを含む列の最終行の値を取得する式を教えてください
Excel(エクセル)
-
11
ある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?
Excel(エクセル)
-
12
値が入っている一番右のセル位置を返す方法
Excel(エクセル)
-
13
「選択範囲を解除してアクティブセルを選択」をマクロで行うにはどうすればよいでしょうか
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
お店に入るために行列に並んで...
-
VBAで文字列を数値に変換したい
-
PowerPointで表の1つの列だけ...
-
「B列が日曜の場合」C列に/...
-
2つのエクセルのデータを同じよ...
-
Excelで、A列にある文字がB列...
-
エクセルの表から正の数、負の...
-
エクセルで文字が混じった数字...
-
行を飛ばして検索条件にあう個...
-
ExcelVBA でリストリストボック...
-
ExcelのVBAで連番を振る。
-
VBAでセル入力の数式に変数を用...
-
エクセルVBAでコメントのコピー
-
エクセルの項目軸を左寄せにしたい
-
どんなスーパーでも客層の良い...
-
エクセルで勝手に式が設定され...
-
エクセルで一列おきに空白列を...
-
エクセル(勝手に太字になる)
-
【Excel VBA】特定の列以外を削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセル 文字数 多い順 並...
-
エクセルで最初のスペースまで...
-
Excelで半角の文字を含むセルを...
-
2つのエクセルのデータを同じよ...
-
エクセル(勝手に太字になる)
-
エクセルの項目軸を左寄せにしたい
-
文字列に数字を含むセルを調べたい
-
エクセルの表から正の数、負の...
-
エクセルで文字が混じった数字...
-
EXCELで 一桁の数値を二桁に
-
VBAで文字列を数値に変換したい
-
Excel、市から登録している住所...
-
エクセルで一列おきに空白列を...
-
オートフィルターをかけ、#N/A...
-
「B列が日曜の場合」C列に/...
-
エクセル 時間帯の重複の有無
-
Excel 文字列を結合するときに...
-
エクセルの並び変えで、空白セ...
おすすめ情報