[[20141022203602]] 『列にある複数のデータセルからある一定の文字列が』(まっこい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『列にある複数のデータセルからある一定の文字列が含まれたセルを別々のシートに纏めるて保存するマクロ』(まっこい)

初めての質問・投稿失礼致します。
きちんと要約出来ず、解り辛くて申し訳ありません。
並びに既に解決済みでしたら申し訳ありません。

質問なのですが、
例えばA列に
1○○@docomo
2○○@ezweb
3○○@softbank
と〜100くらいまで色々な文字列のデータがあったとします。
それを
@docomoと文字列が付くデータをシート2に
@ezwebと文字列が付くデータをシート3に
@softbankと文字列が付くデータをシート4に
と出来るマクロや方法は御座いませんでしょうか?

非常に初歩的な質問かも知れませんが、
ご教授やご助力を頂ける方いらっしゃいましたらぜひ、
コメントを宜しくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 できますけど、もう少し仕訳ルール明確にしていただけますか?
 提示いただいた例では3種類ですが、たとえばi.softbankやdisnyなどはそのキャリアに振り分けるのかどうか。
 メールのドメインはそれこそ無数にあると思いますので、それらをすべて別シート、というのは
 いささか乱暴ではないですかね?
 3キャリア以外は「その他シート」に入れるなど明確に指示してください。

 それから「たとえばA列」と言われれば、A列のみ対象にしたコードを書きますが、
 後から実はB列も・・・など仕様変更は面倒ですので、セル番地は必ずご指定ください。

(稲葉) 2014/10/22(水) 21:11


コメント失礼致します。

せっかくご解答頂いていたのにご対応せずの不義理で申し訳ありません。
引き続きのご教授をお願いしたいと考えておりますので、どうぞ宜しくお願い致します。

【仕訳ルール】
・@docomo = シート1のA列
・@ezweb = シート2のA列
・@softbank = シート3のA列
・@i.softbank = シート4のA列
・vodafone.ne.jp = シート5のA列
以上の5つ以外はその他のシートに一纏め(A列)というカタチで処理をしたいです。

最初にご解答頂きました稲葉様を含め、ご教授頂ける方おりましたら
ぜひ、宜しくお願い申し上げます。
(まっこい) 2014/12/06(土) 18:18


 各ドメインは「.ne.jp」まで記述されているという前提ですが以下でどうでしょう
 もし「.ne.jp」が記述されていないのであれば、"docomo.ne.jp"等 を変更してください
 また、シート名もこちらで適当に設定したので適宜変更してください
 Sub a()

    Dim i         As Long
    Dim strDomain As String
    Dim strAddress As String

    For i = 1 To ws1.Range("A" & Rows.Count).End(xlUp).Row
        strAddress = ThisWorkbook.Worksheets("メールアドレス").Cells(i, 1).Value

        If 0 < InStr(strAddress, "vodafone.ne.jp") Then
            strDomain = Mid(strAddress, InStr(strAddress, "@") + 3, Len(strAddress) - InStr(strAddress, "@"))
        Else
            strDomain = Mid(strAddress, InStr(strAddress, "@") + 1, Len(strAddress) - InStr(strAddress, "@"))
        End If

        Select Case strDomain
            Case "docomo.ne.jp"
                With ThisWorkbook.Worksheets("シート1")
                    .Cells(.Range("A" & Rows.Count).End(xlUp).Row, 1).Value = strAddress
                End With
            Case "ezweb.ne.jp"
                With ThisWorkbook.Worksheets("シート2")
                    .Cells(.Range("A" & Rows.Count).End(xlUp).Row, 1).Value = strAddress
                End With

            Case "softbank.ne.jp"
                With ThisWorkbook.Worksheets("シート3")
                    .Cells(.Range("A" & Rows.Count).End(xlUp).Row, 1).Value = strAddress
                End With

            Case "i.softbank.ne.jp"
                With ThisWorkbook.Worksheets("シート4")
                    .Cells(.Range("A" & Rows.Count).End(xlUp).Row, 1).Value = strAddress
                End With

            Case "vodafone.ne.jp"
                With ThisWorkbook.Worksheets("シート5")
                    .Cells(.Range("A" & Rows.Count).End(xlUp).Row, 1).Value = strAddress
                End With
            Case Else
                With ThisWorkbook.Worksheets("その他")
                    .Cells(.Range("A" & Rows.Count).End(xlUp).Row, 1).Value = strAddress
                End With
        End Select
    Next i

 End Sub
(hoge) 2014/12/08(月) 11:39

 Sub test()
    Dim i As Long
    Dim j As Long
    Dim iFlag As Long
    Dim vw As Variant
    Dim vA As Variant
    Dim vS As Variant
    Dim iC() As Long

    vA = Array("docomo.", "ezweb.", "i.softbank.", "softbank.", ".vodafone.ne.jp")
    vS = Array("docomo", "ezweb", "i", "softbank", "vodafone", "その他")
    ReDim iC(UBound(vS))

    For i = 0 To UBound(vS)
        Sheets.Add after:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = vS(i)
    Next i

    For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        iFlag = 0
        vw = Split(Cells(i, "A").Value, "@")
        For j = 0 To UBound(vA)
            If vw(1) Like "*" & vA(j) & "*" Then
                iC(j) = iC(j) + 1
                Sheets(vS(j)).Cells(iC(j), "A").Value = Cells(i, "A").Value
                iFlag = j + 1
                Exit For
            End If
        Next j
        If iFlag = 0 Then
            iC(j) = iC(j) + 1
            Sheets(vS(j)).Cells(iC(j), "A").Value = Cells(i, "A").Value
        End If
    Next i
End Sub
(???) 2014/12/08(月) 12:34

 気づくの遅くてすみません。
 すでに出る幕なかった!
(稲葉) 2014/12/08(月) 15:36

コメント・ご教授頂きました方、誠に有難うございます!
早速取り組んでみます!!!
取り急ぎお礼のご連絡を申し上げますm(_ _)m

※稲葉様も有難うございますm(_ _)m
(まっこい) 2014/12/08(月) 15:43


(hoge)さん(???)さん、ご教授頂き誠に有難うございます!
 早速取り組んでみます!!! 
 取り急ぎお礼のご連絡を申し上げますm(_ _)m 

※稲葉様も有難うございますm(_ _)m

(まっこい) 2014/12/08(月) 15:48


ご面倒をおかけしております。

加えてお伺いできればと存じますが、
マクロのブックと編集元のマクロを別々にしたい
場合はどこを編集すれば宜しいのでしょうか?

初心者質問で申し訳ありません。
ご教授頂ければ幸いです。

(まっこい) 2014/12/08(月) 17:12


元データが別ブックにあるのですか? それとも、出力先が別ブックですか? 両方別ブックですか?
ブック名は? フォルダは? 元データのシート名は?

変更したい場合、他ブックを開く処理の追加と、現在Sheetsオブジェクトを操作している箇所全部を、
開いたブックのシート指定に変更することになります。

とりあえず、まずはそのまま自ブック内のシートにバラすことで使い、別ブックへは
手作業でシートコピーしていただくのが一番簡単かと思います。
(現状、自シートを元データとして使うことで、上記のような問題が出ないコーディングになっている訳です)
(???) 2014/12/08(月) 17:40


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.