![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
やりたいことは以下の通りです。
1.A列を今の行から下に見ていき、最初の空白を見つける。(以下の例で今の行を1行目とした場合、A1から見ていって4行目のA4セルが空白)
2.B列について、今の行から1で見つけた行の1つ前の行を見ていき、値が-または空白のセルがあれば0、そうではなければ1を返す。(以下の例だと、1で見つけた行の1つ前の行は3行目。B1~B3を見て、空白があるので0を返す)
以下のC1セルに何らかの計算式を入れて、それを実現する(0を返す)ようにしたいです。(作業スペース使用不可)
A B
- -
A D
B
C F
# matchとかoffsetとか入れて試行錯誤していますがややこしくて頭が混乱しています。。
お知恵を拝借できないでしょうか。よろしくおねがいします。
No.4ベストアンサー
- 回答日時:
日本語というのは本当に難しいものです。
当初のご質問者の説明は
>A列を今の行から下に見ていき、最初の空白を見つける・・・
>B列について、今の行から1で見つけた行の1つ前の行「を」見ていき・・・
となっており「A列が空白である行の一つ前の行のB列の値を見よ」だと理解しました。
しかし、前回回答のお礼に書かれたコメントを見ると
>A1を基準として下に見ていってA4で最初に空白を見つける・・・
>B列を1行目から3行目「まで」見ていくと、B2に空白があるので0を返すようにしたい・・・
ということで、ご質問者の真意はB列の一つのセルを見るのではなく、「自分の列からA列にある次の空白の行の直前までの『範囲』でB列の値の中に空白または「-」があるか」ということのようです。
>以下のケースでいただいた内容を全て試してみましたが、すべて1が返ってきます。
上記のとおり、前回回答はニーズに合致しない条件で数式を組立てたものということになり、望んだ結果は表示されません。
そこで、この新しい解釈で数式を組み立て直してみました。
ご質問者は明確に説明しておられませんが、ここでは、B列の今の行のセルが空白または「-」だった場合、その行A列の値が空白でもC列のセルは「0」になるという前提です。
もう少し、簡単な数式があるかもしれませんが、とりあえず、ご質問者が望む結果が表示されることを優先しました。
C1に以下の数式を記述し、下方向にコピーすればご希望の結果が表示されると思います。
なお、前回回答とは異なり、空白または「-」があるときのみ0とし、それ以外は文字、数値(マイナス値を含む)もエラーとしないルールです。
=1-AND(COUNTIF(OFFSET($B1,0,0,AGGREGATE(15,6,ROW(A:A)/(A:A=""),COUNTIF($A$1:A1,"")+1)-ROW(B1),1),"")+COUNTIF(OFFSET($B1,0,0,AGGREGATE(15,6,ROW(A:A)/(A:A=""),COUNTIF($A$1:A1,"")+1)-ROW(B1),1),"-"))
いただいた式で実現できました。
そのままだと実用に耐えられないくらい重くなってしまったのですが、A:Aのところを実際の表の最初から終わりまでとすることで性能的にも問題ない形にできました。
何度もありがとうございました。
No.3
- 回答日時:
No2です。
No.1さんからの修正と修正の意味を判り易くするため、空白でなくハイフンでもないという条件を()でくくってありますが、数式としては()は不要です。
従って、以下のようにしても数式としては使用できます。
=(OFFSET(B$1,AGGREGATE(15,6,ROW(A1:A999)/(A1:A999=""),1)-2,0)<>"")*(OFFSET(B$1,AGGREGATE(15,6,ROW(A1:A999)/(A1:A999=""),1)-2,0)<>"-")*(OFFSET(B$1,AGGREGATE(15,6,ROW(A1:A999)/(A1:A999=""),1)-2,0)>=0)
確認に時間がかかってしまいすみません。
いろいろとありがとうございます。
以下のケースでいただいた内容を全て試してみましたが、すべて1が返ってきます。
このケースの場合、A1を基準として下に見ていってA4(4行目)で最初に空白を見つける。B列を1行目から3行目(4-1行目)まで(B1:B3)見ていくと、B2に空白があるので0を返すようにしたいんです。
A B
---
A D
B
C F
いただいた式についてはまだ内容の理解が追いついていないので、自分でアレンジできるよう解読をがんばってみます!
No.2
- 回答日時:
基本的にNo.1さんの回答を支持しますが、大変失礼とは存じますが、条件がひとつもれている気がします。
ご質問者は、>値が-または空白のセルがあれば0
とおっしゃっておられますので、空白だけでなく「-」ハイフンもチェックしないといけないのではないかと思います。
その条件を追加すると、
=((OFFSET(B$1,AGGREGATE(15,6,ROW(A1:A999)/(A1:A999=""),1)-2,0)<>"")*(OFFSET(B$1,AGGREGATE(15,6,ROW(A1:A999)/(A1:A999=""),1)-2,0)<>"-"))*(OFFSET(B$1,AGGREGATE(15,6,ROW(A1:A999)/(A1:A999=""),1)-2,0)>=0)
という数式になるのではないかと思います。
この数式は文字列にも対応しますが、数値がマイナス数値の場合は0として扱われます。
ただし、ひとつ暗黙の了解になっていて確認できていないことがあります。
>A列を今の行から下に見ていき、最初の空白を見つける。
という条件の意味は、A列の今の行が空白の場合、
(1)今の行そのものが、ご質問者の条件に合致した行
(2)今の行は含まず、今の行より下にある最初の空白行がご質問者の条件に合致した行
上記の(1)(2)のいずれでしょうか?
前述の数式は(1)の想定で作成してあります。
(2)だとすると以下のようになります。
=((OFFSET(B$1,AGGREGATE(15,6,ROW(A2:A999)/(A2:A999=""),1)-2,0)<>"")*(OFFSET(B$1,AGGREGATE(15,6,ROW(A2:A999)/(A2:A999=""),1)-2,0)<>"-"))*(OFFSET(B$1,AGGREGATE(15,6,ROW(A2:A999)/(A2:A999=""),1)-2,0)>=0)
No.1
- 回答日時:
こんにちは
よくわからないところだらけなので勝手に解釈しました。
ご提示のサンプルでは、A1セルの値がAでA2がB・・・
A、B、C、D、F は必ず数値であるものとして。
>値が-または空白のセルがあれば
「値が-」とは「負の数値」と同義と解釈。
としてよいのなら、C1セルに
=(OFFSET(B$1,AGGREGATE(15,6,ROW(A1:A999)/(A1:A999=""),1)-2,0)<>"")*(OFFSET(B$1,AGGREGATE(15,6,ROW(A1:A999)/(A1:A999=""),1)-2,0)>=0)
で、いかがでしょうか?
※ 当たるも八卦なので、外していたらスルーして下さい。
早速ありがとうございます。
色々分かりづらいところが多くてすみません。
各値 (A、B、C、D、F) は文字列、数値のいずれもありえます。
ハイフンは「-」(文字列)です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) セルに抜けた番号の代わりに空白を挿入する 4 2023/04/10 20:29
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのクイックアクセスツ...
-
エクセルでCtrl+Tでテーブルの...
-
DATE関数で現在の年齢を出した...
-
Excelで表を作ったところに文字...
-
エクセルのクイックアクセスツ...
-
在庫管理表に使うエクセルの関...
-
ユーザー定義関数をアドイン登...
-
職場の人から聞かれており、こ...
-
REGEXREPLACE関数について、
-
エクセルでバーコード作成し使...
-
下記マクロでMsgBox "空白です...
-
Excel関数-文字列で自動作成さ...
-
エクセルで表
-
【マクロ】for next構文について
-
エクセルの関数について教えて...
-
Excelデータをコピペして、ペー...
-
エクセルで特定の範囲内から小...
-
PDFの請求明細をエクセルにしたい
-
Excelで50個のセルに同じ文字を...
-
エクセルで会社の従業員のデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA、別ブックへ転記す...
-
エクセルでの作業計算方法について
-
時間によってファイル名が変わ...
-
【関数】適切な文字数の数字を...
-
Excelについて教えてください
-
エクセル初心者です 関数の入れ...
-
【マクロ】ファイル名の変更に...
-
UNIQUE関数が使えないバージョ...
-
エクセルの計算
-
【関数】先頭だけにある、半角...
-
Excelで、決まった行を繰り返し...
-
Excelでセルの値が同じか...
-
LOOKUP関数を使えばいいのでし...
-
Excel
-
はがきについて。
-
エクセルの条件付き書式につい...
-
エクセルのデーターが2か月前の...
-
エクセル②
-
エクセルで「-0.0」と表示さ...
-
Microsoft1Officeの互換ソフト...
おすすめ情報