• ベストアンサー

EXCELでのデータの切りだし方法

約1000個のデータがカンマで区切られてあります。(CSVファイルです) a,b,c,d,e,・・・・の様なものです。全部で約100個のデータが並んでます。 これから、例えば、500番目から510番目迄を切り抜くようなことをエクセルの関数等で できませんでしょうか。 ご存知の方、お教えいただけませんでしょうか。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

#01です。すみません。マクロの直しもれがありました。 最後から2行目を以下に差し替えてください DataType:=xlDelimited, Comma:=True, Other:=False

その他の回答 (6)

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

SUBSTITUTE関数というのがあり、第4引数に置換対象と説明されている数が有ります。これは左から何番目にある、考えている文字だけ、指定文字に変えるというものです。 (例)A1に a,bb,ccc,dd,ee,fff,ggg  というデータがあるとします。 左から3番目のカンマを/で置き換えるには =SUBSTITUTE(A1,",","/",3) と入れます 結果は a,bb,ccc/dd,ee,fff,ggg です。位置を求めるには FIND関数があり =FIND("/",SUBSTITUTE(A1,",","/",3)) で結果は9です。 次ぎの4番目のカンマの位置は、同じく類推で =FIND("/",SUBSTITUTE(A1,",","/",4)) で結果は12です これで抜き出す、最初の位置の直前桁と、最後の位置の直前桁が見つけられます。 このように開始位置と終了位置がわかれば、MID関数が使えて、 =MID(A1,FIND("/",SUBSTITUTE(A1,",","/",3))+1,FIND("/",SUBSTITUTE(A1,",","/",4))-FIND("/",SUBSTITUTE(A1,",","/",3))-1) で結果はddです ーーー ここで 3番目と4番目の間、 4番目と5番目の間 5番目と6番目の間 を抜き出すと、3,4、5番目の3データ抜き出せます・ ***関数式の式の複写でできるように、3,4などを、ROW(A3)、ROW(A4)・・と置き換えて考えます。 G1に=MID($A$1,FIND("/",SUBSTITUTE($A$1,",","/",ROW(A3)))+1,FIND("/",SUBSTITUTE($A$1,",","/",ROW(A4)))-FIND("/",SUBSTITUTE($A$1,",","/",ROW(A3)))-1) と入れます。A1は絶対番地にして式の複写で変わらないよう固定します。 G2、G3に3-1個分セルの式を+ハンドルを引っ張って複写します。 G1:G3に結果は dd ee fff 関数式としては、難しいものの内の1つでしょう。 前半は#3のご回答の説明にもなってます。 後半は述べられていません。

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

VBAになりますが Sub test01() n = InputBox("n番目=") '何番目から x = Cells(1, "A") 'A1セルデータを対象にする q = 1 j = 1 '第1行から書き出し '-----カンマを見つける繰り返し For i = 1 To n + 1 '10個書き出しならn+10 p = InStr(x, ",") 'カンマの位置を調べる '---セルへ書き出し If i >= Val(n) Then '指定番目の文字列を越えたら書きだし Cells(j, "G") = Mid(x, 1, p - 1) 'G列にセット MsgBox Mid(x, 1, p - 1) j = j + 1 '次ぎは1行下に書き出す準備 End If '----次回繰り返し準備 q = p + 1 '今のカンマのあった次ぎの桁を指定 x = Mid(x, q, Len(x) - q + 1) 'カンマの次ぎの桁から終わりまでを対象文字列に Next i End Sub 少数例でテスト済み。 A1 に 大坂,京都,11,神戸,ww,姫路,なら,和歌山,qwer nに3を指定。 J1:J2に結果 11 神戸

noname#204879
noname#204879
回答No.5

「全部で約100個のデータ」というのは、1行あたりのデータのこと? 「500番目から510番目迄」というのは、500行目から510行目迄ということ?

imyongiri
質問者

補足

一行にカンマで区切られて1000個のデータがあります。 その中の500番目から510番目迄(499番目のカンマの次から510番目のカンマの前迄)のデータを 取り出したいのです。

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

#2です。すみません式を間違えました。 =MID(A1,FIND(";",SUBSTITUTE(A1,",",";",500-1))+1,FIND(";",SUBSTITUTE(A1,",",";",510))-FIND(";",SUBSTITUTE(A1,",",";",500-1))-1) が正解です。

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

文字がA1にあるとして、500~510番目までなら =MID(A1,FIND(";",SUBSTITUTE(A1,",",";",500-1))+1,FIND(";",SUBSTITUTE(A1,",",";",510-1))-FIND(";",SUBSTITUTE(A1,",",";",500-1))+1)

imyongiri
質問者

お礼

早速お教えいただきましてありがとうございます。 お教えいただいた方法で試してみます。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

