任意のセルから文字を抽出する方法とは?

このQ&Aのポイント
  • エクセルの勉強中で、任意のセルに入った文字列を抽出する方法を知りたいです。
  • 指定の列に順に別の列に文字を入れていく作業ができるのか知りたいです。
  • 別のファイル内でも同様の作業ができるのか教えてください。
回答を見る
  • ベストアンサー

任意の複数のセルから文字を抽出する法

エクセルの勉強中です。 質問があります。 エクセルには縦の列と横の行があるようですが、 その任意のセルに入った文字列を抽出することは可能でしょうか。 例えばB列に入った5行目、8行目、11行目、14行目といったようにある配列に並んだセル内の文字を別の新規のD列に順番にD1、D2、D3、D4のセルに並べていくという方法などです。 同じファイルでなくても別の任意のファイル内の指定の列に順に入れていくといった作業などです。 同様にC列に入った4行目、8行目、12行目、16行目内のセル内の文字を今度は 新規のE列のE1,E2,E3,E4に順に並べていくなど、上記のような作業を一度に行えればそのような方法があるのか、お知りになる方よろしくお願いします。 その目的の列ごとに行っていく方法でもかまいません。

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

>例えばB列に入った5行目、8行目、11行目、14行目といったようにある配列に並んだセル内の文字を別の新規のD列に順番にD1、D2、D3、D4のセルに並べていくという方法 飛ばして表示するセルに規則性があるなら、いろいろなアプローチがありますが、以下のような文字列数式を利用した方法が直感的でわかりよいかもしれません。 D1セルに「'=B5」、D2セルに「'=B8」と数式の前にアポストロフィー「'」を入力した数式を入力し、この2つのセルを選択して、下方向にオートフィルコピーして、そのまま「データ」「区切り位置」で「完了」してください。 通常の関数で対応する場合は、以下のようなINDIRECT関数で表示することができます。 =INDIRECT("B"&(2+3*ROW(1:1))) ただし上記のINDIRECT関数は他ブックを参照するときは、そのブックを開いていないとエラーになりますので注意してください。 他ブックを参照する場合は、以下のようなOFFSET関数を利用することができます。 =OFFSET($B$2,ROW(1:1)*3,0)

smoker117
質問者

お礼

早い回答にて感謝します。 今は、試すことができない環境にあるのですが、 早速試してみます。 ありがとうございます。!!

その他の回答 (5)

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

>他のファイルから抽出する方法があればその、抽出元のファイルもしくはsheet名を関数に入れ込むことにより解決するのでしょうか。 はい、ファイルが同時に開かれている場合はファイル名とシート名をセルのアドレスに付加して参照させることになります。 ファイルが閉じた状態ではファイル名を保存先のフォルダーのフルパスを付加したものにしないと対象セルが見付からないことになります。 同時に開いているファイルの場合は =[Book2.xls]Sheet1!A1 のような形式です。 閉じたファイルの場合は次のようになります。 ='C:\Users\Bunjii\Documents\[Sheet2.xls]Sheet1'!A1

smoker117
質問者

お礼

ありがとうございます。 どなたの回答もほんとによいものばかりで 実際どれをベストアンサーとするのは難しく、 実際、どの方法にて作業を行っていくのがいいのかまだ決めかねているところです。 他のファイルからの抽出は他の展開や利用が色々考えれて、広がりを感じさせてくれます。 ありがとうございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

上記を実行したあと、必要行まで上記の関数がコピーされるのみなのですが、 同じ数式になりますがROW関数の値がセルによって異なるので問題ありません。 ただし、ROW関数のカッコ内に何も入力しないと、そのセルの行番号を取得しますので、入力するセルが変わると、返す値が異なることになります(D1セルに入力すれば「1」が返りますが、D3セルに入力した場合は「3」が返ります)。 したがって1行目以外のどのセルに入力してもB5セルからの移動量を0、3、6・・・としたいなら、すでに回答したようにROW(1:1)またはROW(A1)のような数式にすることをお勧めします。 =OFFSET($B$5,(ROW(1:1)-1)*3,0) このような数式にしておけば、どのセルに入力しても(この数式のROW関数で返す値は必ず1なので)同じ数式で対応できるだけでなく、行が変わると数式も変化しますので、数式が直感的に理解しやすいかもしれません。

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

>上記を実行したあと、必要行まで上記の関数がコピーされるのみなのですが、そのあと、どうしたら実行されるのでしょうか。 ???? もしかしてD1セルに D1=OFFSET($B$5,(ROW()-1)*3,0) と入力しましたか? 数式バーにはD1を除いた =OFFSET($B$5,(ROW()-1)*3,0) と入力するのがExcelの決まりごとになっています。 添付の画像を参考にしてください。

smoker117
質問者

お礼

