- ベストアンサー
excel 関数 表示されているセルのみ抜き出す
関数で表示されているセルだけ抜き出しを行いたいのですが、 (フィルタではなく) A B C D 1 2 2 2 4 3 5 4 4 8 5 5 6 7 8 8 10 11 A列のように、とびとびになっているものを、B列に表示されているものだけ抜き出したいのですが、 どうすればよろしいでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
C1に =IF(ROW(B1)>COUNTA(B:B),"",INDEX(A:A,SMALL(IF($B$1:$B$100<>"",ROW($B$1:$B$100)),ROW(B1)))) と式を記入してコントロールキーとシフトキーを押しながらEnterで入力し,下向けにコピーします。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
回答が出ているが、VBAに夜質問ですか? 操作でないのはわかるが、VBAかんすうは経験なく、関数での会報ではないのか。 関数での抜き出し問題は、式が複雑になって難しいのだ。初心者では絶対思いつかない式になっている。 ーー >B列に表示されているものだけ抜き出・・ は判りにくい。結果がどうなれば良いのか例でも挙げるべきだ。手を抜かないこと。他人にはわかりにくいのだ。 ーーー 推測で回答を挙げておく。 例データ Sheet1 A列 B列 C列 2 <-第2行目から 2 4 1 5 4 8 2 5 8 C2の式は =IF(AND(A2<>"",B2<>""),MAX($C$1:C1)+1,"") 下方向に式を複写。 結果 上記C列。条件に合う行に上行から連番をフッタ(ここは作業列) ーー Sheet2 のA2に A2に =INDEX(Sheet1!$A$1:$B$10,MATCH(ROW()-1,Sheet1!$C$1:$C$10,0),COLUMN()) B2に横方向に式複写 A2:B2の式をあって方向に式複写。 結果 Sheet2 2 4 4 8 #N/A #N/A imogas方式。作業列を使うという点があるが。i Googleで「imogasi方式」で照会すれば、複雑な関数式での回答が出ているのが判る。 ーーー VBAでやれば上の行から条件に合うか判定して条件に合うものをSheet2にでも貼り付ければ仕舞いで、難しい理屈を考えなくて済む。 ーー 関数の超熟練者でなければ、出来ればエクセルではフィルタ(操作)でやるのが、予定されたやり方と思う。
- mar00
- ベストアンサー率36% (158/430)
どこに抜き出したいのかが書かれていなかったので 別のシートに抜き出すようにしています。(Sheet1からSheet2へ) Sub Macro1() Set WS1 = Sheets("Sheet1") 'ここを変更 Set WS2 = Sheets("Sheet2") 'ここを変更 WS2.Cells.ClearContents COUNTER = 0 For INP = 1 To WS1.Cells(Rows.Count, 1).End(xlUp).Row If WS1.Cells(INP, 2) <> "" Then WS1.Rows(INP).Copy COUNTER = COUNTER + 1 WS2.Rows(COUNTER).PasteSpecial Paste:=xlPasteValues End If Next INP Application.CutCopyMode = False End Sub シート名は適宜変更して下さい。 データが増え続けるのであれは問題ないのですが、減る事がある場合 前のデータが残ってしまうので WS2.Cells.ClearContentsでSheet2の内容を消去しています。 不要であれば削除してください。
- kmetu
- ベストアンサー率41% (562/1346)
4と8ですか? どこに抜き出すのですか? A列がとびとびなのと今回の質問内容と何か関係があるのですか? A列の中からB列にある4と8に一致したものを抜き出す?? その場合の解答は4と8だからA列から抜き出すもなにもB列見るだけで分かるし… 手を抜かずに、ちゃんと具体的に結果がこうなりたいとか書いてみたらいかがでしょう。
お礼
こちらの式でできました。 ありがとうございました。