• ベストアンサー

Excelで複数の列の中の文字を一列に並べる!

Excelに関して質問です。 複数の列に入力されている文字を一つの列にまとめる方法が知りたいです。 その際、文字が入力されていない箇所は詰めて並べたいと思います。 範囲はB4~AD83の間です。 ただ、状況として範囲内の空白には書式(関数)が入っている状態です。 例  A   B   C     D   E 1文字1 空白 文字2  文字3  空白 2空白 文字4 文字5  空白   空白 F 文字1 文字2 文字3 文字4 文字5 何卒、ご教授よろしくお願いします。

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

  • ベストアンサー
  • msMike
  • ベストアンサー率20% (363/1775)
回答No.1

1.セル F1 に次式を入力して、此れを下方にズズーッとオート __フィル(→添付図左から2列目) __ =OFFSET(A$1,(ROW(A1)-1)/5,MOD(ROW(A1)-1,5)) 2.列F全体を選択 3.[コピー]→[値の貼り付け] 4.列F全体を選択 5.[ジャンプ]→[セル選択] 6.“定数”に目玉入れ、その下の“数値”以外のチェック外し 7.[OK]をツン(→添付図右から2列目) 8.[編集]→[削除]→“上方向にシフト”に目玉入れ 9.Enterキーを「エイヤッ!」と叩き付け!(→添付図右端)

dolphin0718
質問者

お礼

わかりやすい説明ありがとうございます。

その他の回答 (4)

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

>$A$1:$E$2⇒$B$4:$AD$83に変更してセルA1に式を埋め込みオートフィルでやってみたのですが、空白ができるだけでした。 回答No.2とNo.3の両方を満足する数式を改めて提示します。 A1=IFERROR(INDEX($B$4:$AD$83,INT(SMALL(INDEX(($B$4:$AD$83<>"")*(ROW($A$1:$AD$80)*100+COLUMN($A$1:$AC$80))+($B$4:$AD$83="")*10000,0,0),ROW())/100),MOD(SMALL(INDEX(($B$4:$AD$83<>"")*(ROW($A$1:$AC$80)*100+COLUMN($A$1:$AC$80))+($B$4:$AD$83="")*10000,0,0),ROW()),100)),"") この数式で試してください。 Excel 2007/2010/2013/2016で再現できるはずです。

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

下記はVBAで処理してみます。 質問者は関数で、でしかやる気がない、のかもしれないが(その場合は下記は無視してください)、他の読者、将来のこの質問のWEB照会での読者もあるのでコードを上げておく。 仕事などでエクセルを使うのなら、VBA習得は必須と思う。 ーー この質問は、エクセル表の「データの組換え」タイプの問題だが、関数では式が複雑になり、関数の中上級者でないと式の意味さえ分かりにくいものになる場合が多い。 各列のデータがE列(第5列)までと決まっているらしいので、やや易しくなっているかと思う。 下記VBAは行ごとデータ列数がバラバラでもOK。 実質のコード行は7-8行。 ーー コードに注釈を詳しく加えておいたので参考に。 例データ Sheet1に ーは空白セルです。OKWEBの画面上で、左詰めにならないようにあえてーを入れたもの。 省力化してセルのデータは1文字にしているが、長い文章や数値でも構わない 日付のセルがある場合はもう一細工いるが略。 a  b  c d  e  ー  f  g h  i   ー j  k l  ー  m 空白行 n  o  p  q  r  s ーーー コード 標準モジュールに下記をコピペ シート名の指定部分をを質問者の場合のシート名に修正する。 テスト以外(データ数が多いとき)では、MsgBoxの行は削除して実行してください。 ーー VBAコード内をどこでもよい、クリックしておいて、F5キーを押す(実行) Sub test01() Set sh1 = Worksheets("Sheet1") '元データのシート名 Sheet1 適宜変えること Set sh2 = Worksheets("Sheet2") '結果を出すシートのシート名 Sheet2 適宜変えること '-- lr = sh1.Range("A100000").End(xlUp).Row 'データの最終行を取得 MsgBox lr k = 1 '結果の最初行は第1行目とする '--各行の処理を繰り返す For i = 1 To lr rr = sh1.Range("XFD" & i).End(xlToLeft).Column 'その行のデータのある最右列を取得 If rr = 1 Then GoTo p1 '空白行ならスキップ MsgBox rr For j = 1 To rr 'その行の各列の処理を繰り返し If sh1.Cells(i, j) <> "" Then '空白セルならばスキップ sh2.Range("A" & k) = sh1.Cells(i, j) 'そのセルのデータをSheet2のA列へセット k = k + 1 '次は次行へセットする準備 End If Next j p1: Next i End Sub ーーー 結果 Sheet2 のA列に a b c d e f g h i j k l m n o p q r s p q r s

dolphin0718
質問者

お礼

非常に丁寧にありがとうございます。

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