EXCELでは列数が256迄しかないのでCSVを読み込めないため、このような質問になったのでしょうか。 メモ帳でCSVファイルを開き、1000個分のデータをCOPYしてA1セルに値として貼り付けます。 A2に切り出し開始位置(500)、A3に終了位置(510)を入れて =MID(A1,FIND("@",SUBSTITUTE(A1,",","@",A2-1))+1,FIND("@",SUBSTITUTE(A1,",","@",A3))-1-FIND("@",SUBSTITUTE(A1,",","@",A2-1))) とすれば「500,501,…509,510」の文字列が得られます。ただし文字列中に"@"が無いことが前提です。 また1、2、…500、501…509、510…を個別のセルに展開したいなら、マクロが楽でしょう。以前の回答を手直ししたものをのせます. http://oshiete1.goo.ne.jp/qa2543008.html このマクロは1つのセルを選択して実行すると、新規シートを開きデータ中の半角カンマで区切られた文字を1行あたり10列ずつにばらす処理をします Sub Macro5() Dim cnt As Long, wkStr As String, ptr Dim psw As Boolean  wkStr = ActiveCell.Value  Sheets.Add  Do While psw = False   wkStr = Application.Substitute(wkStr, ",", "@", 10)   ptr = Application.Find("@", wkStr & "@")   Cells(1, 1).Offset(cnt, 0).Value = Left(wkStr, ptr - 1)   cnt = cnt + 1   If ptr >= Len(wkStr) Then    psw = True   Else    wkStr = Right(wkStr, Len(wkStr) - ptr)   End If  Loop  Cells(1, 1).Resize(cnt, 1).TextToColumns Destination:=Cells(1, 1), _    DataType:=xlDelimited, Space:=True, Other:=False End Sub マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はALT+F8を押して、マクロ名を選択します。

imyongiri
質問者

お礼

早速お教えいただきましてありがとうございます。 EXCELでは列数が256迄しかないので困っておりました。 早速試してみます。