ありがとうございます。 = の記号が抜けて入力した結果によるものでした。 あと、No1さんが書いているように他ブックというのでしょうか。 他のファイルから抽出する方法があればその、抽出元のファイルもしくはsheet名を関数に入れ込むことにより解決するのでしょうか。 No1さんの書いている関数でも挑戦してみたのですが、同じファイル内ですと、 みなさんのどれもの関数がうまく働くことが出来、どれも使用できそうだと認識しました。 が他ファイルからの抽出方法が出来ることが可能なのでしょうか。

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

>例えばB列に入った5行目、8行目、11行目、14行目といったようにある配列に並んだセル内の文字を別の新規のD列に順番にD1、D2、D3、D4のセルに並べていくという方法などです。 提示の条件では初期値がB5で3行飛びの値と言う規則性を利用して次の式で良いでしょう。 D1=OFFSET($B$5,(ROW()-1)*3,0) D1を下へオートフィルで必要行までコピーします。 >同様にC列に入った4行目、8行目、12行目、16行目内のセル内の文字を今度は新規のE列のE1,E2,E3,E4に順に並べていくなど この条件も前項と同様に初期値がC4で4行飛びの値と言う規則性がありますので前項の式を変形して次の式が使えます。 E1=OFFSET($C$4,(ROW()-1)*4,0) 飛び飛びの規則性が無い場合は参照する列を使うことで抽出できますので条件を整えて再質問してください。

smoker117
質問者

補足

ほんとにエクセルのことが自分自身わかってないのですが。 D1=OFFSET($B$5,(ROW()-1)*3,0) D1を下へオートフィルで必要行までコピーします。 上記を実行したあと、必要行まで上記の関数がコピーされるのみなのですが、 そのあと、どうしたら実行されるのでしょうか。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

>例えばB列に入った5行目、8行目、11行目、14行目といったようにある配列に並んだセル内の文字を別の新規のD列に順>番にD1、D2、D3、D4のセルに並べていくという方法などです。 D1=INDEX($B:$B,ROW()*3+2) とか D1=OFFSET($B$2,ROW()*3) とか D1=INDIRECT("B"&ROW()*3+2) で下方にコピー >同様にC列に入った4行目、8行目、12行目、16行目内のセル内の文字を今度は >新規のE列のE1,E2,E3,E4に順に並べていくなど E1=INDEX($C:$C,ROW()*4) とか E1=OFFSET($C$1,ROW()*4-1) とか E1=INDIRECT("C"&ROW()*4) で下方にコピー ※もし、参照元のセルが空白の場合に0が表示されるのが駄目なら、上記の式の最後に &"" としてください。

smoker117
質問者

お礼

早い回答にて感謝します。 今は、試すことができない環境にあるのですが、 早速試してみます。 ありがとうございます。!!