回答No.2の数式の変更方法で次の部分は範囲の指定をシフトさせる必要があることを漏らしました。(処理対象は29列×80行とする) (ROW($A$1:$E$2)*100+COLUMN($A$1:$E$2))     ↓ (ROW($A$1:$AC$80)*100+COLUMN($A$1:$AC$80))

dolphin0718
質問者

お礼

つたない説明なのに相当詳しく解説してくださりありがとうございます。 $A$1:$E$2⇒$B$4:$AD$83に変更してセルA1に式を埋め込みオートフィルでやってみたのですが、空白ができるだけでした。 せっかく教えて頂けたのに自分の理解不足でできなくて申し訳ないです。 可能であれば、引き続きよろしくお願い致します。

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

>ただ、状況として範囲内の空白には書式(関数)が入っている状態です。 「書式(関数)」は「数式」の誤りではないでしょうか? 用語を誤ると処理方法を考え難くなります。 また、空白と提示されているセルは文字列の"空白"ですか?、それとも文字数が0の""でしょうか? 提示された模擬データのA1:E2の"空白"を""に置き換えてExcel 2013で検証してみました。 F1セルに次の数式を入力して下へオートフィルコピーすると貼付画像のようになります。 =IFERROR(INDEX($A$1:$E$2,SMALL(INDEX(($A$1:$E$2<>"")*(ROW($A$1:$E$2)*100+COLUMN($A$1:$E$2))+($A$1:$E$2="")*10000,0,0),ROW())/100,MOD(SMALL(INDEX(($A$1:$E$2<>"")*(ROW($A$1:$E$2)*100+COLUMN($A$1:$E$2))+($A$1:$E$2="")*10000,0,0),ROW()),100)),"") 実際のデータに合わせて数式を修正してみると良いでしょう。 >範囲はB4~AD83の間です。 その範囲では数式をA1セルから下へ設定しないと数式とデータ範囲が重なるため不都合となります。 また、数式中の$A$1:$E$2を$B$4:$AD$83に置き換える必要があります。

dolphin0718
質問者

お礼

ご丁寧にありがとうございました。

