ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Excel(エクセル)活用コミュのセル内で改行されている行を任意に取り出す方法?

  • mixiチェック
  • このエントリーをはてなブックマークに追加
以前ヤフー知恵袋でした質問なんですが、考えがまとまらなくて1回の質問では解決に至ることができず、なんどもやりとり出来るこちらのコミュで改めて質問させて頂きます。


ショッピングサイトで使う商品の情報を改変?する作業を行なっております。
そのデータの中の、カテゴリーデータを並べ替える作業になります。
ひとつのセルに改行された(大体4行くらいの)データが入力されています。
そこから、大分類のカテゴリが2種類あるのですが、一番長いカテゴリだけを抜き出し商品別に並べたいのです。イメージとしてスカイドライブにアップしてあります。ブラウザでも表示できますが、一部エクセルでないと表示できないものもあるかもしれないのでダウンロードすると確実です。(バージョン2007でつくっています)
【スカイドライブ】
http://cid-d636e7021934da8b.office.live.com/self.aspx/.Documents/%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA2.xlsx

私の考えでは、テキストにコピーしてエクセルに貼りつけで、改行をなくして一行ずつひとつのセルに分ける作業(伝わりますでしょうか;先のファイル参照)をしてから、一番長い行をバイト数かなにかでカウントさせて抜き出すようなイメージです。
ただ、商品ごとにそれをする方法がなかなか出てきません。

もういっぱいいっぱいの説明なので、あとは不明なところがあれば教えて欲しいです。
宜しければアドバイスお願いいたします。

コメント(14)

VBAでやれば簡単にできそうに思います
VBAでやるなら、商品データは改行ありのままでも問題ないので
別セルもしくは別シートに文字数の一番多い行を転記するなどしてから
並べ替えをしてしまうとか
新トピ立て、ありがとうございます。
さて、まず元データは、どこに入力されているのでしょうか?
「セル内改行」された「Path」というデータは、Webページのデータをコピーして、セルに貼り付けると、このようにセル内改行されるということではないでしょうか?

その場合は、Excelに貼り付ける際、[形式を選択して貼り付け]コマンドで「値」として貼り付けると、各行が1つのセルに別れて貼り付けられるようになりませんか?ここがまず1つ。
これができないというと、関数なりVBAなりでやる方法を考えなければなりません。

「Path」の列さえ、各行に分割できれば、「name」などのほかの行は、足りない行にはオートフィルでコピーして、1行分のデータが全部揃うようにすれば、「Path」に列で並べ替えれば、不要な行を削除するっていうのは、データ量が多くなければ、手作業でも十分に対処できるように思います。
>マリ男 さん
レスありがとうございます。VBR使ったことがないんです。勉強するには時間が足りません。この作業にかたがついたら調べてみますね。

>まじん さん
早速のアドバイスありがとうございます。
商品が2万点ほどあるのですみません。(フリーズしながらトロトロ作業しとります・・)
スカイドライブのデータはあくまで例です。扱っている商品とは違いますが、形はまんまあの通りです。

pathのデータを1行ずつに直すこと、そこはクリアしてます。
pathとname他の項目を同数行にしたとして、そこからが問題ですかね?
いい方法ないでしょうか。VBRやったことないですが、出来る範囲であればアドバイスお願いします。
VBAでやるならこんな感じ。
http://cid-ad277d7ffc581c22.office.live.com/self.aspx/mixi/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa2.xlsm
[カテゴリ抽出]のボタンを押せばOK
' ---
Sub カテゴリ抽出()

Dim 分割データ
Dim i As Integer
Dim r As Integer
Dim メーカー別 As String
Dim 日用品 As String

For r = 2 To 4

分割データ = Split(Cells(r, 1), Chr(10))
メーカー別 = ""
日用品 = ""

For i = 0 To UBound(分割データ)
If 分割データ(i) Like "メーカー別*" Then
If Len(メーカー別) < Len(分割データ(i)) Then メーカー別 = 分割データ(i)
Else
If Len(日用品) < Len(分割データ(i)) Then 日用品 = 分割データ(i)
End If
Next

Cells(r, 6) = メーカー別
Cells(r, 7) = 日用品
Next

End Sub
' ---
これを関数でやるのはめんどくさいですね。
> [3] よ(・し_・)の さん

1行ずつになっているけど、2万件とかのデータ数があるんですね。
[4]でミスキタさんが提示してくださっている通り、VBAで解決するのが結果的には対応しやすいと思いますが、「VBAはまったくわからない」というのをどうクリアするかですね。仕事なら「外注する」っていうのも1つの手ですし、最低限の知識を習得して、ミスキタさんのコードを利用させてもらうっていうのもあるでしょう。
ただ、状況はもっと整理したほうがいいかもしれません。
たとえば、「大分類」というのは、「メーカー別」と「日用品」しかないのかとか、分類の区分けの階層は、最大でいくつまでだとか……。
>4 ミスキタ さん
ありがとうございます!(てかVBRってなんだVBAじゃないか失礼しました!)
データまで作っていただいてありがとうございます。ボタンおしたらあら不思議でした。
全部に使えるようにやってみます。またわからないことがあったら質問させていただきます。
>5 まじん さん
わかりにくい説明で恐縮です;
大分類は、メーカー別と商品によってかわる項目(日用品だとか食品だとか玩具とか)の2種類になります。
抽出したい一番長いカテゴリにどうやってフラグを付けるか考えていました。
”:”の数とか、先にメーカー別だけ抜いて・・とか。
何でもかんでも聞くのは良くないと思いますが、ここだけ押さえれば今回のVBAの操作が出来きますか?
参考になるおすすめのサイトあれば貼りつけて下さい。
まじん さん ミスキタ さん なんとか出来ました。ありがとうございます。

>For r = 2 To 4
ここんとこ、データ入ってる行までの数字に変えたらなんか良くわからないけど出来ました。
ありがとうございます。(涙涙涙涙
よくわかってないんですけど、メーカー別と日用品となっていたので、日用品以外は取り出せないのかと思ってたんですが、他の分類でも抜き出せてました。

今回の件でVBAについて勉強する機会が出来ました。ありがとうございました。今度はVBAのことでお世話になるかもしれません。その時はよろしくお願いします。
素晴らしぃいいい!
よく自力でそこまでたどりつきましたね。

本当は、「完成後イメージ2」にあるみたいに、2件に絞ったカテゴリを2行にして、それぞれの行の右に「name」だとかを出力するまでVBAでやっちゃうのが、良さそうなんだろうなぁ、と思ってたんですけど。

とりあず、今後はVBAの入門書を購入してみるといいかもしれません。
まじんさんッッッ><、
とりあえず今だけは貼りペタで対処します。(画像と商品説明文を揃えなければならんのででで(涙)

そうですね。アクセスの本を買って投げ出してしまいましたが、こちらから入ったほうが分かりやすいかも?
初めましてw
VBAで行うような流れになっていますが
参考までに書きこんでおきます。
セル内の改行はCHAR(10)であらわすことができ、
FIND関数で FIND(CHAR(10),検索セル)で改行箇所を
探すことができます。
これとMID関数等を応用すれば関数だけでできると思いますが、
ちょっと複雑になりそうなのでVBAの方がいいかもしれません。
久しぶりにみたらレスがついている!
私もはじめはVBAわからないので関数のみでググっててその関数がでてきたんですが、
色々詰まっちゃって。。。
こちらで相談したら魔法のようなコードを頂いたのでここらで手を打ちました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Excel(エクセル)活用 更新情報

Excel(エクセル)活用のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。