• ベストアンサー

エクセル教えて下さい。

はじめまして こちらの写真はsheet1になります。 H列の”-” 行のABCH列を自動的に、他のsheetに移す方法を教えて下さい。 (コピー&ペーストはしないで) 方法としては何でも良いです。 後、行の件数をカウントしてくれる機能もあれば教えて下さい。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

こんばんは! 関数での方法はすでに回答されていますので、VBAでの一例です。 Sheet1のデータをSheet2に表示するようにしてみました。 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i As Long Dim ws As Worksheet Set ws = Worksheets(2) ws.Cells.ClearContents Application.ScreenUpdating = False With ws.Cells(1, 1) .Value = Cells(3, 1) .Offset(, 1) = Cells(3, 2) .Offset(, 2) = Cells(3, 3) .Offset(, 3) = Cells(3, 8) End With ws.Rows(1).HorizontalAlignment = xlCenter For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 8) = "-" Then With ws.Cells(Rows.Count, 1).End(xlUp).Offset(1) .Value = Cells(i, 1) .Offset(, 1) = Cells(i, 2) .Offset(, 2) = Cells(i, 3) .Offset(, 3) = Cells(i, 8) End With End If Next i ws.Columns.AutoFit Application.ScreenUpdating = True i = ws.Cells(Rows.Count, 1).End(xlUp).Row MsgBox "データ数は、" & i - 1 & "件です。" End Sub 'この行まで ※ Sheet1のデータ変更があるたびにマクロを実行してください。 参考になれば良いのですが・・・m(_ _)m

その他の回答 (4)

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

I列が空き列とする。 I2に=IF(H2="-",MAX($I$1:I1)+1,"") 下方向に式を複写。 H列がーの行に上から連番を降る。 例データ Sheet1 a1 b1 c1 d1 e1 f1 - 1 a2 b2 c2 d2 e2 f2 - 2 a3 b3 c3 d3 e3 f3 a4 b4 c4 d4 e4 f4 - 3 a5 b5 c5 d5 e5 f5 a6 b6 c6 d6 e6 f6 - 4 ーー Sheet2 のA2に  =INDEX(Sheet1!$A$1:$F$100,MATCH(ROW()-1,Sheet1!$I$1:$I$100,0),COLUMN()) ト入れてC列まで式を複写 下方向に式を式を複写 結果 a1 b1 c1 a2 b2 c2 a4 b4 c4 a6 b6 c6 H列はーなので略 imogasi方式(Googleでimogasi方式で照会すれば、色んなケースに使える)。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

>H列の”-” 行のABCH列を自動的に、他のsheetに移す 1行目はタイトル行です シート2のA2に =INDEX(Sheet1!A:A,SMALL(IF(Sheet1!$H$1:$H$999="-",ROW(A$1:A$999),9999),ROW(A1)))&"" と記入し,コントロールキーとシフトキーを押しながら(<必ず)Enterで入力し,B2,C2にコピー,下向けにコピー。 必要なH列のデータは全て「-」ですから,シート1からわざわざ参照する必要はありません。 もしそれでも「-」を並べたいなら D2に =IF(A2="","","-") 以下コピー と並べておきます。 >件数 シート1のH列に「-」が記入されている行数ですから, =COUNTIF(Sheet1!H:H,"-") が件数になります。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

行の件数が抜けていましたが、シート1のG列にはーのある件数が表示されることにもなります。 あるいは次の関数で表示できますね。 =MAX(Sheet1!$Z:$Z)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

データが多くなっても計算に負担を掛けない方法は作業列を作って対応することです。 例えばシート1のZ4セルには次の式を入力して下方にオートフィルドラッグします。 =IF(H4="-",MAX(Z$3:Z3)+1,"") シート2にお望みの表を表示させるとして1行目には項目名が有るとしてA2セルには次の式を入力して右横方向に(D2セルまで)オートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>MAX(Sheet1!$Z:$Z),"",INDEX(Sheet1!$A:$H,MATCH(ROW(A1),Sheet1!$Z:$Z,0),IF(COLUMN(A1)<=3,COLUMN(A1),8)))

関連するQ&A

専門家に質問してみよう