• 締切済み

ブランクのみ抽出させる

Win10 のOfice356 Excelは2016だと思います。 各列に 日付 ・バン詰めNo. ・車名・フレームNo.・納車先・到着予定日・...・...・ と列はO列まであります。 別BOOKに可能ならそれがいいですし、できないなら別シートでもいいのですが、 バン詰めが終わってない空欄状態の行を列を限定して一覧を作りたいです。 B列が空欄で、Bの他に欲しい列がA C D G J K N であるとします。 私が今行っている作業は、オートフィルターでバン詰めNo.の空欄を絞り込み、 上記記載の列以外の列を非表示状態にしてctrlタブで列を選択して別BOOKに コピペさせてます。 その方法以外に関数等使って何かないでしょうか? VBAは全くわかりません。 マクロもどこまでどのような作業が記録できるのかよくわかりません。

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.4

>VBAは全くわかりません。 VBAに挑戦するようなら、 ADODB(とSQL)を使ったコードを考えてみました。 もしよかったら、挑戦してみてください。 挑戦し、よくわからないようなら聞いてください。 >別BOOKに可能ならそれがいいですし、 >できないなら別シートでもいいのですが 示したコードは、後者です。 標準モジュールに配意します。 前者でということであれば、  cn.Open ThisWorkbook.FullName   '抽出元  'cn.Open ThisWorkbook.Path & "\抽出テスト.xlsx" を  'cn.Open ThisWorkbook.FullName   '抽出元  cn.Open ThisWorkbook.Path & "\抽出テスト.xlsx" としてみてください。 抽出テスト.xlsx が抽出元のブックです。 予め開いておく必要はありません。 抽出先は、マクロを格納したブックの Sheet2です。 Option Explicit Sub SearchSelMain()  '変数定義  Dim cn As Object  Dim rs As Object  Dim wkSQL As String    'ADODB定義  Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=NO;IMEX=1"  cn.Open ThisWorkbook.FullName   '抽出元  'cn.Open ThisWorkbook.Path & "\抽出テスト.xlsx"  'SQL文の組立  wkSQL = "" 'A B C D G J K N :1,2,3,4,7,10,11,14列目  wkSQL = wkSQL & "SELECT F1,F2,F3,F4,F7,F10,F11,F14" & vbCrLf  wkSQL = wkSQL & "FROM [Sheet1$A2:Z65000]" & vbCrLf  wkSQL = wkSQL & "WHERE " & vbCrLf  wkSQL = wkSQL & " F2 is Null " & vbCrLf    'SQL実行  rs.Open wkSQL, cn    '出力先クリアー、結果セット出力  With ThisWorkbook.Sheets("Sheet2")   .Rows("2:65000").ClearContents   .Cells(2, 1).CopyFromRecordset rs  End With  '後処理  rs.Close  Set rs = Nothing  cn.Close  Set cn = Nothing   End Sub

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.3

データリボンのフィルタを使います

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

マクロの記録を使ってみませんか? 別ブックへのコピーはちょっとコツが必要なので別シートへのコピーにして、最後にオ-トフィルタを解除する所までを記録してみてください。

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

質問ぶりからこの問題に対処するには、エクセルをわかった人に聞くしかないだろう。 特に、エクセル関数!で、条件を付けて、シートのデータを抜き出すのは、エクセルの課題の中で複雑な課題だ。 この質問コーナーは、文章と関数式によって回答せざるをえない、手段と方法論の制約があり、対話や講義を聞くに比べ、相当劣った手法だ。 何か良い回答や説明方法がないか、と期待する前に質問者が、時間をかけてエクセル(特にVBAやアクセスなどを)勉強するしかない。時間がない、金がない、人がないと言われても、回答者はどうしようもない問題。 仕事に関することのようだから、専門の人に頼むべきだ。社内には、あるいは委託先システム業者には、専門家もいるだろう。 ーー 説教するだけではと思って、好き嫌いはあろうが、1つの方法を挙げておく。Imogasi方式と自称。 ーー Sheet1 元データ これぐらい質問者が、文章でなく、テキスト画面か画像添付で例示すべきだ。想像で作っているので、欠点があるかも。 A1:F7 日付  パン詰めNO  車名  フレーム  納車先  判定サイン 2018/7/27 1  T 12 AA社 2018/7/27  N 23 AB社     1 2018/7/27    T 24 AC社     2 2018/7/27 3  I 23 AD社 2018/7/27    H 56 AB社      3 2018/7/27 6  T 12 AA社 判定サイン列のF2の式は =IF(B2="",MAX($F$1:F1)+1,"") 条件に該当する」行に上行から順に連番を振っている。 ーー Sheet2に行って 全列!全項目データを出す場合は A2に  =INDEX(Sheet1!$A$1:$F$10,MATCH(ROW()-1,Sheet1!$F$1:$F$10,0),COLUMN())と入れて、右列方向に式を複写。 A2行の式を下方向に式複写。 結果 Shee2に A1:G4 日付 パン詰めNO 車名 フレーム 納車先 条件該当と順番サイン 2018/7/27 0 N 23 AB社 1 2018/7/27 0 T 24 AC社 2 2018/7/27 0 H 56 AB社 3 第1行はSheet1から複写するか手で入力する。 A列は、日付なので、整数が出るが、日付に設定すること。 望みの列を選択するなら、式のCOLUMN()の部分を列番号数字で指定する。 複写は効果が出ないので、各列手動指定となり、行の複写だけが関数利用の効果を出せる。 Sheet3のA2  =INDEX(Sheet1!$A$1:$F$10,MATCH(ROW()-1,Sheet1!$F$1:$F$10,0),1) B2の式  =INDEX(Sheet1!$A$1:$F$10,MATCH(ROW()-1,Sheet1!$F$1:$F$10,0),3) C2の式 =INDEX(Sheet1!$A$1:$F$10,MATCH(ROW()-1,Sheet1!$F$1:$F$10,0),5) これでSheet3に出る列が選択されてたことが判る。