関連するQ&A

  • エクセルで複数の列から複数の文字列(数字)を選びたいです。

    エクセルで複数の列から複数の文字列(数字)を選びたいです。 A   B   C   D   E   F   G   H 1   12   1   4   5   8   6 2   36  7   2   5   6 3   55  3   4   88  1  3  8 5   87 上記のような表があったとき、C列からG列のいずれかに1、3、8のどれかが 含まれるとき、H列にB列の数字を入れたいのですが、どのようにすれば できるのでしょうか? この場合、A列の1,3,4段にそれぞれ12、55、88と入れたいということです。 よろしくおねがいいたします。

  • エクセルの複数行の文字列を…

    エクセルに箇条書きにされている文字列を一つのセルにまとめたいのですが簡単な方法はありますか? 状態と致しまして、1カテゴリ 1.A欄に1行の文字列 2.B欄に3行の文字列 3.C欄に5行の文字列 4.D欄に3行の文字列 5.E欄に空欄 6.F欄に3行の文字列 上記内容は例となりますのでこの限りではありません。 この状態でA~Fの欄を1行にしたいのですが? 罫線で区切られカテゴリは複数あります。 内容がばらばらなので行が固定していません。 簡単に出来る方法を教えて下さい。

  • エクセル 複数列選択して一列にソートできますか?

    エクセル 複数列選択して一列にソートできますか? sheet1 A1~G10 のセルに文字列(名前)がランダムに入力されているとします。空白もあります。このデータは他ファイルからコピーしたものとします。これをsheet2のA列にソートすることはできますか?

  • エクセルの複数条件関数

    エクセル関数の複数条件について初歩的な質問だと思うのですが、どうか関数式を教えていただけないでしょうか? IF関数でできるのではないか?と思ったのですが、うまくいかずうまくいく関数式を教えていただければ助かります。 ・AD列は作業担当者になりATSかPCTSDを選択できる(ここは既存で設定済み)<例>=IF(B21=1,VLOOKUP(Y21,作業担当!$A$2:$B$30,2,FALSE),0) ・AE列は分類コードで100/200/400のどれかが表示されるようになる(ここは設定済み)<例>=IF(B21=1,VLOOPLUP(J21,分類!$A$2:$B$8,2,FALSE),0) ・AF列はATS onlyとして<例>(AD21="ATS",AE21,"")と入力している。ここも設定済み。ATS only列はPCTSDであれば空白になるようにしている。 ・AG列はATS 100 to 500で以下のような条件式にしたいです。ここがうまくいっていません。AD列がATSでAE列が200であれば500、AD列がATSでAE列が100であれば300、AD列がPCTSDでAE列が100/200/400であれば空白にしたいです。 ・AG列の結果をもってAH列のファイナル分類コードに引き継ぎたいです。既に設定済みで<例>=IF(AG39="",AE39,AE39)としています。 AG列の条件を満たす関数式を教えていただけないでしょうか? よろしくお願いいたします。

  • Excelでの文字列とりだしについて

    Excel(version2013)について質問です。 ある文字列を検索範囲内で検索し、みつかった場合、 その文字列を返すようにしたいです、どのような関数を使えば宜しいでしょうか。 例えば下記A列に検索したいリスト(りんご、ばなな、ぶどう)があり、 検索したい範囲がD1~E5とします。 その場合、B列に関数を使った式を入れ、 りんご、ばなな、空文字、りんご、ぶどうと並ぶようにしたいです。 どのような関数を使えば宜しいでしょうか。       A         B      C      D        E 1  りんご   (式)        りんご  みかん 2  ばなな  (式)        ばなな すいか 3  ぶどう   (式)        すいか みかん 4              (式)        りんご  すいか      5              (式)        ぶどう  みかん                                      

  • (エクセル)表から1列の別表をつくりたい。

    表に入力されたものを1列に並び替えをしたいのです。(エクセル関数) エクセルの表から、セルに入力された情報を抜き出し、並び替えたいのですが、行き詰ってしまい質問させていただきます。 (やりたいこと) 添付資料のように、事業所ごとに購入した物品が日付ごとに入力されていきます。この表を一列で並び替えることを したいのですが、現状の表の形で1列に抜き出すやり方が思い浮かびません。ひとつずつリンクを設定していけばいいですが、 それですと、空白のセルができてしまうこともあり、空白を消すためにフィルタをやらなくてはいけず、なんとか関数でどうにかできないと質問させていただきました(つまり空白のセルは飛ばし、隙間のない1列の表に変換したいです)。 (試したこと) (1)vlookup関数を使うために、日付の横に検索列を作ってもみましたが、同じ行に複数の抜き出すべくものがあると、 if関数のネストをいれるにも「if(c5="","",vlookup(v5,b5:r10,2,fasle)」みたくやってみましたが、c5までは取り出せても、 d5,e5,f5・・・と右にずらしていく関数式が思い当たりません。 (2)種類、数量データ入力されている全てのセルの横に(1.2.3.4.5.6.7.8.9.・・・)と数字をいれて検索列をつくり、vlookupとmatch関数の 組み合わせも試しましたが、vlookup関数の性質上、複数列に検索値(「vlookup(検索値,範囲,列番号,検索の型)」)が存在しているとこれも出来ず。 説明が不十分な点もあると思いますが、よろしくお願いいたします。もし、VBAでなければ難しいとのことでしたら、どのようなVBAを組めばいいかもお願いいたします。

  • Excel 複数セルから文字列の検索、表示

    エクセル初心者です。 過去のものを探しては見ましたが、うまくキーワードを見つけられなかったので 質問させてください。 リストで次のようなものがあるとします。  A   B  C  D  E  F  G 1○ 12 45 - 98 - 2■ - - 12 - 06 3◇ 35 12 01 99 - 4× - - - - 12 5☆ 08 61 20 12 - このリストで各行ごとにB~F列のセルにある「1」で始まる文字列を検索して 該当する文字列をG列に表示する方法はありますでしょうか? 関数とかVBAについては???なので、わかり易くお教え頂けると助かります。 よろしくお願いいたします。

  • 複数列を一列にする方法

    Excelで複数列に渡るデータを1列にまとめたいのですが、カット&ペースト以外によい方法はありませんでしょうか。 例えば表にあるセルA1-A10、B1-B10、C1-C10、D1-D10、E1-E10のデータを F列のF1から下へ一列に並べるといった感じです。 A1-A10→F1-F10 B1-B10→F11-F20 C1-C10→F21-F30 D1-D10→F31-F40 E1-E10→F41-F50 よろしくお願いします。

  • エクセルで一列おきに空白列を入れたい

    ABCDEF・・・ の表を A B C D E F ・・・ のように一列空白の列を入れたいのですがどうすればいいのでしょうか。

  • 複数列の中の文字列の検索、個数抽出

    どなたかお力をお貸しください。。 エクセル2003を使用しています。    A列 B  C  D 1  あ  う     あ 2  い  お  か  か 3  う        う 4  え     き  く 5  お  い  う  け Dの文字列のなかでA~C列の中に重複している文字が何個あるかを出したいです。 この場合D列は「あ、か、う、く、け」なので、A~C列にある「あ、か、う」が重複しているので、3個と出したいです。 もしくは重複していない「く、け」で2個と出したいです。 MATCH関数を使うと出来そうなのですが、MATCH関数だと配列の概念がなさそうなので、どうしたものかと。 条件として、 ・一つのセルで関数を使用して出す。 ・マクロ、計算用のセルはできたら使用しない。 ・空白セルもあり、文字列の完全一致のみ個数としてカウント。 ・列の数はだんだん増えてくるので、列数は増えても大丈夫なやり方の方がいいです。 COUNTIFで重複個数を出すと、「う」が複数回出てくるので、重複の個数が増えてしまい困っています。 もしかしたら不可能かもしれませんが、どなたかお知恵をお貸しください。 よろしくお願いいたします。

専門家に質問してみよう