- ベストアンサー
エクセル 列 左詰め
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
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)
シート画面で、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)
- bunjii
- ベストアンサー率43% (3589/8249)
回答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)
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)
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)
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
- mt2015
- ベストアンサー率49% (258/524)
表中の空白に見えるセルには=AE28の様な式が入っているとの事ですが、どうやって空白に見せていますか? やり方はいくつかありますので、あなたがどの方法を使っているのかが解らないと対応できません。
補足
回答ありがとうございます。 ~空白の見せ方について~ 添付画像は内容を明確にするため簡潔にしていますが、 実際は、A1にあたる部分には、「=BD28」となっていて、BD28には「=IF(AY28<>"",AY28,"")」となっているので、表記上は「””」という認識で空白に見えていると思います。
補足
すみません!! VBAが不勉強なもので、、、 これをコード表に貼り付けたあとにどうすればいいのでしょうか?? あと、、関数で処理するのはむずかしいのでしょうか??