関連するQ&A

  • CSVからエクセルへの取り込み

    エクセル・マクロ初心者です。 CSVファイルの一部分を、エクセルで読み込みたいのですが、 マクロでの作成は可能でしょうか。 (例) ・CSVファイル(読み込み側)  ABCDE 1 2 3 4 5 ・EXCELファイル(書き込み側)  ABCDE 1 2 3 4 5 ・CSV側は、複数のファイルがあります。 ・EXCEL側は、1つのシートにCSVのデータを書き込みます。 ・CSVファイルAの1B、2B、3B、4B、5Bを読み込み、EXCELファイルの、1A、1B、1C、1D、1Eに書き込みます。 ・CSVファイルBの1B、2B、3B、4B、5Bを読み込み、EXCELファイルの、2A、2B、2C、2D、2Eに書き込みます。 ・CSVファイルCの1B、2B、3B、4B、5Bを読み込み、EXCELファイルの、3A、3B、3C、3D、3Eに書き込みます。 というような事をやりたいのです。 どなたか、ご指導のほどよろしくお願いします。

  • カンマを改行に変換する方法

    テキストファイルの中にあるカンマ(,)を改行に変換する方法を教えてください。 具体的には次のようなCSVファイルがあります。 A,B C,D E,F これを A B C D E F と変換したいのです。 EXCELを使ってもかまいません。よろしくおねがいします。

  • 2つのエクセルのデータを結合する方法で困っています。

    2つのエクセルのデータを結合する方法で困っています。 下図のE部分だけをファイル1からファイル2に反映させたいのですが、 行が追加されたり、削除されたりしているため、単純に貼り付けできません。 (下の例では、ファイル1>2の過程で【い】【え】が削除、【も】【か】が追加、【あ】のB【う】のCの内容が変更になっています) 何かいい方法はないでしょうか? ファイル1:       A   B  C   D  E   1あ  ●  ●  ●  ●  ■   2い  ●  ●  ●  ●  ■   3う  ●  ●  ●  ●  ■   4え  ●  ●  ●  ●  ■   5お  ●  ●  ●  ●  ■ ファイル2:       A   B  C   D  E   1あ  ●  ▲  ●  ●     2も  ●  ●  ●  ●     3う  ●  ●  ▲  ●     4お  ●  ●  ●  ●     5か  ●  ●  ●  ●   こうしたい:       A   B  C   D  E   1あ  ●  ▲  ●  ●  ■   2も  ●  ●  ●  ●     3う  ●  ●  ▲  ●  ■   4お  ●  ●  ●  ●  ■   5か  ●  ●  ●  ●   Excelのバージョンは2000です。実際は1000行×30列×10シートくらいあって、結構な頻度で結合するのですが、手でやっていて大変なのです。。

  • Excel 重複データーのカウント

    Excelの関数に対する質問です。   =COUNTIF(A1:E1,A1) はA1と重複するデータを求めますが、この方法ではなく A B C D E 0 A A B C D 1 A A B C C 2 このように 行に重複するデータのデータ件数をいっきに求められる関数があるのでしょうか? それともそれぞれのデータを=COUNTIF(A1:E1,A1)~でそれぞれもとめた後、それを合計しなければならないのでしょうか? よろしくお願いします。

  • csvデータの列の入れ替えができるソフト

    次のようなCSVデータがあります a,b,c,d,e 11,12,13,14,15 21,22,23,24,25 31,32,33,34,35 上記のc列を1番目、次に、b,a,e,dのように列の順番を変えたいと 思っています 変換後は下記のイメージです c,b,a,e,d, 13,12,11,15,14 23,22,21,25,24 33,32,31,35,34 これはイメージであり、CSVの列数は300列程あります a,b,c,d,eの列の並びを指定することにより、全てのデータ が並び替えれるソフトをご存知でしたら教えていただけませんか よろしくお願いします。

  • CSVデータをエクセルで並び替え

    CSVデータをエクセルで並び替えしたいと考えています。 たとえば、"a","b","c","d",とあるものを "a""b" "c""d" のように行を変えたい場合には どのようにすればいいのでしょうか? 宜しくお願いします。

  • 複数のCSVファイルからのデータ取得(VBA)

    エクセルVBAで、エクセルの指定シートに複数のCSVファイルからデータを取得する方法を ご教授お願います。 エクセルの指定シートの指定されたセルに、複数のCSVファイルから指定箇所のデータを 取得し転送する方法を考えていますが、どうもうまくいきません。 たとえば、 CSVファイル(1) A5(A)           A10(B) CSVファイル(2) A5(C)           A10(D)      CSVファイル(3) A5(E)           A10(F)         ・      ・      ・ と、指定されたセルからデータを取得し、 エクセルの指定シートの表に                    CSVファイル                                 (1)  (2)  (3) ・ ・ ・ ------------------------------------------- A5から取得したデータ    A   C   E ・ ・ ・ A10から取得したデータ    B   D   F ・ ・ ・ ------------------------------------------- と、いうように転送して貼り付けていきたいです。 いろいろ調べてみたのですが、このような方法が見つけられませんでした。 ぜひ、皆様のお知恵をお貸しください。 宜しくお願い致します。

  • エクセルで1行にまとめられたCSVデータを複数行

    エクセルを使ってCSVファイルのデータを参照して複数行にまたがる表に反映させたいのですがうまくいきません。   A B C D E  1 あ い う え お 2 か き く け こ 上記のように1行で1件分のデータがCSVであります。 このデータを   A  B  C  D  E 1 あ う お 2 い え  3 か く こ 4 き け 上記のように参照させたいのです。 数件ならば1件1件を参照させれば表は完成するのですが、数千件あるのでできません。 1パターン作って、あとは連続フィルで出来れば助かります。 説明が難しく、わかりづらいかと思いますがお力をお貸しください。 よろしくお願いいたします。

  • EXCELでCSVファイル保存するとデータが無いところにカンマ

    EXCELでデータをCSV保存をした際に、データが無い部分に カンマが残る場合があります。 =EXCELのデータ== a a a a a b b c c =CSV保存データ== a,a,a,a,a b,b c,c,,, ,,,, ,,,, EXCEL上で調べましたが、データが無いセルは 空欄や特殊な書式は設定されていませんでした。 よろしくお願いします。 環境 windws XPpro + excel 2003

  • 【Win】ファイルメーカー⇔エクセル(インポート/エクスポート)

    ファイルメーカーPro 5.0で作成したデータをエクセルに エクスポートし、エクセル上でデータの修正等をして、 またファイルメーカーに戻したいと思います。(ファイルメーカーが 入っていないパソコンでデータを追加したりしたいため。) エクセルにエクスポートすると、フィールドを"繰り返し"に 設定している部分が、エクセル(コンマ区切りcsv、タブ区切りtab)では ひとつの列に『・』で区切られて入りますよね。 ファイルメーカー上 ⇒ フィールド1:「A」「B」「C」 エクセル上 ⇒ 列1:「A・B・C」 となりますが、 別のレコードの同じフィールドに「D」「E」「F」と入れたい場合 エクセル上でどう入力すれば良いのでしょうか。 「D・E・F」と入力すると、 ファイルメーカーにインポートしたときに「D・E・F」「(空欄)」「(空欄)」 となってしまいます。 分かりにくい説明で申し訳ありませんが、よろしくお願いします。

専門家に質問してみよう