• ベストアンサー

エクセル 列 左詰め

よろしくお願いします。 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/17068)
回答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% (363/1775)
回答No.7

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

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答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/8248)
回答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

  • 入力列のみを抽出

    宜しくお願いします。 winndows エクセル2010 添付の画像のように、各行に入力されたセルのみ別シートに抽出して、その列に対応したタイトル(ABC~)が反映されるようにしたいです。 セルに入力される数字は、1でも2でも構わず、あたまのABCが反映される形にしたいです。 ※添付の画像は3行ですが、アンケート形式で行が随時増えていく形で、それに応じて別シートにリンクしていくようにしたいと思っています。 なのでマクロではなく数式で完結できればと考えています。 宜しくお願い致します。

  • EXCELで番号を付けたい

    SHEET1のD2からデータのある行までを別のシートに1から番号をつけていきたいのですが。 SHEET1 D 1 名称 2 ○○予備校 3 □□予備校 . . 32 △△予備校 SHEET2 Q 1 空白 2 1 3 2 . . 32 31 関数を使えばできるのですが、人によって行数が違うのでD65536まで数式を入力しなければなりません。できるだけファイルサイズを小さくしたいのでVBAを使ってできないでしょうか? また既にVBAが組まれているのでそこに追加する形になりますが、既存のVBAには影響はないでしょうか?

  • Excelで奇数行を削除

    題名通り、奇数行を一括に削除する方法をご存じの方はご教授下さい。 ○○┌────┬────┬─────┬── 1行 │(空白)│文字列 │(空白) │ 2行 │ 文字列 │文字列 │ 数式 │ ○○└────┴────┴─────┴── 3行 │(空白)│文字列 │(空白) │ 4行 │ 文字列 │文字列 │ 数式 │ ○○└────┴────┴─────┴── この形式が数段、数シートに渡ってあります。 ○○┌────┬────┬─────┬── 1行 │ 文字列 │文字列 │ 数式 │ ○○└────┴────┴─────┴── 2行 │ 文字列 │文字列 │ 数式 │ ○○└────┴────┴─────┴── 上記のように2行を1行にしたいのですが、一括でできるのでしょうか。 よろしくお願いします。

  • エクセルで数式をコピーするとき

    Sheet1に入力したものが、Sheet2の指定したセルに自動的に入るようにしたいのですが、量が多いため、入れた数式をコピーするときにわからないことがあります。 Sheet1の、 A3、B3、C3、D3・・・に入力した数字を Sheet2の、 B2、B3、C2、C3・・・に勝手に入ってほしいのです。 Sheet2のB2に、=Sheet1!A3 Sheet2のB3に、=Sheet1!B3 と数式を入れれば反映されるのはわかります。 でも、数式を一つずつ入れていくのはとても大変なので、コピーペーストしたいのですが、 Sheet2のB4には、Sheet1のA4の数字をいれたいのに、エクセル側のかしこい機能なのか、 Sheet1のA5となってしまいますよね。 上記のような規則性で何百行も作っていかないといけないので、どうしたものかと思って困っております。 とても説明が下手でわかりにくいと思いますが、伝わりますでしょうか? 画像を添付しているので、このような形式で左のデータを右のような形式のものに反映させたいです。 やり方を教えて頂けるとても助かります。 宜しくお願いします。

  • エクセルで数行おきにデータを抽出

    エクセルシートで、あるデータ膨大にを出しますよね。 それで、たとえば、三行ごと、四行ごととかであるデータを右の行もしくは左行に抜き出す操作をするにはどうしたらいいですか? 今は、フィルタと可視フィルタを駆使してやっているのですが、一発でバンと出すような方法があると思って・・・数式とかでありそうだなって思って。 教えてください。、

  • Excel でのデータのマージ

    ◆シートA 下記の情報が載っています。 行数 名前 性別 好きな食べ物 1行目 太郎 男 (空白) 2行目 桜子 女 (空白) 3行目 次郎 男 (空白) 4行目 三郎 男 (空白) 5行目 菊子 女 (空白) 6行目 梅子 女 (空白) (以下略) で、別のシートには、下記のような情報が載っています。 ◆シートB 別のシートで、下記のような情報があります。 行数 名前 性別 好きな食べ物 1行目 桜子 女 マシュマロ 2行目 菊子 女 チョコレート 3行目 梅子 女 キャンディー (以下略) このシートに出てくるのは、女性だけですが、 出てくる人の順序は、シートAと同じ順序です。 /***********************************************/ ◆質問◆マージをするにはどうすればよいでしょうか? シートAで、性別女性でフィルターを掛けると 名前 性別 好きな食べ物 桜子 女 (空白) 菊子 女 (空白) 梅子 女 (空白) となるので、シートBの「好きな食べ物」の列をコピーして、 シートAに貼り付けたら、全然変な風になってしまいました。 下記のようになってしまいました。 1行目 太郎 男 マシュマロ 2行目 桜子 女 チョコレート 3行目 次郎 男 キャンディー 4行目 三郎 男 (空白) 5行目 菊子 女 (空白) 6行目 梅子 女 (空白) (以下略) /***********************************************/ フィルターされている行にだけ、データを貼り付けたいのですが、 どのようにして、マージをすれば良いのでしょうか?

  • VBAで文字列を抜き出す

    添付画像左のデータベースを基にシートを追加して、そのシートに添付画像右のような結果をVBAで求めたいです。 ご教授宜しくお願い致します。

  • Excelのデータ処理の方法

    exelのデータ処理で困っています。どなたかお助けいただけないでしょうか。よろしくお願いします。 以下のよう二個飛ばしでセルに数字が入っているものを空欄だけを削除し、上に詰めていきたいのですが、データの行数が多すぎて手動で削除していたのでは時間がかかりすぎてしまいます。 1 22.8 2 3 4 24.6 5 6 7 21.2 8 9 ・ ・ ・ 57000 全部のセルを選択して「フィルタ」→「オートフィルタ」→「空欄以外のセル」という方法では、空欄部分が隠されるだけで削除はされません。 上記フィルターをかけて別のシートに「形式を選択して貼り付け」→「空白のセルを無視する」、として貼り付けても結局空欄が復活してしまいます。何かよい方法はありませんでしょうか? 何卒よろしくお願いします。

  • Excelで表現すると、どのような関数になりますか?

    ある数式をExcelで関数化したいのです。 よろしくお願い致します。 シートを2つ使用しており、【Sheet2】は【Sheet1】の値を参照しています。 【Sheet2】参照⇒【Sheet1】 このとき、【sheet2】が参照しているセルは 【Sheet2】1行目:=Sheet1!H4 【Sheet2】2行目:=Sheet1!H35 【Sheet2】3行目:=Sheet1!H66 と、行数が増える毎に「H列」の「行数」が"31"ずつ増加しております。 一般の数式で表現すると、xを【Sheet2】の行数として、  Sheet1!H{4+31*(x-1)} となります。 これをExcelで表現すると、どういった関数になりますか? 識者の方、ご教示よろしくお願い致します。

  • Excelの数式について

    添付画像のようなExcelの表であ、い、うの合計を計算する数式はわかるのですが、あ、い、うが追加されても合計の数式に反映させる数式がわかりません。 反転させたブロックを追加しても、あ、い、うの合計をA、B、Cに反映させる数式はあるのでしょうか? よろしくお願いします。 (Excel2003です。)

専門家に質問してみよう