• ベストアンサー

セルを複数選択して移動させたい (Excel2003)

いつもお世話になってます。 エクセルの初歩的な操作方法かもしれませんが教えてください。 いま、電話料金の請求業務をしています。 キャリア(電話会社)からは「4m 10s」のようにでてきますが、 こちらでは分課金なので4m 10s → 5分 または、45s→1分 のように処理します。 そこで、下のような例で困っています。 4m 10s → 5 56s   →1 1m 3s →2 8m 59s →9 「(セルの)区切り位置」を利用すると・・・ A   B 4m  10s 56s  (空欄) 1m  3s 8m  59s ここからB列は何秒であろうが、繰り上げなので1分と判断します。 そしてA列のm(分)と足せば解決なんですが、 A列は「m」と「s」が混在してしまっています。 このような行が5000行近くあるのでひとつひとつ「s」を選択することが実質無理なんです。 A列でオートフィルタ機能を使い、「sを含むセル」を選択して 切り取り→B列に貼り付け をしてもなぜかうまくいきません・・・。 どうすればいいんでしょうか? どうかアドバイスお願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

区切りで分けていないデータからmを抜き出し、sがあれば、+1する =IF(ISERR(FIND("m",A1)),0,VALUE(LEFT(A1,FIND("m",A1)-1)))+IF(ISERR(FIND("s",A1)),0,1) 参考 m =IF(ISERR(FIND("m",A1)),0,VALUE(LEFT(A1,FIND("m",A1)-1))) s =IF(ISERR(FIND("m",A1)),VALUE(LEFT(A1,FIND("s",A1)-1)),VALUE(MID(A1,FIND("m",A1)+1,FIND("s",A1)-FIND("m",A1)-1)))

key-ko
質問者

お礼

No.1の方に教わったright関数でピックアップし No.3の方の手順で変換することでうまくできましたが、 この関数だと一発ですね(笑 中身がまだ完璧に理解できていませんが こういった複合の関数も使い慣れていきたいと思います。 どうもありがとうございました。

その他の回答 (4)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

#2 です。 十分検証してないしので、ご参考までにですすが。 マクロによる方法です。 A 列に以下の文字列があるとします。 4m 10s 56S 1m 3s 8m 59s このデータの範囲をマウスでセル選択し、下記マクロを実行すると 次のような結果が得られます。 4m 10s  00:04:10  00:05:00 56s    00:00:56  00:01:00 1m 3s   00:01:03  00:02:00 8m 59s  00:08:59  00:09:00 文字列をシリアル値に変換しているだけですが、分課金用に丸めた 時間も同時に計算しています。 Sub Sample()   Dim rngC As Range   Dim strDat As String   Dim datVal As Date   For Each rngC In Selection     If Not IsEmpty(rngC.Value) Then       '余計なSPと全半角の混在による事故防止       strDat = StrConv(CStr(Trim$(rngC.Value)), vbNarrow)       '大文字・小文字を区別しないので、TextCompareモードで       '「m」があるか判定       If Not InStr(1, rngC, "m", vbTextCompare) > 0 Then         '「m」があれば半角SPを補う         strDat = " " & strDat       End If       '半角SPで要素に区切る       Buf = Split(strDat, " ")       'シリアル値に変換       datVal = TimeSerial(0, Val(Buf(0)), Val(Buf(1)))       '一つ横のセルにそのものの時間を転記       With rngC.Offset(0, 1)         .NumberFormatLocal = "hh:mm:ss"         .Value = datVal       End With       '二つ横のセルに丸めた時間を転記       With rngC.Offset(0, 2)         .NumberFormatLocal = "hh:mm:ss"         .Value = Application.WorksheetFunction _               .Ceiling(datVal, 1 / 24 / 60)       End With     End If   Next rngC End Sub

key-ko
質問者

お礼

マクロまだ理解できず実践できませんでした。 覚えたら戻ってきてやってみたいと思います。 ありがとうございました。

  • Buchikun
  • ベストアンサー率36% (161/443)
回答No.3

オートフィルタでsだけ抜け出せたなら、それを全部1に書き換えてしまうのはどうでしょうか? フィルタのかかった状態で、セル右下のドラッグ機能で一気に1に書き換えできますよ。 もとのデータを残す必要があるなら、どこかにデータを移さないとまずいですけどね。

key-ko
質問者

お礼

単純ですけどオートフィルタで「~を含む」で簡単にできますね。 実践してみたらうまくできました。ありがとうございます。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。KenKen_SP です。 [区切り位置]を実行する前に、 =IF(ISERROR(FIND("m",A1,1))," " & A1,A1) みたいにして、Find関数で「m」が含まれるかチェックして、含まれ なければ、半角SPを補う。その後、値に変換して、[区切り位置]実行。 でどうですか?

key-ko
質問者

お礼

オートフィルタのオプション抽出でうまくできなかったことが この関数でできました。ありがとうございます。

  • tarame
  • ベストアンサー率33% (67/198)
回答No.1

C列に連番を入れておく D列に =right(A1,1) と入力(↓にコピー) D列をキーにして、ソート(並べ替え) D列が「s」のものを移動 C列をキーにして、ソート C列、D列を削除 こんな原始的な方法でいかがでしょうか?

key-ko
質問者

お礼

>回答をくれた皆様へ こんなにたくさんの回答ありがとうございます! まだ仕事がたくさん残っているので実践して ポイント振りたいと思います。スミマセン・・・

key-ko
質問者

補足

補足、ではありませんが rightの関数の使い方を覚えました。 簡単で今後に応用できそうです。ありがとうございました。

関連するQ&A

専門家に質問してみよう