- ベストアンサー
VBAについて
エクセルVBAについての質問です。 A1~A1000までのセルにURLが入っているとして 1つのセルに2つ以上のURLが入力されている場合、 2つ目以降のURLを抽出し、隣のセルに1つずつ貼り付けるような プログラムはどのように組めばよいのでしょうか? たとえば、 A50のセルに3つのURLが入力されていたら 1つ目のURLはA50 2つ目のURLはB50 3つ目のURLはC50 に貼り付けるようなプログラムです。 ご存じの方いらっしゃいましたらよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
全部の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 こんな感じでどうでしょう
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
色んな方法があるが、セル内改行で区分けされているようだから、 データー区切り位置の操作をして、マクロの記録を採る。そのとき、区切り文字で「その他」を選び「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」のように複数文字では使えないようだ。
お礼
回答ありがとうございます。 今回はNo.2の方の意見を参考にさせてもらいました。 また機会がありましたらよろしくお願いします。
- x0000x
- ベストアンサー率52% (67/127)
(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列~定義個数分までをセルに抽出し格納します。
お礼
回答ありがとうございます。 今回はNo.2の方の意見を参考にさせてもらいました。 また機会がありましたらよろしくお願いします。
- mt2008
- ベストアンサー率52% (885/1701)
データ→区切り位置でマクロ記録をするのが一番ですが、改行をどう区切り文字に指定するかで悩むかもしれませんね。改行は[Ctrl]+[J]で入力出来ます(何も見えませんが)。 マクロ記録した物から不要な物をとるとこんな感じです。 Sub Sample() Columns("A:A").TextToColumns DataType:=xlDelimited, OtherChar:=Chr(10) End Sub
お礼
回答ありがとうございます。 今回はNo.2の方の意見を参考にさせてもらいました。 また機会がありましたらよろしくお願いします。
- mu2011
- ベストアンサー率38% (1910/4994)
urlの区切りが固定文字ならデータ→区切り位置の操作をマクロ記録してみたら如何でしょうか。 マクロコードはalt+F11キー押下→標準モジュール→Module1で参照できます。
補足
回答ありがとうございます。 URLはセル内で改行して入力しています。 http://~~~~~~~ http://~~~~~~~ http://~~~~~~~ といったかんじです。
お礼
回答していただいたプログラムで 思い通りの結果を得ることができました。 ありがとうございました。