• ベストアンサー

VBAについて

エクセルVBAについての質問です。 A1~A1000までのセルにURLが入っているとして 1つのセルに2つ以上のURLが入力されている場合、 2つ目以降のURLを抽出し、隣のセルに1つずつ貼り付けるような プログラムはどのように組めばよいのでしょうか? たとえば、 A50のセルに3つのURLが入力されていたら 1つ目のURLはA50 2つ目のURLはB50 3つ目のURLはC50 に貼り付けるようなプログラムです。 ご存じの方いらっしゃいましたらよろしくお願いします。

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

  • ベストアンサー
回答No.2

全部のURLがhttp:で始まっているという仮定で Sub sample() Dim i, j As Long Dim Div As Long Dim myURL As String For i = 1 To 1000 myURL = Cells(i, 1).Value Div = InStr(5, myURL, "http:") j = 1 Do Until Div = 0 Cells(i, j + 1) = Right(myURL, Len(myURL) - Div + 1) Cells(i, j) = Left(myURL, Div - 1) j = j + 1 myURL = Cells(i, j) Div = InStr(5, myURL, "http:") Loop Next End Sub こんな感じでどうでしょう

apple0917
質問者

お礼

回答していただいたプログラムで 思い通りの結果を得ることができました。 ありがとうございました。

その他の回答 (4)

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

色んな方法があるが、セル内改行で区分けされているようだから、 データー区切り位置の操作をして、マクロの記録を採る。そのとき、区切り文字で「その他」を選び「A」(何でも良い)とでも入れる。 そして標準モジュールに下記のようなコードになる。 そこで x = Chr(10)を加え、OtherChar:= x  に変える。下記は変えた後のコード。 ーー Sub Macro5() x = Chr(10) Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _ Semicolon:=False, Comma:=False, Space:=True, Other:=True, OtherChar:= _ x, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True End Sub 全行選択して、上記を実行。 ーー 全行のA列セルにSplit関数で分けてB列以下にセットする方法もある。 ーー データー区切り位置の操作は「http」のように複数文字では使えないようだ。

apple0917
質問者

お礼

回答ありがとうございます。 今回はNo.2の方の意見を参考にさせてもらいました。 また機会がありましたらよろしくお願いします。

  • x0000x
  • ベストアンサー率52% (67/127)
回答No.4

(1)URLを入力したシートの「シート見出し」でマウス右ボタンクリックし、  表示メニューから「コードの表示」を選択します。 (2)表示されたVBEに以下のコード(sub~end subまで)を貼り付けます。 --------------[ここから]------------------- Sub SplitURL() Dim i As Integer Dim urls() As String 'URLの定義行数分の繰り返し For i = 1 To 1000 'セルのURLを改行コード(Alt+Enterで入力)で分ける urls = Split(Cells(i, 1), vbLf) '複数の場合にB列以降に格納 'ただし、列の最大数の考慮はなし Dim j As Integer For j = 0 To UBound(urls) Cells(i, j + 1) = urls(j) Next Next End Sub --------------[ここまで]------------------- (3)メニューからマクロを表示し、"Sheet1.SplitURL"を実行します。  Excel2007の場合は「表示」-「マクロ」-「マクロの表示」をクリックし、  "Sheet1.SplitURL"を実行します。 ※複数のURLが格納されている場合はB列~定義個数分までをセルに抽出し格納します。

apple0917
質問者

お礼

回答ありがとうございます。 今回はNo.2の方の意見を参考にさせてもらいました。 また機会がありましたらよろしくお願いします。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

データ→区切り位置でマクロ記録をするのが一番ですが、改行をどう区切り文字に指定するかで悩むかもしれませんね。改行は[Ctrl]+[J]で入力出来ます(何も見えませんが)。 マクロ記録した物から不要な物をとるとこんな感じです。 Sub Sample()   Columns("A:A").TextToColumns DataType:=xlDelimited, OtherChar:=Chr(10) End Sub

apple0917
質問者

お礼

回答ありがとうございます。 今回はNo.2の方の意見を参考にさせてもらいました。 また機会がありましたらよろしくお願いします。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

urlの区切りが固定文字ならデータ→区切り位置の操作をマクロ記録してみたら如何でしょうか。 マクロコードはalt+F11キー押下→標準モジュール→Module1で参照できます。

apple0917
質問者

補足

回答ありがとうございます。 URLはセル内で改行して入力しています。 http://~~~~~~~ http://~~~~~~~ http://~~~~~~~ といったかんじです。

