No.4ベストアンサー
- 回答日時:
私自身も、通信ログは、Excelに貼りつけた状態からのものという前提からです。
'標準モジュールに登録して、FindText を実行してください。
シートがひとつ追加され、そこに出力されます。
Sub FindText()
Dim rng As Range
Dim c As Range, n As Variant
Dim arbuf() As String, buf As String
Dim i As Long, j As Long
With ActiveSheet
On Error Resume Next
Set rng = .UsedRange.SpecialCells(xlCellTypeConstants, xlTextValues)
On Error GoTo 0
For Each c In rng.Cells
If InStr(1, c.Value, "docomo", 1) > 0 Then
buf = sbFind_wRE(c.Value)
If buf <> "" Then
For Each n In Split(buf, "|", , 1)
If n <> "" Then
ReDim Preserve arbuf(i)
arbuf(i) = n
i = i + 1
End If
Next n
End If
End If
Next c
End With
With Worksheets.Add(After:=ActiveSheet) 'シートを追加
j = UBound(arbuf)
.Range("A1").Resize(j + 1, 1).Value = Application.Transpose(arbuf)
End With
End Sub
Private Function sbFind_wRE(ByVal strTxt As String)
Dim ret As String
Dim Matches As Object
Dim Match As Object
With CreateObject("VBScript.RegExp")
.Pattern = "On \d{4}/[01]\d/[0-3]\d, at [0-6]\d:[0-6]\d, [^@]+@[A-Za-z\.]+jp.? wrote:"
.Global = True
If .Test(strTxt) Then
Set Matches = .Execute(strTxt)
For Each Match In Matches
ret = Match.Value & "|" & ret
Next Match
End If
End With
If ret <> "" Then
sbFind_wRE = ret
End If
End Function
No.3
- 回答日時:
A1にデータがあるとしてB1セルに文字列を表示させるとしたら例えば次のようなマクロになりますね。
Range("B1").Formula="=IF(A1="","",MID(A1,FIND("mail",A1)+4,FIND("@",A1)-FIND("mail",A1)-4))"
No.2
- 回答日時:
エクセル関数でやると
例データ A1:A3
On 2009/07/07, at 1:5, mail*****@docomo.ne.jp wrote:
On 2009/7/7, at 21:56, mail*****@docomo2.ne.jp wrote:
関数 B2
=MID(A2,FIND("mail",A2),FIND("jp",A2)+2-FIND("mail",A2))
B3は式複写
結果
mail*****@docomo.ne.jp
mail*****@docomo2.ne.jp
ーー
VBAではFindに当たるのは、Instr関数だから
Sub test01()
For i = 2 To 3
x = Cells(i, "A")
s = Mid(x, InStr(x, "mail"), InStr(x, "jp") + 2 - InStr(x, "mail"))
MsgBox s
Next i
End Sub
sに答えの文字列が出る。
上記はエクセルのシートにデータが整った場合の話だが、実は他ソフトとの連携で旨くやれるプログラム力のレベルなのかな。
そちらの方が格段に難しいと思うが。
No.1
- 回答日時:
せめてその「メールのやりとり」を,どんな格好でエクセルに取り込みたい/取り込めるのか,前段の部分が無いとマクロにするにもとっかかりが無さ過ぎです。
作業例:
sub macro1()
dim myPath as string
dim fs as string
dim s as string
dim h as range
set h = activesheet.range("A1")
myPath = "c:\test\"
fs = dir(mypath & "*.txt")
do until fs = ""
open mypath & fs for input as #1
do until eof(1)
line input #1, s
if trim(s) like "On*wrote:" then
h = s
set h = h.offset(1)
end if
loop
close #1
fs = dir()
loop
end sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- Excel(エクセル) VBA 文字列変換と指定した列にある日時データから時間を削除する方法について 2 2022/04/14 15:23
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) エクセル関数について 8 2023/06/28 17:04
- Visual Basic(VBA) SQLで抽出 4 2022/12/04 13:55
- Excel(エクセル) エクセルの関数を教えてください。② 9 2023/05/25 15:28
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) マクロ削除再抽出する方法を教えて下さい。 6 2022/11/26 11:03
- Excel(エクセル) エクセルで#以降の文字を取得したい 1 2022/03/28 13:14
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでエクセルシートを更新...
-
excelで、セル内に文字が入力さ...
-
エクセルのシートを同時に行削...
-
【エクセル】シートのロックで...
-
同一セルに入力規則のリストと...
-
エクセルで別シート、または別...
-
表示倍率を変更させない方法
-
エクセルのチェックボックスを...
-
「24日の0時」って・・・
-
差し込み印刷に当日の日付が入...
-
エクセル マクロ 名前を付けて...
-
エクセルで最高値、最低値の日...
-
パソコンで購入したデーターが...
-
回覧板の日付について質問です...
-
「時間」、「期日」、「日付」...
-
日付を昇順で並び替えし、空白...
-
ACCESSで日付ごとに自動連番(...
-
エクセルで数字から名前に変...
-
Accessで、定型入力を使って年...
-
Excel:セルに入力されている日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでエクセルシートを更新...
-
excelで、セル内に文字が入力さ...
-
エクセルのシートを同時に行削...
-
表示倍率を変更させない方法
-
【エクセル】シートのロックで...
-
エクセル表作成についてお分か...
-
エクセルの担当者別にシートを...
-
エクセルVBAで65536レコードを...
-
Excelのマクロで、開いた時に、...
-
同一セルに入力規則のリストと...
-
エクセルで、2つのシートにある...
-
エクセルシートの統合
-
エクセルで更新日時を表示したい。
-
Excelで、表に小計と合計を入れ...
-
教えてください!エクセルのシ...
-
マクロ>指定した範囲をテキス...
-
STAT VIEWが使えない!!!
-
ワードの差し込み印刷について
-
エクセルVBAの文字列の部分一致...
-
エクセルで別シート、または別...
おすすめ情報