• ベストアンサー

[エクセル] 表からデータを取り出して、一列にならべる方法はないでしょうか。

仕事でエクセルを使い始めて2~3年くらいで、関数が少し使えるようになった初心者です。どこにいくつ数字が入っているか一定していない表から、数字が入っているセルだけを左上から右下へ順番に抽出して、一列にして表示する方法は無いでしょうか。 現在、目で表を確認しながら手作業で写しています。関数か何かで自動的にする方法があれば教えてください。よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。#3のWendy02です。 数式の意味が分かりますでしょうか? =PickupFig(Rng,index) Pickup(範囲,インデックス) 範囲は、お分かりになるかと思いますが、 Indexを入れなくてはなりません。つまり何番目ということです。 それを、Row(A1)関数で入れます。(下記参照) そうすると、Row(A1)は、1 フィルハンドルで、下にドラッグしたら、インデックスは、1,2,3,4,5,... と代入されていきますから、数字が出てきます。 それを入れないで作る方法もありますが、逆に使いにくくなるので、やめました。 [任意の場所] =PICKUPFIG($A$5:$X$20,ROW(A1))  ↓(フィルハンドルをドラッグ) =PICKUPFIG($A$5:$X$20,ROW(A2)) =PICKUPFIG($A$5:$X$20,ROW(A3))     ・     ・     ・     ・

tododesu
質問者

お礼

判りました。ありがとうございました。 ここのところ、ずっとVBAの本を読んで勉強しておりました。 まだ、勉強中ですけど、徐々に意味が判ってきました。 お礼が遅くなってしまってすみませんでした。

その他の回答 (4)

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

VBA向きの問題です。 たった Sub test01() Dim cl r = 1 For Each cl In Selection If cl <> "" Then Cells(r, "L") = cl r = r + 1 End If Next End Sub でできます。 コピーして標準モジュールに貼り付け。 例えば、A-J列にデータがあって、L列にならべるとする。 大きめに範囲指定して(これを忘れないように)、全データが含まれるようにして、実行(=>F5キーを押すと実行) 1 3 5 6 0 b c 2 が 1 3 5 6 0 b c 2 のようになります。

tododesu
質問者

お礼

回答ありがとうございました。 お礼が遅くなってしまいましたが、なんとかなりました。 VBAはこれを機会に勉強していきたいと思います。 ありがとうございました。

tododesu
質問者

補足

すぐに回答いただきありがとうございます。また、連絡が遅くなってすみません。VBAはまったく見たことがなく、何を質問すれば良いのか判らなかったので、入門書を買ってきて読んでおりました。 コピーして標準モジュールに張り付けることはできましたが、範囲指定をする場合に、どこをどうしたら良いのでしょうか。 例えばA5からX20までの範囲のデータを、同じシートか、別のシートのA8から並べる場合はどこに指定するのでしょうか。 基本的なことで申し訳ありませんが、よろしくお願いいたします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 それは、いずれにしても、VBAでないと無理というか、負担が大きすぎるように思います。 >どこにいくつ数字が入っているか一定していない表から、 >数字が入っているセルだけを左上から右下へ順番に抽出して、 並べ替えてよいなら、SMALL()関数で出来るのですが、順番というと、そう行きませんね。 ユーザー定義関数を作りました。 数式の使い方: =PickupFig($A$1:$D$50,ROW(A1)) これを、下に、フィルダウン・コピーします。 '標準モジュールに貼り付けてください。 '----------------------------------------------------------- Function PickupFig(Rng As Range, index As Long) Dim i As Long Dim j As Long Dim k As Long Dim myData() As Double With Rng For j = 1 To .Columns.Count: For i = 1 To .Rows.Count   If VarType(.Cells(i, j).Value) = vbDouble Then    ReDim Preserve myData(k)    myData(k) = .Cells(i, j).Value    k = k + 1   End If Next i: Next j End With index = index - 1 If index <= UBound(myData()) Then  PickupFig = myData(index) Else  PickupFig = "" End If End Function