関連するQ&A

  • Excel VBA の作り方について【初心者】

    Excel VBA の作り方について質問させてください。 A1セルに「営業部【山本】」と入力されています。 B1セルに「01:35:24」(タイム)と入力されています。 (1)C1セルに「山本」を抜き出して表示 (2)D1セルに「95」(分数)で表示 (3)A2以降で同じ作業の繰り返し(最終入力列まで) というVBAを作成したいです。 マクロの場合だと、 (1)の部分は、=MID(LEFT(A1,FIND("】",A1)-1),FIND("【",A1)+1,50) (2)の部分は、=TEXT(A1,"[m]")*1 で入力ができますが、VBAの場合は違うため、困っております。 分かる方がおられましたら、よろしくお願いします。

  • エクセルのVBA 条件分岐について

    エクセルのVBAで、条件分岐プログラムを考えております。 セルA1に入力された数値が、 2.0以下は"B1セルの値をC1セルへコピー 数値が 5.0以上の場合は"B2セルの値をC1セルへコピー それ以外の場合は”対象外”と表示させたいのですが ご教授お願いします。 又、条件分岐後の部分『C1セルへコピー』の部分を"マクロ1を実行" "マクロ2を実行"というように、変える様な事も出来ますでしょうか? 以上よろしくお願いします。

  • エクセルVBAについて

    エクセルVBAに詳しい方教えて下さい。   A   B   C     左のようなエクセルの表で 1 品数  4         B1セルに品数を入れると 2 番号           番号の1~4までの行が残り 3 1              それ以降(5から)の行全てが 4 2             非表示になるようなコードを教えて  5 3             頂けないでしょうか。 6 4               7 5             品数は随時書き換えて入力する事を 8 6             前提としています。 ・ ・ ・ ・             お願い致します。

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • Excel文字列の連結について教えてください(VBA)

    Excelの文字列の結合について教えてください。 色々調べたのですが、VBA自体がよくわからず困っています。 やりたい事は、(Excel表をご参考) 『セルA1とB1とA2の文字を固定で、セルA3以降の文字以降を  順次連結してcsvに書き出すVBAを作成したい。』 どうしても繰り返す連結マクロがわかりません。 ExcelVBAに詳しい方、教えてください。 よろしくお願いします。 結果例) 20080501A01 20080501A02 20080501B01 20080501C01   ・   ・(300件以上続きます) <Excel表>    A列  B列 1  2008  05 2  01    3  A01 4  A02 5  B01 6  C01 7  ・ 8  ・

  • エクセル操作について(VBA)

    こんばんは。いつもお世話になってます。 エクセルの操作ですが、 シート1に A1セル 8:10 B1セル 12:05 C1セル 235(B1-A1の分換算) シート2に A1 7:01 B1 7:02 C1 7:03 D1 7:04 …  … ○1 8:10 … … △1 12:05 と入力されているとして、 ○2から△2まで(236セル)、自動的に色がつくようにしたいのですが、 関数や条件付き書式等で対応できるでしょうか? VBAならなんとかできそうですか? よろしくお願いします。

  • 連続データの計算式かVBAの質問

    お世話になります。 セルC1には年月(2013年11月など)と入力されています。 そしてセルB9~B39には数字の連続データ(1~31)が入力されています。 (1)C1のセルを次の月に変換した場合、B9~B39のデータを連続データの続き(32~)に自動変換する計算式やVBAは、どの様に組めば宜しいでしょうか? (2)そして、B9~B39どこかのセルを空白にした場合、空白にしたセル以降のセルも同様に空白に自動変換する計算式やVBAも分かりません。 (3)(2)で空白になったセルのどれかに「1」と再び入力したら、1を入力したセル以降が再び連続データで自動入力される様にするにはどうすれば良いか分かりません。 ご教授宜しくお願いします。

  • エクセルのVBAで教えてください

    エクセルのVBAで教えてください、セルA1の値をマクロボタンを押すたびに、セルC1から順番にC2・C3・C4・・・・と下に自動的に入力するVBAを教えてください。

  • excelオートフィルタの検索条件をセルに入力したい

    以下のようなexcelのリストがあるとします。     A       B    C~ 1 佐藤・鈴木  Aタイプ 2 田中・山田  Bタイプ 3  佐藤     Aタイプ 4  田中     Cタイプ 5 山田・鈴木  Cタイプ A列の"田"が含まれる行を抽出したい場合 オートフィルタをかけ、オプションの抽出条件の指定で "田"を含む、で検索すれば良い、というのはわかります。 ですが、この動作をもうちょっと簡単にできないかと思っています。 具体的には、以下のようにセルに入力して検索・抽出するとはできないでしょうか。     A       B    C~ 1   田 2 3 4   A       B    C~ 6 田中・山田  Bタイプ 8  田中     Cタイプ 9 山田・鈴木  Cタイプ (1、2行目=検索用 3行目=空き 4行目以降=リスト) 過去の質問で、同じようにセルに入力して抽出する方法を 聞いていた方がいらっしゃったので参考にしようと思ったのですが 方法がVBAを使ったもので、VBAの知識がまったく無いために さっぱり理解することができませんでした。 何か良い方法がありましたら教えていただけないでしょうか。

  • エクセルのVBAに関する質問です。

    エクセルのVBAに関する質問です。 仮にA列にA1からA14まで(12341231212345)と入っていて、さらにB列にB1からB14まで(38906493087639)と入っていたとします。A列の(2)の隣にあるB列の数字はそれぞれ(8407)になりますよね。 この2のとなりのB列の数字を、A列の最初から(1234)(123)(12)(12345)と1を区切りとして、C列に、2に対応していた先ほどの数字を入力したいのです。 つまりC列には(88884440077777)と入るようにしたいのですが、VBAド素人の私には解説書を読んでもいい知恵が浮かびません。 どなたか、ご説明か、できればVBAのコピーを取らせていただけないでしょうか? よろしくお願いいたします。

専門家に質問してみよう