• ベストアンサー

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/17069)
回答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/17069)
回答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% (7417/18945)
回答No.3

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

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答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