関連するQ&A

  • EXCEL: セルの先頭に任意の文字列を入れる

    Excel2013 Excelのセルに入力された文字列の先頭に、任意の文字列を入れたいのですが、どのような方法があるでしょうか? マクロが必要でしたら記述をお願いします。マクロが不要な方法があれば、なお便利です。 文字列は1~3文字程度で任意なものを入れたいのですが、既存セルの先頭に入れるだけです。ただ適用セルが数千あるため、手作業を避けたいと考えています。

  • Excelで任意の文字を含むセルの1つ下のセルを文字カウント

    関数初心者です。 Excelで任意の文字を含むセルの1つ下のセルを文字カウントする、シンプルでスマートな方法はないでしょうか? 具体的には      A列 1行目 @: インデックス1 2行目 この行の文字数をカウント 3行目 <空白行> 4行目 @: インデックス2 5行目 この行の文字数をカウント 上記のようなケースで「@:」を含むセルの1つ下の行(2,5行目の文字数をカウントしたいのです。 現状では、以下のような不細工な方法でやっています: A列の左隣に列を3つ挿入し(オリジナルのA列がD列になります)、C1に「=FIND("@:", D1)」とした上で関数を最終行までコピー→この例では1,3行目に「1」と表示されます 次にB2に「=IF(C1=1,"TRUE","")」と入力し、これを最終行までコピー→この例では2,5行目に「TRUE」と表示されます 最後にB列にオートフィルタをかけ、TRUEの行だけ表示したうえで、A1に「=LEN(A1)」と入力して、これを最終行までコピーしています→これで、2,5行目の文字数がカウントされます こんなヘタクソな方法ではなく、1つの関数で綺麗に同じ結果を得る方法はないでしょうか? もっと勉強すれば、自分でも出来るかもしれませんが、今すぐ必要なのでどうかご教示ください。

  • 複数セルから特定の文字を検索して、その対象セルを抽出したい

    エクセルで関数、VBAを使用して、下記のようなDATA抽出を行ないたいのですが、どなたか、ご指導いただけないでしょうか。 たとえば、2種のシートが、各々、 <シート1>   列A   列B 行1 A1 ABCD-123 行2 B23 EFGH-456 行3 C456 あいうえお <シート2> 列A 列B 列C  列D  列E 行1 A1 A2 A3 行2 B23 C5 A4 行3 A5 B2 C456 ・・・・・・・となっている場合、 <シート2> の列D  行1 へ "A1"と入力(記載)がある場合、列Eに   ”ABCD-123”と表示(抽出)を行ないたい。 セルには、文字、数字、記号が入ります。 よろしくお願い致します。

  • エクセルで 任意の単語を重複なしで抽出したい

    エクセルに入力した単語の行 ※(例えば G行2列から G行101列までの100個) の中から 5つの単語をランダムに出力したい  ※(例えば A2 B2 C2 D2 E2 へ) ・ここで おなじ列の中では 単語の重複を避けたい ・出力は A2 B2 C2 D2 E2  、 A3 B3 C3 D3 E3、、、、、、、、、、  と、任意の量にふやしたい エクセルにまだ詳しくないので、少し優しめに解答もらえると嬉しいです よろしくお願いします    

  • エクセル 関数で任意の数字に対応する複数セルを置換する

    恐れ入ります 教えていただけると幸いです エクセルの関数を使って任意の数字に対応する複数セルを任意のセル所へ置換する方法はあるのでしょうか? 例     A    B     C      D    E F G      5    11    18     23        8:00   20:00  1:00  遅 A列に5日,11日,18日,23日(数字は月の日付で、2日間かもしれないし10日間かもしれない予測不能)をうつとこの日付けの行のところに別のところに作った”8:00-遅”の4列の情報が入るようにしたいのです。 

  • 任意の行から連続する複数行のデータ平均の算出方法

    エクセル上に3600行のデータがあり、その中から任意の40個の行(行番号234、行番号336、行番号487、・・・)から、それぞれ連続する50行分の左から4行目のセル(D234:D283、D336:D485、D487:D536、・・・)の数値データの平均(D234:D283の平均、D336:D485の平均、D487:D536の平均、・・・)を算出する作業を行っています。 今は、「任意の行からその連続する50行分の左から4行目のセルを範囲指定して平均値を算出」する方法で行っています。 この方法だと、「任意の行からその連続する50行分の左から4行目のセルを範囲指定して平均値を算出」という作業を40回繰り返すことになります。また、同様に処理するワークシートが残り3部あります。 このような作業はマクロを利用すると可能でしょうか?もし可能なら、その方法を教えて下さい。 どうぞよろしくお願いします。

  • 【excel】複数のセルを対象に特定の文字列

    EXCELでセルB24:D31に一つでも文字列Aが入っている場合 あるセルに文字列2を表示させて偽の場合文字列3を表示させたいのですが =IF(B24:D31="","",IF(SUM(COUNTIF(B24:D31,{"*文字列A*","*文字列A*"})),"文字列2","文字列3")) この式ではエラーになってしまい、どうにも作業が進みません。どなたか教えていただけませんでしょうか?

  • エクセルVBAで任意の文字列を抽出するには・・・

    エクセル2003で作成した住所録があります。 県名(3文字)のみを抽出して、新たに設けたD列に表示させたいと考えています。 Sub 県名の列作成()  Dim myStr As String  myStr = ActiveCell.Value  Range("D2").Value = Left(myStr,3) End Sub ここまで、できたのですが・・・・ B列の2行目から順に処理をして、一覧表の最後まで行って、 空白セルの行が見つかったら終了させる方法が分かりません。 どうかよろしくお願いします。

  • 300個の文字列を結合し1個のセルに

    ファイル名変更ソフト「Namery」に使うのですが、セル1個に 001> 001a|002> 001b|003> 001c|004> 002a|005> 002a|006> 002c このようにして 300> 100c| までの文字列つくれませんか? VBAをお願いしたいのです。あるいは下記のD1からD300のセルの文字列を合体してE1に表示、でも良いのですが。 VBAを知らないので、次のような作業を始めましたが途中で疲労困憊です。 A1に001をいれオートフィルでA300までつくり B1に半角スペース+001a B2に半角スペース+002b B3に半角スペース+003c としてから 100c迄オートフィルし C1 に=CONCATENATE(A1,B1) C1をコピーD1に「値のみ貼り付け」してからオートフィル。 出来たD1からD300の文字列を1セルの文字列にするために、エクセルの30個までの制限のため何段階にも作業を分けなければなりません。 ファイル名変更ソフト=Namery の[連続置換・正規表現]に文字列を入れ目的を果たしたいのです。 http://www.vector.co.jp/soft/win95/util/se217399.html

  • (MS-Excel)複数の条件にマッチする複数のセルを配列?で出力させ

    (MS-Excel)複数の条件にマッチする複数のセルを配列?で出力させたい。 たとえば、条件1=A列で値が数値であるセルと、条件2=条件1でマッチしたセルと同じ行でC列で値が「その他」という文字列であるセルを検索させます。 そして、A列でマッチしたセルの値をE列に出力させて、C列でマッチしたセルの値をF列に出力させたい、というような感じです。 VLOOKUP関数などで、{配列}を使うなどすれば可能だと思って試行錯誤したけどダメでした。 なお、データベース関数のように条件セルなど作業セルが必要な方法は使いたくないです。 よろしく、お願いします。

専門家に質問してみよう