tododesu
質問者

補足

すぐに回答いただきありがとうございました。VBAは初めてで入門書を買ってきて読んでおりました。 標準モジュールに張り付けると、新しい関数が使えるようになることまで理解できたのですが、実際にやってみるとエラーが出てしまいます。 例えば、A5からX20までの範囲を指定して、同じシートまたは別のシートに縦でも横でも良いのですが、順番に並べるためには、どのようにこの関数を使えば良いのでしょうか。 本当に基本的なことで申し訳ないのですが、よろしくお願いいたします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

マクロを使ってよいなら、以下の方法で Sheet1 のセルにある数値を Sheet2 のA列に抽出できます。 Alt+F11でVBAの画面を起動する。 「挿入」>「標準モジュール」を選択する。 右側の白いところに、以下のマクロをコピーして貼り付け、F5キーを押して実行する。 ※Sheet1、Sheet2というシート名でないところは、マクロの中に出てくるシート名を実際の名前に置きかえてください。 ※同じシートに抽出したい場合は、データが入っているのがどのセル範囲で、どの列に抽出したいか補足していただければ、そのように修正します。 Sub 数字を抽出()   Dim ReadCell As Range, WriteCell As Range   Set WriteCell = Worksheets("Sheet2").Range("A1")   For Each ReadCell In Worksheets("Sheet1").UsedRange     If IsNumeric(ReadCell.Text) Then       WriteCell.Value = ReadCell.Value       Set WriteCell = WriteCell.Offset(1, 0)     End If   Next End Sub

tododesu
質問者

お礼

回答ありがとうございました。 お礼が遅くなってしまいましたが、なんとかなりました。 VBAはこれを機会に勉強していきたいと思います。 ありがとうございました。

tododesu
質問者

補足

すくに回答いただきありがとうございました。VBAそのものが全く理解できなかったので、入門書を買ってきて読んでおりました。 例えば、A5からX20までの範囲のデータを同じシート(または別のシート)に縦(または横で)一列に順番にならべるとすると、どのようにしたらよいのでしょうか。 また、この処理を、31回、同じシート内で行う場合は、どのようにしたらよいのでしょうか。 本当に基本的なことが判っていなくて、申し訳ないのですが、よろしくお願いいたします。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

1.表を「text.csv」など、ファイルの種類を「CSV(カンマ区切り)」にして「名前を付けて保存」する 2.エクセルを終了し、保存した「text.csv」をメモ帖など、テキストファイルの編集が出来るソフトに読み込む 3.メモ帖の文字列の置換の機能で「,,を,に置換するのを、,,が無くなるまで」繰り返す。すると「,,,,」や「,,,」や「,,」など、カンマの連続がカンマ1つになればOK 4.各行の行頭に「,」がある場合のみ、行頭の「,」を手作業で削除する 5.各行の行末に「,」が無い場合のみ、手作業で行末に「,」を足す 6.すべてを繋げて1行にしてしまう。但し、長くなり過ぎないように注意 7.メモ帖で上書き保存 8.エクセルで「text.csv」を開くと、全部のデータが1行になって表示されるので、その行をコピー&ペーストして、目的の表に貼り付ける

tododesu
質問者

お礼

回答ありがとうございました。 お礼が遅くなってしまいましたが、なんとかなりました。 VBAはこれを機会に勉強していきたいと思います。 ありがとうございました。

tododesu
質問者

補足

すぐに回答いただきありがとうございました。 やってみましたらできました。この方法ならば、私のような初心者でもできますね。 ただ、毎月、31回やらなければいけないので、この手は奥の手として、No.2さん、No.3さん、No.4さんに教えていただいたVBAに挑戦してみようと思います。

