• ベストアンサー

エクセル 列 左詰め

よろしくお願いします。 windows excel2010です。 添付画像sheet1のようにまとまった結果を、別シートで左詰にしたいです。 sheet1の空白に見える部分は、数式が入っています。 添付画像は3行ですが、アンケート形式で行数が随時追加されるので、 フィルタで削除という方法ではなく、数式などで対応できるようにしたいと考えています。 ご回答よろしくお願いいたします。

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

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

ANo.2です。 > VBAが不勉強なもので、、、 > これをコード表に貼り付けたあとにどうすればいいのでしょうか?? 標準モジュールに張り付けた後、リボンの開発→マクロ→Sampleと選択するとマクロが動きます。 リボンに開発が無い場合はExcelのオプションから追加します。 > あと、、関数で処理するのはむずかしいのでしょうか?? 関数でもやってみました。 作業用にSheet3も使います。 Sheet3  A2に↓の式を入れ、下方向にコピー  =IF(Sheet1!A2<>"",1,0)  B2に↓の式を入れ、右はU列、下はA2の式をコピーしたのと同じ行までコピーします。  =IF(Sheet1!C2<>"",MAX($A2:B2)+1,"") Sheet2  A2に↓の式を入れ、下方向にコピー  =IF(Sheet3!A2=1,Sheet1!A2,"")  B2に↓の式を入れ、右はU列、下はA2の式をコピーしたのと同じ行までコピーします。  =IFERROR(OFFSET(Sheet1!$A2,0,MATCH(COLUMN(),Sheet3!2:2,0)-1),"") #図を添付しましたが、ちょっと見づらいかもしれません。

その他の回答 (7)

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

シート画面で、F11を押して、VBE画面となるので、挿入ー標準モジュールを選択する。その標準モジュールの白紙画面に Sub test03() For j = 1 To 2 Set r = Range(j & ":" & j) k = 1 Dim d(1000) As Variant For Each cl In r 'MsgBox cl If cl <> "" Then d(k) = cl k = k + 1 End If Next Range(j + 15 & ":" & j + 15) = d Erase d Next j End Sub をコピーして、張り付けて、下記を自分の場合に合わせて修正。 (1)データ部を示す For j = 1 To 2の 2をデータ行数に修正(半角)。このままだと2行分を対象にする。 (2)結果をアウトプットする Range(j + 15 & ":" & j + 15) = d の15を「何行下に出すかの数字」に変える。今のままだと第15行以下に 結果が出る。 ーー 実行(F5キーを押しても良い)。

  • msMike
  • ベストアンサー率20% (364/1804)
回答No.7

添付図参照 Sheet2!B2: =IFERROR(INDEX(Sheet1!$A2:$V2,SMALL(IF(Sheet1!$B2:$V2<>"",COLUMN($B2:$V2)),COLUMN(A2))),"") 【お断り】上式は必ず配列数式として入力のこと

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.6

回答No.5の数式に誤りがありました。 Sheet2!B2=INDEX(Sheet1!2:2,SMALL(INDEX((Sheet1!2:2<>"")*COLUMN(2:2)+(2:2="")*(MAX(INDEX((Sheet1!2:2<>"")*COLUMN(2:2),0))+1),0),COLUMN()))&""    ↓ 上記の(2:2="")を(Sheet1!2:2="")に訂正し下記の数式にします。 Shet2!B2=INDEX(Sheet1!2:2,SMALL(INDEX((Sheet1!2:2<>"")*COLUMN(2:2)+(Sheet1!2:2="")*(MAX(INDEX((Sheet1!2:2<>"")*COLUMN(2:2),0))+1),0),COLUMN()))&""

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.5

Sheet1とSheet2の行番号は同じですよね? Sheet1!A2は”A”でSheet2!A2も"A" Sheet1!A3は”B”でSheet2!A3も"B" という関係でれば次の数式を試してください。 Sheet2!B2=INDEX(Sheet1!2:2,SMALL(INDEX((Sheet1!2:2<>"")*COLUMN(2:2)+(2:2="")*(MAX(INDEX((Sheet1!2:2<>"")*COLUMN(2:2),0))+1),0),COLUMN()))&"" Sheet2!B2を右と下へ必要数コピーすれば目的通りになると思います。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

Sheet2のB9セルに =IFERROR(INDEX(Sheet1!2:2,SMALL(IF(Sheet1!2:2<>"",COLUMN(Sheet1!2:2)),COLUMN()-1)),"") と入力して[Ctrl]+[Shift]+[Enter]で確定 後は必要な分だけコピーしてね

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

ANo.2です。 補足ありがとうございます。 シンプルにVBAでやってみました。 Sub Sample()   sht1 = "Sheet1"   sht2 = "Sheet2"   Sheets(sht2).Cells.ClearContents    nRow = 2   Do While (Sheets(sht1).Cells(nRow, 1) <> "")     nCol2 = 1     For nCol1 = 1 To Sheets(sht1).Cells(nRow, Columns.Count).End(xlToLeft).Column       sDat = Sheets(sht1).Cells(nRow, nCol1).Text       If sDat <> "" Then         Sheets(sht2).Cells(nRow, nCol2) = sDat         nCol2 = nCol2 + 1       End If     Next nCol1     nRow = nRow + 1   Loop End Sub

kuribooo
質問者

補足

すみません!! VBAが不勉強なもので、、、 これをコード表に貼り付けたあとにどうすればいいのでしょうか?? あと、、関数で処理するのはむずかしいのでしょうか??

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

表中の空白に見えるセルには=AE28の様な式が入っているとの事ですが、どうやって空白に見せていますか? やり方はいくつかありますので、あなたがどの方法を使っているのかが解らないと対応できません。

kuribooo
質問者

補足

回答ありがとうございます。 ~空白の見せ方について~ 添付画像は内容を明確にするため簡潔にしていますが、 実際は、A1にあたる部分には、「=BD28」となっていて、BD28には「=IF(AY28<>"",AY28,"")」となっているので、表記上は「””」という認識で空白に見えていると思います。

関連するQ&A