0

スプレッドシートを作成しようとしている一連の (何千もの) 通話記録があります。それらはすべてテキストファイルにあります。フォーマットは次のようになります。

12/ 13/ 05 Syracuse, NY 10: 22 AM 111- 111- 1111 2 $ - $ - $ -
12/ 13/ 05 New York, NY 10: 28 AM 111- 111- 1111 (F) 2 $ - $ - $ -
12/ 13/ 05 Orlando, FL 10: 48 AM 111- 111- 1111 (F) 4 $ - $ - $ -

3/ 9/ 09 Internal 4: 51 PM 111- 111- 1111 (E) 23 $ - $ - $ -
10/ 14/ 11 Colorado Site 8: 12 AM 111- 111- 1111 14 $ - $ - $ -
1/ 3/ 12 Dept 27 3: 16 PM 111- 111- 1111 (F) 93 $ - $ - $ -

11/ 12/ 12 Internal 3: 13 PM 18765 (E) 16 $ - $ - $ -
11/ 14/ 12 Internal 11: 43 AM John Doe 3 $ - $ - $ -

月/日/年/都市、STATE HH: MM APM 123- 456 7890 OptionalCode $Charge $Tax $Total

これは、ファイルから直接、詳細を除いたものです。文字列を引用符で囲んだり、タブを使用したりしません。列にテキストを使用しようとしましたが、一部の都市にはスペースがあり、他の都市にはスペースがありません。

誰かが私を正しい方向に向けたいですか?おそらくRegEx(聞いたことはありますが、使用したことはありません)?他の何か?

更新: 初期のフィードバックに感謝します。行は私のファイルからの実際のデータですが、都市と電話番号は取り除いています。都市情報を更新して、そこに差異があることを示しました。私が見る限り、どの都市名にもカンマはありませんが、合計で 120,000 行近くを扱っており、明らかに、すべてをチェックしていません。

明らかに、都市には常にスペースがあるとは限りません-上のシラキュースにはありませんが、ニューヨークにはあります. 月と日付も、常に 2 桁であるとは限りません。これも、長さのチェックをオフにします。ただし、最初に、次に 2 番目のスラッシュまで読み取ることができます。これらは、日付と月の値の後に固定されています。

そして、角かっこで囲まれたコードは常に表示されるとは限りません... ある場合もあれば、ない場合もありますが、到着したときに1文字しか表示されないように見えます.

これでいくつかの問題が解決することを願っています。そもそも正しく保管されていれば、これははるかに簡単だったでしょう。はぁ。

更新 2、3、および 4 Robin の要求に従って、通話ログの変更から数行を追加しました。

4

2 に答える 2

3

あなたがVBAソリューションを求めていることは知っていますが、私は通話記録の解析を、数式を含むスプレッドシートで純粋に行っています。

ここにワークブックソリューションをアップロードしました(バージョン3)

ブックを開いたら、テキストファイルの内容をコピーしてセルに貼り付けますA2。次にB2:X2、必要な範囲で範囲を入力します。

数式は、月、日、年、都市、州、時間、コード、料金、税金、および合計の長さの任意のバリエーションで機能します。

行が途切れる場合はお知らせください。ヘッダーの[オートフィルター]ドロップダウンを使用してエラー/外部値を選択することにより、これらを簡単に確認できます。問題のある行を質問に追加します。

更新:

バージョン2は、Cityフィールドにロケーション名が含まれ、Stateフィールドが空白である状況を処理します。

バージョン3は、[電話番号]フィールドに内線番号または名前が含まれている状況を処理します。

于 2013-01-26T04:20:45.003 に答える
1

都市名にコンマがない場合、このようなものが機能する可能性があります。

Sub foo()
    thisLine = "12/ 13/ 05 City Name, ST 10: 28 AM 111- 111- 1111 (F) 2 $ - $ - $ -"
    thisDate = Mid(thisLine, 1, 10)
    thisLine = Mid(thisLine, 12)
    firstComma = InStr(1, thisLine, ",")
    City = Mid(thisLine, 1, firstComma - 1)
    thisLine = Mid(thisLine, firstComma + 2)
    State = Left(thisLine, 2)
    thisLine = Mid(thisLine, 4)
    thisTime = Left(thisLine, 9)
    thisLine = Mid(thisLine, 11)
    thisPhone = Left(thisLine, 14)
    thisLine = Mid(thisLine, 16)
    tempArray = Split(thisLine, "$")
    If UBound(tempArray) = 3 Then
    optionalCode = tempArray(0)
    charge = "$" & tempArray(1)
    tax = "$" & tempArray(2)
    Total = "$" & tempArray(3)
    Else
    ' throw an error something went wrong
    End If
End Sub
于 2013-01-26T00:58:34.737 に答える