関連するQ&A

  • エクセル2003表の集計で

    エクセル表で横一列に10個の数字が並んでいる中から一番少ない数字もしくは一番大きい数字を自動的に抽出しそのセルを表示してくれる方法をご存知でしたら教えていただけないでしょうか? 例として、ある商品の市場価格を47都道府県ごとに47個(質問では10個としてます)横一列に入力してその中から少ない数字、多い数字を選ぶ。 現在はMIN関数にて抽出してその数字を47個の中からアナログ的に選ぶ作業をしてますがなかなか大変です。 よろしくお願いします。

  • エクセルの関数です。列に数字が並んでいる表。

    エクセルの関数です。列に数字が並んでいる表。 ある列内のセルにある数字を指定し、その数字から下一列にある数字をすべて選択したような状態でその中の数字の平均値を求める方法はあるのでしょうか? 数値 3210 ※例えば 3211  3212と3215とあるセルに入力したら自動的に3212~3215の平均値の結果が返るような  3333  関数です。 3212 3213 3214 3215 3217 3218 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235

  • Excel表を一列にしたい

    7列の表を一列に直したいのです。 A1,A2,A3・・B1,B2とあるものを別のシートに A1→A1,B1→A2,C1→A3・・・と、すべてを一列にするにはどうしたらいいでしょうか? Offsetを使うことも考えましたが、あまり効率がいいとも思えず、 マクロもどうすればいいかがわかりません。 表には数値だけでなく文字列もあるので、抽出はいらないのですが、 作業で一列になっていないと不便なのです。 いい方法はありませんか? Excelは2003です。

  • エクセルで表の作成

    エクセルで表を作成する際、よくあることですが表の左上隅のセルに左上から右下まで 斜線を入れて、その三角に区切られた枠の中にそれぞれの文字を記入する方法は有りますか。教えてください。宜しくお願い致します。

  • エクセル関数の書き方、入力方法

    エクセル関数の初心者です。関数の書き方で下記の内容について教えて下さい。 例えば、1行のセルA1~P16の表に入力された数値(1~3桁)で、少ない数値を5個を自動的に抽出し、その平均値を出す関数の書き方が分かりません。 但し、表中に同じ少ない数値が複数有る場合、その複数を含め5個抽出する式としたいのですが、どのような関数とすればよいでしょうか。

  • エクセルで表に記入

    エクセル初心者です。 よろしくお願いします。 図のように列に並んだ数字を自動的に(できればabcdなど順番をつけて) 表に記入することはできますか?

  • Excelの表作成について

    Excelの表作成について Excelの表で、1~50までの数字から3つの数字を抽出し、20通りの異なる組み合わせのグループを作成したいです。 例えば「1,34,42」「5,20,18」など、数字は連番ではなくランダムに抽出したいです。 そのうえ同じグループ中は異なる数字で構成したいです。 (例えば「23,8,23」のように、同じ数字は入れたくない) そのような数字の抽出に使用できるような関数や数式があれば教えてください。 宜しくお願いします。

  • エクセルによる表作りについて

    すみません、ちょっと教えてほしいのですが、 エクセルを使っての表作りで、 たとえば1~1000の数字をランダムに打ち込み これらの数字を数字の若い順番に1000単位にまとめたいのですが、どのような作業をしたらいいのでしょうか、教えて下さい。

  • エクセル 表のデータを一列にしたい

    表にあるデータを一列したいのですが・・・。 簡単な関数なら理解できます。   1   2   3 ・・・ A 11| 22| 33 B 44| 55| 66 C 77| 88| 99 ・ ・ ・ となっているのを、 11 22 33 44 55 66 77 88 99 ・ ・ ・ としたいんです。 出力先はエクセルでもワードでもメモ帳でもかまいません。 なるべく簡単に出来る方法はないでしょうか? マクロは使わずに出来るとありがたいです。

  • EXCELで同じ数字が入ったセルを空白にする方法。VLOOKUP関数。IF関数。

    お世話になります。 エクセルで 00101 00101 00102 00102 00104 00103 00103 00105 と二列の文字が並んでいます。 このうち左と右の数字が同じものを空白にする関数があれば式を踏まえて教えてください。 上の例で言いますと 00104 00105 以外を空白にする方法です。 一番左上のセルを一列目の一行目と考えてください。 よろしくお願いします。

専門家に質問してみよう