新生活を充実させるための「こだわり」を取材!!

仕事でWEBページをコピペし、
エクセルにテキストで貼付けをしました。
(なので、A列のみに情報が入っている状態です)

このデータソースから、
必要な項目を取り出して並べたいのですが、
VBAの作成方法など検索をかけて調べましたが上手く行かず困っています。

どうすれば出来ますか?

質問者からの補足コメント

  • 画像が貼れないので、データの一部を載せます。
               ↓
    ーーーーーーーーーーーーーーーーーーここからーーーーーーーー
    アリススポーツクラブ/ジュニアスイミング
    〒165-0024 東京都中野区松が丘1丁目33?15
    ベビースイミング対応駐車場あり体験ありこだわり水質ジャグジーあり
    休館日:毎週金曜日、特別休館日(お盆、年末年始)

    営業時間:月~木 9:30~22:30 土 9:30~21:00 日/祝 9:30~19:00

    詳細をみる


    ーーーーーーーーーーーーーーーーーーーーここまでーーーーーーーーーーーーー

    以上のようなデータが、A列に入っている状態のエクセルです。
    それを、
       店舗名 住所 休館日 営業時間
    という風に取り出したいのです。
    出来ないでしょうか?

      補足日時:2022/08/12 16:26
教えて!goo グレード

A 回答 (6件)

No5です。



全てが補足でご提示のような形式のデータであるなら、関数でも抽出可能と思います。
(HTMLソースから抽出したほうが、文書構造が確かなのですが、すでに文字だけがA列にあるようですので)

・一つのデータセットには、必ず住所データがあり「〒」で始まっている
・「〒」の1行前は、必ず「施設名称」になっている
・「休館日」、「営業時間」は無い場合もあるが、ある時は「休館日」、「営業時間」で始まっている

仮に、上記が成立するとした場合の、関数での方法をご参考までに以下に記しておきます。
A列に元データがあるとして、これをE:H列に、名称、住所、休館日、営業時間の順に抽出するとします。
作業用に、C、D列を利用します。

以下の要領で、D1:H1セルに関数式を入力します。
1)D1セルに
=IFERROR(AGGREGATE(15,6,ROW(A$1:A$16000)/(LEFT(A$1:A$16000,1)="〒"),ROW(A1)),"")
(D列には1文字目が〒の行番号が抽出されます)
2)E1セルに
=IF(D1="","",INDEX(A:A,D1-1))
3)F1セルに
=IF(D1="","",INDEX(A:A,D1))
4)G1セルに
=IFERROR(INDEX(A:A,MATCH("休館日*",OFFSET($A$1,D1,0,IFERROR(D2-D1,9)),0)+D1),"")
5)H1セルに
=IFERROR(INDEX(A:A,MATCH("営業時間*",OFFSET($A$1,D1,0,IFERROR(D2-D1,9)),0)+D1),"")

上記のD1:H1セルを2000行迄フィルコピーすれば良いのですが、2000行あるとかったるいので・・
6)C1セルに1を入力し、C1を選択した状態で、「ホーム」-「編集」-「フィル」-「連続データの作成」で表示されるダイアログで、
 「列」、「加算」、増分値1、停止値2000
としてOKをクリック。
これにより、1~2000までの値がC1:C2000に入力されます。
(フィルコピーを楽にするためなので、7)が終われば削除可能です)

7)D1:H1セルを選択した状態で、選択範囲右下にでるフィルハンドルをダブルクリックします。
(これによりD1:H1が2000行迄フィルコピーされます)
計算に時間がかかるので、結果が出るまでに少々時間がかかる可能性があります。

※ A列のデータ範囲を16000行迄と仮定してあります。(2000件×8行程度?)
なるべく小さいほうが計算負荷が少ないので、対象が16000行もない場合は式中の「A$1:A$16000」を調整してください。
※ 作業用のD列を削除したい場合は、E:H列を選択し「コピー」-「値をペースト」で固定値化してから、D列を削除してください。
※ 文章で書くと大変長いですが、関数式をコピペで入力するなら、2、3分で終わる作業と思います。
    • good
    • 0

No3です



みなさんの回答の意味が、ほとんど伝わってはいないようなので・・・

元データが何行あるのか知りませんけれど、補足を見る限りは行単位でよさそうなので、
 1)A列の前に新しく列を追加
 2)不要な行の新しい列に「1」などを記入(なんでも良いです)
 3)新しいA列を選択した状態で、「検索と選択」で「定数」を指定
 4)削除で「行全体」を削除
以上で、抽出したい行だけ残ることになります。

※ 1万行とかあるなら別ですけれど、100行、200行のレベルなら数分もあれば終わるでしょう。
※ 縦横を変換した表になさりたければ、関数で参照設定することでも可能です


あるいは、こんなページからと言うのなら、
https://swimming-info.net/prefectures/tokyo/citi …
元のページの方が文書構造が明確になっているので、直接「スクレイピング」で抽出してしまうような方法も考えられると思いますけれど、(多分)質問者様にはハードルが高いのではないかと想像します。
    • good
    • 0
この回答へのお礼

ご丁寧な解説、ありがとうございます。
ご記載いただいたURLのサイトから、全国分コピペした元データ(約2000件)があって、その処理に頭を抱えてしまったのです。
行間に規則性がないため、なかなか上手くいかずにいました。
お教え頂いた方法で、Tryしてみます。

お礼日時:2022/08/12 18:11

手作業での作業手順を箇条書きにして、


誰でも確実にデータ抽出できるようにしてみてください。
そのうえで考えると良いでしょう。

ロジカルな問題は、こうやって考えると楽に解けます。
    • good
    • 0

こんにちは



ご質問文からは具体的に何をしたいのかさっぱりなので、一般的な考え方を・・

1)抽出したい「必要項目」はどのようにすれば、論理的に
  特定できるのかを明確にする
2)テストデータなどで、1)の方法で問題ないかを確認
3)OKであれば、その方法で抽出する
 (VBAに限らずとも、関数等でも良いのではないでしょうか?)

>どうすれば出来ますか?
VBAで処理する必要があって、質問者様がVBAを作成できないのなら、まずはVBAのお勉強から始める必要があるのかもしれません。
あるいは、依頼サイトなどで作成を依頼するという方法もあります。
いずれにしろ、「何をどうしたいのか」を明確に説明できる状態になっていないと、進まないと思われます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
画像の添付がなかなか出来ないので、
文字で補足をアップしました。
ご覧になっていただけますでしょうか?
ご教授可能であれば宜しくお願いいたします。

お礼日時:2022/08/12 16:32

データに規則性があるのなら


文字列操作の関数で調べて、適合しそうな関数を使って抽出してみて下さい
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
しかしながら
データが大量にあるため
関数を当てはめていくのは厳しいと判断し困り果てている次第です。

お礼日時:2022/08/12 16:33

必要な項目の


「区切り開始となる文字の後」から
「区切り終了となる文字の前」まで
を抜き出して、新しいシートの先頭セルから順に貼り付けていく。

…とか、言葉で書かれて納得できるスキルがあるのか、
元がこの方法が使えるWEBページかまったく不明だけど。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
また、
画像がなかなかアップロード出来ず、
言葉のみの質問となってしまい申し訳ありませんでした。

お礼日時:2022/08/12 16:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング