人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelの質問です。各列に点在する空白セルとデータのあるセルが混じったデータを1つの列に集約したいです。

今、C?H列、各列5万行ほど、空白セルと文字列が入ったデータがあります。
ただこのC?H列のうち、データのあるセルは各行1列のみになります。
例えばH列の4行目に文字列データがある場合、C?G列は空白セルですし。
C列の25行目にデータがあると、D?H列の25行目は空白セルになります。

この状況におきまして。
各列のデータのある行のデータを、移動させて、全部I列に集約したいのです。

効率的に行う関数やマクロ等がありましたら、お教えいただけますと幸いです。
よろしくお願い致します。

●質問者: moon-fondu
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● たか
●100ポイント

=C1&D1&E1&F1&G1&H1


moon-fonduさんのコメント
なるほどです、その手がありましたね!

2 ● a-kuma3
●1000ポイント ベストアンサー

5万行もあると計算式だと再計算でもっさりしそうなので、マクロを書いてみました。
以下のコードを標準モジュールに貼り付けて、シートを表示した状態で choice_ch サブルーチンを実行してください。

Sub choice_ch()
 first_col = 3  ' C列
 last_col = 8  ' H列
 dest_col = 26  ' Z列 : 集約先の列

 last_row = -1
 For c = first_col To last_col
 Row = Cells(Rows.Count, c).End(xlUp).Row
 If last_row < Row Then
 last_row = Row
 End If
 Next

 For r = 2 To last_row
 For c = first_col To last_col
 Set cell = Cells(r, c)
 If Not IsEmpty(cell) And cell.Value <> "" Then
 Cells(r, dest_col).Value = cell.Value
 Exit For
 End If
 DoEvents
 Next
 Next
End Sub

C列からH列の方向にセルを見て、最初に値が入っている列の値を Z列(指定がなかったので、仮に Z列としました)に入れます。
コピーしているのは値だけですが、もし背景色や罫線なども複写したいのであれば、18行目を以下のように変えてください。

 If Not IsEmpty(cell) And cell.Value <> "" Then
' Cells(r, dest_col).Value = cell.Value
 cell.Copy (Cells(r, dest_col))  ' ★ここ
 Exit For
 End If


計算式でやるなら、対象の範囲に式をコピーした後、その列を選択して、同じ列に「形式を選択して貼り付け」の「値」で上書きした方が良いでしょう。


moon-fonduさんのコメント
遅くなりましてすみません。 すごいです!一瞬の出来事でした…ありがとうございます!

3 ● kotaeru3
●100ポイント

たかさんの回答が、簡略でよいのかもしれませんが、
少し丁寧に書くと、I1に
=C1&D1&E1&F1&G1&H1
を入力して、コピーして、
一番最後の行に移動して、I列にカーソルを動かして、
シフトとコントロールを押しながら、上矢印キーを押して
必要なI列の範囲指定して、貼り付ける。

という流れで良いかと思います。

しばらく固まるかも知れませんが、待てば計算が終わります。

その後、I列をコピーして値を貼り付けすれば、以後の計算は無くなります。


moon-fonduさんのコメント
ありがとうございます、理解できました!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